parser-2.7.0.2/0000755000004100000410000000000013617025313013205 5ustar www-datawww-dataparser-2.7.0.2/.travis.yml0000644000004100000410000000261413617025313015321 0ustar www-datawww-datadist: trusty language: ruby matrix: include: - name: 2.0.0 / Parser tests rvm: 2.0.0 script: bundle exec rake test_cov - name: 2.2.10 / Parser tests rvm: 2.2.10 script: bundle exec rake test_cov - name: 2.3.8 / Parser tests rvm: 2.3.8 script: bundle exec rake test_cov - name: 2.4.9 / Parser tests rvm: 2.4.9 script: bundle exec rake test_cov - name: 2.5.7 / Parser tests rvm: 2.5.7 script: bundle exec rake test_cov - name: 2.6.5 / Parser tests rvm: 2.6.5 script: bundle exec rake test_cov - name: 2.7.0 / Parser tests rvm: 2.7.0 script: bundle exec rake test_cov - name: ruby-head / Parser tests rvm: ruby-head script: bundle exec rake test_cov - name: jruby-9.1.15.0 / Parser tests rvm: jruby-9.1.15.0 script: bundle exec rake test_cov - name: rbx-2 / Parser tests rvm: rbx-2 script: bundle exec rake test_cov - name: 2.5.7 / Rubocop tests rvm: 2.5.7 script: ./ci/run_rubocop_specs - name: 2.6.5 / Rubocop tests rvm: 2.6.5 script: ./ci/run_rubocop_specs - name: 2.7.0 / Rubocop tests rvm: 2.7.0 script: ./ci/run_rubocop_specs allow_failures: - rvm: ruby-head - rvm: rbx-2 - script: ./ci/run_rubocop_specs before_install: - gem install bundler -v '< 2' - bundle --version - gem --version parser-2.7.0.2/test/0000755000004100000410000000000013617025313014164 5ustar www-datawww-dataparser-2.7.0.2/test/test_source_range.rb0000644000004100000410000001125513617025313020230 0ustar www-datawww-data# frozen_string_literal: true require 'helper' class TestSourceRange < Minitest::Test def setup @buf = Parser::Source::Buffer.new('(string)') @buf.source = "foobar\nbaz" @sr1_3 = Parser::Source::Range.new(@buf, 1, 3) @sr2_2 = Parser::Source::Range.new(@buf, 2, 2) @sr3_3 = Parser::Source::Range.new(@buf, 3, 3) @sr2_6 = Parser::Source::Range.new(@buf, 2, 6) @sr5_8 = Parser::Source::Range.new(@buf, 5, 8) @sr5_7 = Parser::Source::Range.new(@buf, 5, 7) @sr6_7 = Parser::Source::Range.new(@buf, 6, 7) end def test_initialize assert_equal 1, @sr1_3.begin_pos assert_equal 3, @sr1_3.end_pos assert @sr1_3.frozen? end def test_size assert_equal 4, @sr2_6.size end def test_bad_size assert_raises ArgumentError do Parser::Source::Range.new(@buf, 2, 1) end end def test_join sr = @sr1_3.join(@sr5_8) assert_equal 1, sr.begin_pos assert_equal 8, sr.end_pos end def test_intersect assert_equal 2, @sr1_3.intersect(@sr2_6).begin_pos assert_equal 3, @sr1_3.intersect(@sr2_6).end_pos assert_equal 5, @sr2_6.intersect(@sr5_8).begin_pos assert_equal 6, @sr2_6.intersect(@sr5_8).end_pos assert @sr1_3.intersect(@sr5_8) == nil assert_equal 2, @sr1_3.intersect(@sr2_2).begin_pos assert_equal 2, @sr1_3.intersect(@sr2_2).end_pos assert_equal 2, @sr2_2.intersect(@sr2_2).begin_pos assert_equal 2, @sr2_2.intersect(@sr2_2).end_pos end def test_overlaps assert !@sr1_3.overlaps?(@sr5_8) assert @sr1_3.overlaps?(@sr2_6) assert @sr2_6.overlaps?(@sr5_8) assert @sr1_3.overlaps?(@sr2_2) assert !@sr2_6.overlaps?(@sr2_2) assert @sr2_2.overlaps?(@sr2_2) end def check_relationship(relationship, sr1, sr2, reflexive_relationship = relationship) # Double check equality assert_equal true, sr1 == sr1.dup assert_equal true, sr1 != sr2 # Check relationships and reflexivity assert_equal true, sr1.send(relationship, sr2) assert_equal true, sr2.send(reflexive_relationship, sr1) # Check it's not true for itself assert_equal false, sr1.send(relationship, sr1) # Check other relationships return false others = %i[disjoint? crossing? contains? contained?] - [relationship, reflexive_relationship] others.each do |other_rel| assert_equal false, sr1.send(other_rel, sr2), other_rel assert_equal false, sr2.send(other_rel, sr1), other_rel end end def test_disjoint check_relationship(:disjoint?, @sr1_3, @sr5_8) check_relationship(:disjoint?, @sr2_2, @sr2_6) check_relationship(:disjoint?, @sr2_2, @sr3_3) check_relationship(:disjoint?, @sr2_6, @sr6_7) end def test_crossing check_relationship(:crossing?, @sr1_3, @sr2_6) end def test_containment check_relationship(:contained?, @sr2_2, @sr1_3, :contains?) check_relationship(:contained?, @sr5_7, @sr5_8, :contains?) check_relationship(:contained?, @sr6_7, @sr5_8, :contains?) end def test_order assert_equal 0, @sr1_3 <=> @sr1_3 assert_equal -1, @sr1_3 <=> @sr5_8 assert_equal -1, @sr2_2 <=> @sr2_6 assert_equal +1, @sr2_6 <=> @sr2_2 assert_equal -1, @sr1_3 <=> @sr2_6 assert_equal +1, @sr2_2 <=> @sr1_3 assert_equal -1, @sr1_3 <=> @sr2_2 assert_equal -1, @sr5_7 <=> @sr5_8 assert_nil @sr1_3 <=> Parser::Source::Range.new(@buf.dup, 1, 3) assert_nil @sr1_3 <=> 4 end def test_empty assert !@sr1_3.empty? assert @sr2_2.empty? end def test_line sr = Parser::Source::Range.new(@buf, 7, 8) assert_equal 2, sr.line end def test_source_line sr = Parser::Source::Range.new(@buf, 7, 8) assert_equal 'baz', sr.source_line end def test_columns sr = Parser::Source::Range.new(@buf, 7, 8) assert_equal 0, sr.begin.column assert_equal 1, sr.end.column assert_equal 0...1, sr.column_range end def test_begin_end sr_beg = @sr2_6.begin assert_equal 2, sr_beg.begin_pos assert_equal 2, sr_beg.end_pos sr_end = @sr2_6.end assert_equal 6, sr_end.begin_pos assert_equal 6, sr_end.end_pos end def test_source sr = Parser::Source::Range.new(@buf, 0, 3) assert_equal 'foo', sr.source sr_multi = Parser::Source::Range.new(@buf, 0, 10) assert_equal "foobar\nbaz", sr_multi.source end def test_is? sr = Parser::Source::Range.new(@buf, 0, 3) assert sr.is?('foo') refute sr.is?('bar') end def test_to_s sr = Parser::Source::Range.new(@buf, 8, 9) assert_equal '(string):2:2', sr.to_s end def test_with sr2 = @sr1_3.with(begin_pos: 2) sr3 = @sr1_3.with(end_pos: 4) assert_equal 2, sr2.begin_pos assert_equal 3, sr2.end_pos assert_equal 1, sr3.begin_pos assert_equal 4, sr3.end_pos end end parser-2.7.0.2/test/parse_helper.rb0000644000004100000410000002217013617025313017164 0ustar www-datawww-data# frozen_string_literal: true module ParseHelper include AST::Sexp require 'parser/all' require 'parser/macruby' require 'parser/rubymotion' ALL_VERSIONS = %w(1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 mac ios) def setup @diagnostics = [] super if defined?(super) end def parser_for_ruby_version(version) case version when '1.8' then parser = Parser::Ruby18.new when '1.9' then parser = Parser::Ruby19.new when '2.0' then parser = Parser::Ruby20.new when '2.1' then parser = Parser::Ruby21.new when '2.2' then parser = Parser::Ruby22.new when '2.3' then parser = Parser::Ruby23.new when '2.4' then parser = Parser::Ruby24.new when '2.5' then parser = Parser::Ruby25.new when '2.6' then parser = Parser::Ruby26.new when '2.7' then parser = Parser::Ruby27.new when 'mac' then parser = Parser::MacRuby.new when 'ios' then parser = Parser::RubyMotion.new else raise "Unrecognized Ruby version #{version}" end parser.diagnostics.consumer = lambda do |diagnostic| @diagnostics << diagnostic end parser end def with_versions(versions) (versions & ALL_VERSIONS).each do |version| @diagnostics.clear parser = parser_for_ruby_version(version) yield version, parser end end def assert_source_range(begin_pos, end_pos, range, version, what) assert range.is_a?(Parser::Source::Range), "(#{version}) #{range.inspect}.is_a?(Source::Range) for #{what}" assert_equal begin_pos, range.begin_pos, "(#{version}) begin of #{what}" assert_equal end_pos, range.end_pos, "(#{version}) end of #{what}" end # Use like this: # ~~~ # assert_parses( # s(:send, s(:lit, 10), :+, s(:lit, 20)) # %q{10 + 20}, # %q{~~~~~~~ expression # | ^ operator # | ~~ expression (lit) # }, # %w(1.8 1.9) # optional # ) # ~~~ def assert_parses(ast, code, source_maps='', versions=ALL_VERSIONS) with_versions(versions) do |version, parser| try_parsing(ast, code, parser, source_maps, version) end # Also try parsing with lexer set to use UTF-32LE internally with_versions(versions) do |version, parser| parser.instance_eval { @lexer.force_utf32 = true } try_parsing(ast, code, parser, source_maps, version) end end def try_parsing(ast, code, parser, source_maps, version) source_file = Parser::Source::Buffer.new('(assert_parses)') source_file.source = code begin parsed_ast = parser.parse(source_file) rescue => exc backtrace = exc.backtrace Exception.instance_method(:initialize).bind(exc). call("(#{version}) #{exc.message}") exc.set_backtrace(backtrace) raise end if ast.nil? assert_nil parsed_ast, "(#{version}) AST equality" return end assert_equal ast, parsed_ast, "(#{version}) AST equality" parse_source_map_descriptions(source_maps) \ do |begin_pos, end_pos, map_field, ast_path, line| astlet = traverse_ast(parsed_ast, ast_path) if astlet.nil? # This is a testsuite bug. raise "No entity with AST path #{ast_path} in #{parsed_ast.inspect}" end assert astlet.frozen? assert astlet.location.respond_to?(map_field), "(#{version}) #{astlet.location.inspect}.respond_to?(#{map_field.inspect}) for:\n#{parsed_ast.inspect}" range = astlet.location.send(map_field) assert_source_range(begin_pos, end_pos, range, version, line.inspect) end assert parser.instance_eval { @lexer }.cmdarg.empty?, "(#{version}) expected cmdarg to be empty after parsing" assert_equal 0, parser.instance_eval { @lexer.instance_eval { @paren_nest } }, "(#{version}) expected paren_nest to be 0 after parsing" end # Use like this: # ~~~ # assert_diagnoses( # [:warning, :ambiguous_prefix, { prefix: '*' }], # %q{foo *bar}, # %q{ ^ location # | ~~~ highlights (0)}) # ~~~ def assert_diagnoses(diagnostic, code, source_maps='', versions=ALL_VERSIONS) with_versions(versions) do |version, parser| source_file = Parser::Source::Buffer.new('(assert_diagnoses)') source_file.source = code begin parser = parser.parse(source_file) rescue Parser::SyntaxError # do nothing; the diagnostic was reported end assert_equal 1, @diagnostics.count, "(#{version}) emits a single diagnostic, not\n" \ "#{@diagnostics.map(&:render).join("\n")}" emitted_diagnostic = @diagnostics.first level, reason, arguments = diagnostic arguments ||= {} message = Parser::MESSAGES[reason] % arguments assert_equal level, emitted_diagnostic.level assert_equal reason, emitted_diagnostic.reason assert_equal arguments, emitted_diagnostic.arguments assert_equal message, emitted_diagnostic.message parse_source_map_descriptions(source_maps) \ do |begin_pos, end_pos, map_field, ast_path, line| case map_field when 'location' assert_source_range begin_pos, end_pos, emitted_diagnostic.location, version, 'location' when 'highlights' index = ast_path.first.to_i assert_source_range begin_pos, end_pos, emitted_diagnostic.highlights[index], version, "#{index}th highlight" else raise "Unknown diagnostic range #{map_field}" end end end end # Use like this: # ~~~ # assert_diagnoses_many( # [ # [:warning, :ambiguous_literal], # [:error, :unexpected_token, { :token => :tLCURLY }] # ], # %q{m /foo/ {}}, # SINCE_2_4) # ~~~ def assert_diagnoses_many(diagnostics, code, versions=ALL_VERSIONS) with_versions(versions) do |version, parser| source_file = Parser::Source::Buffer.new('(assert_diagnoses_many)') source_file.source = code begin parser = parser.parse(source_file) rescue Parser::SyntaxError # do nothing; the diagnostic was reported end assert_equal diagnostics.count, @diagnostics.count diagnostics.zip(@diagnostics) do |expected_diagnostic, actual_diagnostic| level, reason, arguments = expected_diagnostic arguments ||= {} message = Parser::MESSAGES[reason] % arguments assert_equal level, actual_diagnostic.level assert_equal reason, actual_diagnostic.reason assert_equal arguments, actual_diagnostic.arguments assert_equal message, actual_diagnostic.message end end end def refute_diagnoses(code, versions=ALL_VERSIONS) with_versions(versions) do |version, parser| source_file = Parser::Source::Buffer.new('(refute_diagnoses)') source_file.source = code begin parser = parser.parse(source_file) rescue Parser::SyntaxError # do nothing; the diagnostic was reported end assert_empty @diagnostics, "(#{version}) emits no diagnostics, not\n" \ "#{@diagnostics.map(&:render).join("\n")}" end end def assert_context(context, code, versions=ALL_VERSIONS) with_versions(versions) do |version, parser| source_file = Parser::Source::Buffer.new('(assert_context)') source_file.source = code begin parser.parse(source_file) rescue Parser::SyntaxError # do nothing; the diagnostic was reported end assert_equal parser.context.stack, context, "(#{version}) parsing context" end end SOURCE_MAP_DESCRIPTION_RE = /(?x) ^(?# $1 skip) ^(\s*) (?# $2 highlight) ([~\^]+) \s+ (?# $3 source_map_field) ([a-z_]+) (?# $5 ast_path) (\s+\(([a-z_.\/0-9]+)\))? $/ def parse_source_map_descriptions(descriptions) unless block_given? return to_enum(:parse_source_map_descriptions, descriptions) end descriptions.each_line do |line| # Remove leading " |", if it exists. line = line.sub(/^\s*\|/, '').rstrip next if line.empty? if (match = SOURCE_MAP_DESCRIPTION_RE.match(line)) begin_pos = match[1].length end_pos = begin_pos + match[2].length source_map_field = match[3] if match[5] ast_path = match[5].split('.') else ast_path = [] end yield begin_pos, end_pos, source_map_field, ast_path, line else raise "Cannot parse source map description line: #{line.inspect}." end end end def traverse_ast(ast, path) path.inject(ast) do |astlet, path_component| # Split "dstr/2" to :dstr and 1 type_str, index_str = path_component.split('/') type = type_str.to_sym if index_str.nil? index = 0 else index = index_str.to_i - 1 end matching_children = \ astlet.children.select do |child| AST::Node === child && child.type == type end matching_children[index] end end end parser-2.7.0.2/test/test_diagnostic.rb0000644000004100000410000000520713617025313017700 0ustar www-datawww-data# frozen_string_literal: true require 'helper' class TestDiagnostic < Minitest::Test def setup @buffer = Parser::Source::Buffer.new('(string)') @buffer.source = 'if (this is some bad code + bugs)' @range1 = Parser::Source::Range.new(@buffer, 0, 2) # if @range2 = Parser::Source::Range.new(@buffer, 4, 8) # this end def test_verifies_levels error = assert_raises ArgumentError do Parser::Diagnostic.new(:foobar, :escape_eof, {}, @range1) end assert_match /level/, error.message end def test_freezes string = 'foo'.dup highlights = [@range2] diag = Parser::Diagnostic.new(:error, :escape_eof, @range1, highlights) assert diag.frozen? assert diag.arguments.frozen? assert diag.highlights.frozen? refute string.frozen? refute highlights.frozen? end def test_render location = Parser::Source::Range.new(@buffer, 26, 27) highlights = [ Parser::Source::Range.new(@buffer, 21, 25), Parser::Source::Range.new(@buffer, 28, 32) ] diag = Parser::Diagnostic.new(:error, :unexpected, { :character => '+' }, location, highlights) assert_equal([ "(string):1:27: error: unexpected `+'", '(string):1: if (this is some bad code + bugs)', '(string):1: ~~~~ ^ ~~~~ ' ], diag.render) end def test_multiline_render @buffer = Parser::Source::Buffer.new('(string)') @buffer.source = "abc abc abc\ndef def def\nghi ghi ghi\n" location = Parser::Source::Range.new(@buffer, 4, 27) highlights = [ Parser::Source::Range.new(@buffer, 0, 3), Parser::Source::Range.new(@buffer, 28, 31) ] diag = Parser::Diagnostic.new(:error, :unexpected_token, { :token => 'ghi' }, location, highlights) assert_equal([ "(string):1:5-3:3: error: unexpected token ghi", '(string):1: abc abc abc', '(string):1: ~~~ ^~~~~~~...', '(string):3: ghi ghi ghi', '(string):3: ~~~ ~~~ ' ], diag.render) end def test_bug_error_on_newline # regression test; see GitHub issue 273 source = <<-CODE { foo: ->() # I forgot my brace } } CODE @buffer = Parser::Source::Buffer.new('(string)') @buffer.source = source location = Parser::Source::Range.new(@buffer, 33, 34) diag = Parser::Diagnostic.new(:error, :unexpected_token, { :token => 'tNL' }, location) assert_equal([ '(string):2:32: error: unexpected token tNL', '(string):2: foo: ->() # I forgot my brace', '(string):2: ^' ], diag.render) end end parser-2.7.0.2/test/helper.rb0000644000004100000410000000244013617025313015770 0ustar www-datawww-data# frozen_string_literal: true require 'tempfile' require 'minitest/test' require 'simplecov' if ENV.include?('COVERAGE') && SimpleCov.usable? require_relative 'racc_coverage_helper' RaccCoverage.start( %w( ruby18.y ruby19.y ruby20.y ruby21.y ruby22.y ruby23.y ruby24.y ruby25.y ruby26.y ruby27.y ), File.expand_path('../../lib/parser', __FILE__)) # Report results faster. at_exit { RaccCoverage.stop } SimpleCov.start do self.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter, ] add_group 'Grammars' do |source_file| source_file.filename =~ %r{\.y$} end # Exclude the testsuite itself. add_filter '/test/' # Exclude generated files. add_filter do |source_file| source_file.filename =~ %r{/lib/parser/(lexer|ruby\d+|macruby|rubymotion)\.rb$} end end end # minitest/autorun must go after SimpleCov to preserve # correct order of at_exit hooks. require 'minitest/autorun' $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) require 'parser' class Parser::AST::Node def initialize(type, *) raise "Type #{type} missing from Parser::Meta::NODE_TYPES" unless Parser::Meta::NODE_TYPES.include?(type) super end end parser-2.7.0.2/test/test_diagnostic_engine.rb0000644000004100000410000000257113617025313021226 0ustar www-datawww-data# frozen_string_literal: true require 'helper' class TestDiagnosticEngine < Minitest::Test def setup @buffer = Parser::Source::Buffer.new('(source)') @buffer.source = 'foobar' @engine = Parser::Diagnostic::Engine.new @queue = [] @engine.consumer = lambda { |diag| @queue << diag } end def test_process_warnings warn = Parser::Diagnostic.new(:warning, :invalid_escape, @buffer, 1..2) @engine.process(warn) assert_equal [warn], @queue end def test_ignore_warnings @engine.ignore_warnings = true warn = Parser::Diagnostic.new(:warning, :invalid_escape, @buffer, 1..2) @engine.process(warn) assert_equal [], @queue end def test_all_errors_are_fatal @engine.all_errors_are_fatal = true error = Parser::Diagnostic.new(:error, :invalid_escape, @buffer, 1..2) err = assert_raises Parser::SyntaxError do @engine.process(error) end assert_equal error, err.diagnostic assert_equal [error], @queue end def test_all_errors_are_collected error = Parser::Diagnostic.new(:error, :invalid_escape, @buffer, 1..2) @engine.process(error) assert_equal [error], @queue end def test_fatal_error fatal = Parser::Diagnostic.new(:fatal, :invalid_escape, @buffer, 1..2) assert_raises Parser::SyntaxError do @engine.process(fatal) end assert_equal [fatal], @queue end end parser-2.7.0.2/test/test_source_rewriter.rb0000644000004100000410000003312213617025313020774 0ustar www-datawww-data# frozen_string_literal: true require 'helper' class TestSourceRewriter < Minitest::Test def setup @buf = Parser::Source::Buffer.new('(rewriter)') @buf.source = 'foo bar baz' Parser::Source::Rewriter.warned_of_deprecation = true @rewriter = Parser::Source::Rewriter.new(@buf) end def range(from, len) Parser::Source::Range.new(@buf, from, from + len) end def test_remove assert_equal 'foo baz', @rewriter. remove(range(4, 3)). process end def test_insert_before assert_equal 'foo quux bar baz', @rewriter. insert_before(range(4, 3), 'quux '). process end def test_insert_after assert_equal 'foo bar quux baz', @rewriter. insert_after(range(4, 3), ' quux'). process end def test_replace assert_equal 'foo quux baz', @rewriter. replace(range(4, 3), 'quux'). process end def test_composing_asc assert_equal 'foo---bar---baz', @rewriter. replace(range(3, 1), '---'). replace(range(7, 1), '---'). process end def test_composing_desc assert_equal 'foo---bar---baz', @rewriter. replace(range(7, 1), '---'). replace(range(3, 1), '---'). process end # # Merging/clobbering of overlapping edits # def test_insertion_just_before_replace assert_equal 'foostrawberry jam---bar baz', @rewriter. replace(range(3, 1), '---'). insert_before(range(3, 1), 'strawberry jam'). process end def test_insertion_just_after_replace assert_equal 'foo---strawberry jam baz', @rewriter. replace(range(3, 4), '---'). insert_after(range(3, 4), 'strawberry jam'). process end def test_insertion_just_before_remove assert_equal 'foostrawberry jambar baz', @rewriter. remove(range(3, 1)). insert_before(range(3, 1), 'strawberry jam'). process end def test_insertion_just_after_remove assert_equal 'foostrawberry jam baz', @rewriter. remove(range(3, 4)). insert_after(range(3, 4), 'strawberry jam'). process end def test_insertion_just_before_replace_at_buffer_start assert_equal 'strawberry jam--- bar baz', @rewriter. replace(range(0, 3), '---'). insert_before(range(0, 1), 'strawberry jam'). process end def test_insertion_just_after_replace_at_buffer_end assert_equal 'foo bar ---strawberry jam', @rewriter. replace(range(8, 3), '---'). insert_after(range(9, 2), 'strawberry jam'). process end def test_insertion_just_before_remove_at_buffer_start assert_equal 'strawberry bar baz', @rewriter. remove(range(0, 3)). insert_before(range(0, 1), 'strawberry'). process end def test_insertion_just_after_remove_at_buffer_end assert_equal 'foo bar strawberry', @rewriter. remove(range(8, 3)). insert_after(range(10, 1), 'strawberry'). process end def test_multiple_insertions_at_same_location_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. insert_before(range(0, 11), '<'). insert_after( range(0, 11), '>'). insert_before(range(0, 7), '(') end end def test_intentional_multiple_insertions_at_same_location assert_equal 'foo [(bar)] baz', @rewriter. insert_before_multi(range(4, 0), '('). insert_after_multi(range(7, 0), ')'). insert_before_multi(range(4, 0), '['). insert_after_multi(range(7, 0), ']'). process end def test_insertion_within_replace_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. replace(range(3, 2), '<'). insert_after(range(3, 1), '>') end end def test_insertion_within_remove_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. remove(range(3, 2)). insert_after(range(3, 1), '>') end end def test_replace_overlapping_insertion_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. insert_after(range(3, 1), '>'). replace(range(3, 2), '<') end end def test_remove_overlapping_insertion_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. insert_after(range(3, 1), '>'). remove(range(3, 2)) end end def test_multi_insertion_within_replace_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. replace(range(3, 2), '<'). insert_after_multi(range(3, 1), '>') end end def test_multi_insertion_within_remove_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. remove(range(3, 2)). insert_after_multi(range(3, 1), '>') end end def test_replace_overlapping_multi_insertion_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. insert_after_multi(range(3, 1), '>'). replace(range(3, 2), '<') end end def test_remove_overlapping_multi_insertion_clobber silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. insert_after_multi(range(3, 1), '>'). remove(range(3, 2)) end end def test_insertion_on_merged_insertion_clobber # 2 insertions at the same point clobber each other, even if the 1st one # was merged with an adjacent edit, and even if the same text is being # inserted silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. insert_before(range(3, 1), '>'). remove(range(3, 2)). insert_after(range(2, 1), '>') end end def test_insertion_merge_with_overlapping_replace assert_equal 'fo abc bar baz', @rewriter. insert_before(range(3, 1), 'abc'). replace(range(2, 2), ' abc '). process end def test_replace_merge_with_overlapped_insertion assert_equal 'fo abc bar baz', @rewriter. replace(range(2, 2), ' abc '). insert_before(range(3, 1), 'abc'). process end def test_replace_same_begin_larger_than_replaced_range_matching assert_equal 'foo supercalifragilistic baz', @rewriter. replace(range(4, 3), 'super'). replace(range(4, 3), 'supercalifragilistic'). process end def test_replace_same_begin_larger_than_replaced_range_non_matching silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. replace(range(4, 3), 'super!'). replace(range(4, 3), 'supercalifragilistic') end end def test_overlapping_replace_left_smaller_than_replaced_matching assert_equal 'superbaz', @rewriter. replace(range(0, 7), 'super'). replace(range(2, 6), 'per'). process end def test_overlapping_replace_left_smaller_than_replaced_non_matching silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. replace(range(0, 7), 'super'). replace(range(2, 8), 'perk') end end def test_overlapping_replace_left_larger_right_smaller_matching assert_equal 'foods baz', @rewriter. replace(range(1, 3), 'oods '). replace(range(3, 6), 'ds b'). process end def test_overlapping_replace_left_larger_right_larger_matching assert_equal 'foods abcdefghijklm', @rewriter. replace(range(1, 3), 'oods '). replace(range(3, 8), 'ds abcdefghijklm'). process end def test_overlapping_replace_left_larger_right_smaller_non_matching silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. replace(range(1, 3), 'oods '). replace(range(3, 6), 'ds') end end def test_overlapping_replace_left_larger_right_larger_non_matching silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. replace(range(1, 3), 'oods b'). replace(range(3, 8), 'ds abcdefghijklm') end end def test_subsuming_replace_both_smaller_matching assert_equal 'food baz', @rewriter. replace(range(0, 7), 'food'). replace(range(3, 3), 'd'). process end def test_subsuming_replace_both_smaller_non_matching silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. replace(range(0, 7), 'foo'). replace(range(3, 3), 'd') end end def test_subsuming_replace_both_larger_matching assert_equal 'foo barr baz', @rewriter. replace(range(0, 7), 'foo barr'). replace(range(3, 3), ' bar'). process end def test_subsuming_replace_both_larger_non_matching silence_diagnostics assert_raises Parser::ClobberingError do @rewriter. replace(range(0, 7), 'foo barr'). replace(range(3, 3), ' bar ') end end def test_replaced_ranges_merge_when_furthest_right_range_is_not_furthest_left # regression test; previously, when actions were merged, the resulting # replaced range could be too small sometimes assert_equal 'foo_***_***', @rewriter. replace(range(3, 1), '_'). replace(range(7, 1), '_'). replace(range(4, 7), '***_***'). process end def test_clobber diagnostics = [] @rewriter.diagnostics.consumer = lambda do |diag| diagnostics << diag end assert_raises Parser::ClobberingError do @rewriter. replace(range(3, 1), '---'). remove(range(3, 1)) end assert_equal 2, diagnostics.count assert_equal :error, diagnostics.first.level assert_equal 'cannot remove 1 character(s)', diagnostics.first.message assert_equal range(3, 1), diagnostics.first.location assert_equal :note, diagnostics.last.level assert_equal "clobbered by: replace 1 character(s) with \"---\"", diagnostics.last.message assert_equal range(3, 1), diagnostics.last.location end def test_clobbering_error_backward_compatibility silence_diagnostics rescued = false # We use begin..rescue..end here rather than #assert_raises # since #assert_raises expects exact error class. begin @rewriter. replace(range(3, 1), '---'). remove(range(3, 1)) rescue RuntimeError => error rescued = true if error.message.include?('clobber') end assert rescued end def test_crossing_delete assert_equal 'faz', @rewriter. remove(range(1, 4)). remove(range(6, 3)). remove(range(4, 3)). process end def test_overlapping_replace assert_equal 'flippin flyin flapjackz', @rewriter. replace(range(1, 4), 'lippin f'). replace(range(4, 4), 'pin flyin flap'). replace(range(7, 3), ' flyin flapjack'). process end def test_subsuming_delete assert_equal 'foo', @rewriter. remove(range(6, 3)). remove(range(7, 2)). remove(range(3, 8)). process end def test_subsuming_replace assert_equal 'freebie', @rewriter. replace(range(3, 3), 'ebi'). replace(range(1, 10), 'reebie'). replace(range(5, 2), 'ie'). process end def test_equivalent_delete_insert_replace # A deletion + insertion just before or after the deleted range is # identical in every way to a replacement! So logically, they shouldn't # conflict. assert_equal 'tin bar baz', @rewriter. remove(range(0, 3)). # ' bar baz' insert_before(range(0, 1), 'tin'). # 'tin bar baz' replace(range(0, 3), 'tin'). process end def test_transaction_returns_self assert_equal @rewriter, @rewriter.transaction {} end def test_transaction_commit silence_diagnostics # Original: 'foo bar baz' # Rewrite as 'foo BAR baz' @rewriter.replace(range(4, 3), 'BAR') # Rewrite as '( bar )' @rewriter.transaction do @rewriter.replace(range(0, 3), '(') @rewriter.replace(range(8, 3), ')') end @rewriter.replace(range(3, 1), '_') @rewriter.replace(range(7, 1), '_') assert_equal '(_BAR_)', @rewriter.process end def test_transaction_rollback silence_diagnostics # Original: 'foo bar baz' # Rewrite as 'foo bar BAZ' @rewriter.replace(range(8, 3), 'BAZ') assert_raises Parser::ClobberingError do # Trying to rewrite as '( bar )', but it fails @rewriter.transaction do @rewriter.replace(range(0, 3), '(') @rewriter.replace(range(8, 3), ')') end end @rewriter.replace(range(0, 3), 'FOO') assert_equal 'FOO bar BAZ', @rewriter.process end def test_nested_transaction_raises_error error = assert_raises RuntimeError do @rewriter.transaction do @rewriter.transaction do end end end assert_match /nested/i, error.message end def test_process_in_transaction_raises_error error = assert_raises RuntimeError do @rewriter.transaction do @rewriter.process end end assert_match /transaction/, error.message end def silence_diagnostics @rewriter.diagnostics.consumer = proc {} end end parser-2.7.0.2/test/test_base.rb0000644000004100000410000000131213617025313016457 0ustar www-datawww-data# frozen_string_literal: true require 'helper' require 'parser/current' class TestBase < Minitest::Test include AST::Sexp def test_parse ast = Parser::CurrentRuby.parse('1') assert_equal s(:int, 1), ast end def test_parse_with_comments ast, comments = Parser::CurrentRuby.parse_with_comments('1 # foo') assert_equal s(:int, 1), ast assert_equal 1, comments.size assert_equal '# foo', comments.first.text end def test_loc_to_node ast = Parser::CurrentRuby.parse('1') assert_equal ast.loc.node, ast end def test_loc_dup ast = Parser::CurrentRuby.parse('1') assert_nil ast.loc.dup.node Parser::AST::Node.new(:root, [], :location => ast.loc) end end parser-2.7.0.2/test/bug_163/0000755000004100000410000000000013617025313015332 5ustar www-datawww-dataparser-2.7.0.2/test/bug_163/fixtures/0000755000004100000410000000000013617025313017203 5ustar www-datawww-dataparser-2.7.0.2/test/bug_163/fixtures/output.rb0000644000004100000410000000010213617025313021061 0ustar www-datawww-data# frozen_string_literal: true if true puts "Hello, world!" end parser-2.7.0.2/test/bug_163/fixtures/input.rb0000644000004100000410000000010313617025313020661 0ustar www-datawww-data# frozen_string_literal: true if(true) puts "Hello, world!" end parser-2.7.0.2/test/bug_163/rewriter.rb0000644000004100000410000000125013617025313017520 0ustar www-datawww-data# frozen_string_literal: true class Rewriter < Parser::Rewriter def on_if(node) # Crude, totally-not-usable-in-the-real-world code to remove optional # parens from control keywords. # # In a perfect test scenario we'd simply make this a no-op, to demonstrate # that the bug happens when any rewriter is loaded regardless of whether it # actually changes anything but that makes assertions much harder to get # right. It's much easier to just show that the file did, or did not # get changed. if node.children[0].type == :begin replace node.children[0].loc.begin, ' ' remove node.children[0].loc.end end super end end parser-2.7.0.2/test/test_encoding.rb0000644000004100000410000000463713617025313017350 0ustar www-datawww-data# encoding: binary # frozen_string_literal: true require 'helper' class TestEncoding < Minitest::Test include AST::Sexp def recognize(string) Parser::Source::Buffer.recognize_encoding(string) end require 'parser/all' def test_default assert_nil recognize('foobar') end def test_bom assert_equal Encoding::UTF_8, recognize("\xef\xbb\xbf\nfoobar") assert_equal Encoding::UTF_8, recognize("\xef\xbb\xbf# coding:koi8-r\nfoobar") end def test_magic_comment assert_equal Encoding::KOI8_R, recognize("# coding:koi8-r\nfoobar") end def test_shebang assert_equal Encoding::KOI8_R, recognize("#!/bin/foo\n# coding:koi8-r\nfoobar") assert_nil recognize("#!/bin/foo\n") end def test_case assert_equal Encoding::KOI8_R, recognize("# coding:KoI8-r\nfoobar") end def test_space assert_equal Encoding::KOI8_R, recognize("# coding : koi8-r\nfoobar") end def test_empty assert_nil recognize('') end def test_no_comment assert_nil recognize(%{require 'cane/encoding_aware_iterator'}) end def test_adjacent assert_nil recognize('# codingkoi8-r') assert_nil recognize('# coding koi8-r') end def test_utf8_mac assert_equal Encoding::UTF8_MAC, recognize('# coding: utf8-mac') end def test_suffix assert_equal Encoding::UTF_8, recognize('# coding: utf-8-dos') assert_equal Encoding::UTF_8, recognize('# coding: utf-8-unix') assert_equal Encoding::UTF_8, recognize('# coding: utf-8-mac') assert_raises(ArgumentError) do assert_nil recognize('# coding: utf-8-dicks') end end def test_parse_18_invalid_enc ast = Parser::Ruby18.parse("# encoding:feynman-diagram\n1") assert_equal ast, s(:int, 1) end def test_parse_19_invalid_enc assert_raises(ArgumentError) do Parser::Ruby19.parse("# encoding:feynman-diagram\n1") end end def test_ending_comment assert_nil recognize('foo # coding: koi8-r') end def test_wrong_prefix assert_nil recognize('# decoding: koi8-r') end def test_no_spaces assert_equal Encoding::KOI8_R, recognize('#encoding:koi8-r') assert_equal Encoding::KOI8_R, recognize('#coding:koi8-r') end def test_underscore_and_star_characters assert_equal Encoding::KOI8_R, recognize('# -*- encoding: koi8-r -*-') end def test_garbage_around_encoding_comment assert_equal Encoding::KOI8_R, recognize('# 1$# -*- &)* encoding: koi8-r 1$# -*- &)*') end end parser-2.7.0.2/test/test_source_buffer.rb0000644000004100000410000000771013617025313020406 0ustar www-datawww-data# frozen_string_literal: true require 'helper' class TestSourceBuffer < Minitest::Test def setup @buffer = Parser::Source::Buffer.new('(string)') end def test_initialize buffer = Parser::Source::Buffer.new(nil) assert_equal '', buffer.name buffer = Parser::Source::Buffer.new(Pathname('a/b')) assert_equal 'a/b', buffer.name buffer = Parser::Source::Buffer.new('(string)') assert_equal '(string)', buffer.name assert_equal 1, buffer.first_line buffer = Parser::Source::Buffer.new('(string)', 5) assert_equal 5, buffer.first_line end def test_source_setter @buffer.source = 'foo' assert_equal 'foo', @buffer.source assert @buffer.source.frozen? end def test_source_double_setter @buffer.source = 'foo' assert_raises(ArgumentError) do @buffer.source = 'bar' end end def test_source_setter_encoding_error error = assert_raises EncodingError do @buffer.source = [ '# encoding: utf-8', "# \xf9" ].join("\n") end assert_match /invalid byte sequence in UTF\-8/, error.message end def test_read tempfile = Tempfile.new('parser') tempfile.write('foobar') tempfile.flush buffer = Parser::Source::Buffer.new(tempfile.path) buffer.read assert_equal 'foobar', buffer.source assert buffer.source.frozen? end def test_uninitialized assert_raises RuntimeError do @buffer.source end end def test_decompose_position @buffer.source = "1\nfoo\nbar" assert_equal [1, 0], @buffer.decompose_position(0) assert_equal [1, 1], @buffer.decompose_position(1) assert_equal [2, 0], @buffer.decompose_position(2) assert_equal [3, 1], @buffer.decompose_position(7) end def test_decompose_position_mapped @buffer = Parser::Source::Buffer.new('(string)', 5) @buffer.source = "1\nfoo\nbar" assert_equal [5, 0], @buffer.decompose_position(0) assert_equal [6, 0], @buffer.decompose_position(2) end def test_line @buffer.source = "1\nfoo\nbar" assert_equal '1', @buffer.source_line(1) assert_equal 'foo', @buffer.source_line(2) end def test_line_mutate @buffer.source = "1\nfoo\nbar" assert_equal '1', @buffer.source_line(1) @buffer.source_line(1)[0] = '2' assert_equal '1', @buffer.source_line(1) end def test_line_mapped @buffer = Parser::Source::Buffer.new('(string)', 5) @buffer.source = "1\nfoo\nbar" assert_equal '1', @buffer.source_line(5) assert_equal 'foo', @buffer.source_line(6) end def test_line_range @buffer = Parser::Source::Buffer.new('(string)', 5) @buffer.source = "abc\ndef\nghi\n" assert_raises IndexError do @buffer.line_range(4) end assert_equal 'abc', @buffer.line_range(5).source assert_equal 'def', @buffer.line_range(6).source assert_equal 'ghi', @buffer.line_range(7).source assert_equal '', @buffer.line_range(8).source assert_raises IndexError do @buffer.line_range(9) end end def test_source_range @buffer = Parser::Source::Buffer.new('(string)', 5) assert_raises RuntimeError do @buffer.source_range end @buffer.source = "abc\ndef\nghi\n" assert_equal Parser::Source::Range.new(@buffer, 0, @buffer.source.size), @buffer.source_range end def test_last_line @buffer.source = "1\nfoo\nbar" assert_equal 3, @buffer.last_line @buffer = Parser::Source::Buffer.new('(string)', 5) @buffer.source = "" assert_equal 5, @buffer.last_line @buffer = Parser::Source::Buffer.new('(string)', 5) @buffer.source = "abc\n" assert_equal 6, @buffer.last_line end def test_source_lines @buffer.source = "1\nfoo\nbar\n" assert_equal ['1', 'foo', 'bar', ''], @buffer.source_lines assert @buffer.source_lines.frozen? assert @buffer.source_lines.all?(&:frozen?) @buffer = Parser::Source::Buffer.new('(string)', 5) @buffer.source = "foo\nbar" assert_equal ['foo', 'bar'], @buffer.source_lines end end parser-2.7.0.2/test/test_lexer_stack_state.rb0000644000004100000410000000251413617025313021256 0ustar www-datawww-data# frozen_string_literal: true require 'helper' class TestLexerStackState < Minitest::Test def setup @state = Parser::Lexer::StackState.new('state') end def test_push refute @state.active? assert_equal true, @state.push(true) assert @state.active? assert_equal false, @state.push(false) refute @state.active? end def test_clear @state.push true @state.clear refute @state.active? end def test_pop @state.push(true) assert_equal true, @state.pop refute @state.active? end def test_pop_empty assert_equal false, @state.pop refute @state.active? end def test_lexpop_10 @state.push(true) @state.push(false) assert_equal true, @state.lexpop assert_equal true, @state.pop end def test_lexpop_01 @state.push(false) @state.push(true) assert_equal true, @state.lexpop assert_equal true, @state.pop end def test_lexpop_00 @state.push(false) @state.push(false) assert_equal false, @state.lexpop assert_equal false, @state.pop end def test_dup @state.push(true) new_state = @state.dup assert_equal true, @state.pop assert_equal true, new_state.pop end def test_to_s @state.push(true) @state.push(false) @state.push(false) assert_equal '[100 <= state]', @state.to_s end end parser-2.7.0.2/test/test_source_tree_rewriter.rb0000644000004100000410000001273013617025313022015 0ustar www-datawww-data# frozen_string_literal: true require 'helper' class TestSourceTreeRewriter < Minitest::Test def setup @buf = Parser::Source::Buffer.new('(rewriter)') @buf.source = 'puts(:hello, :world)' @hello = range(5, 6) @comma_space = range(11,2) @world = range(13,6) end def range(from, len) Parser::Source::Range.new(@buf, from, from + len) end # Returns either: # - String (Normal operation) # - [diagnostic, ...] (Diagnostics) # - Parser::ClobberingError # def apply(actions, **policy) diagnostics = [] diags = -> { diagnostics.flatten.map(&:strip).join("\n") } rewriter = Parser::Source::TreeRewriter.new(@buf, **policy) rewriter.diagnostics.consumer = -> diag { diagnostics << diag.render } actions.each do |action, range, *args| rewriter.public_send(action, range, *args) end if diagnostics.empty? rewriter.process else diags.call end rescue ::Parser::ClobberingError => e [::Parser::ClobberingError, diags.call] end # Expects ordered actions to be grouped together def check_actions(expected, grouped_actions, **policy) grouped_actions.permutation do |sequence| # [action, [action, action]] => [action, action, action] # except we can't use flatten because "action" are arrays themselves actions = sequence.flat_map { |group| group.first.is_a?(Array) ? group : [group] } assert_equal(expected, apply(actions, **policy)) end end def assert_actions_result(expected, *actions, **rest) if expected == :raise diagnostic = rest.values.first check_actions([::Parser::ClobberingError, diagnostic], actions) elsif rest.empty? check_actions(expected, actions) else policy, diagnostic = rest.first check_actions(expected, actions, policy => :accept) check_actions(diagnostic, actions, policy => :warn) diagnostic.gsub!(/warning: /, 'error: ') check_actions([::Parser::ClobberingError, diagnostic], actions, policy => :raise) end end ### Simple cases def test_remove assert_actions_result 'puts(, :world)', [:remove, @hello] end def test_insert_before assert_actions_result 'puts(:hello, 42, :world)', [:insert_before, @world, '42, '] end def test_insert_after assert_actions_result 'puts(:hello, 42, :world)', [:insert_after, @hello, ', 42'] end def test_wrap assert_actions_result 'puts([:hello], :world)', [:wrap, @hello, '[', ']'] end def test_replace assert_actions_result 'puts(:hi, :world)', [:replace, @hello, ':hi'] end # # All other cases, as per doc # def test_crossing_non_deletions check = [ [:wrap, '(', ')'], [:remove], [:replace, 'xx'], ] check.combination(2) do |(action, *args), (action_b, *args_b)| next if action == :remove && action_b == :remove assert_actions_result :raise, [[action, @hello.join(@comma_space), *args], [action_b, @world.join(@comma_space), *args_b]], diagnostic: <<-DIAGNOSTIC.chomp (rewriter):1:12: error: the rewriting action on: (rewriter):1: puts(:hello, :world) (rewriter):1: ^~~~~~~~ (rewriter):1:6: error: is crossing that on: (rewriter):1: puts(:hello, :world) (rewriter):1: ^~~~~~~~ DIAGNOSTIC end end def test_crossing_deletions assert_actions_result 'puts()', [[:remove, @hello.join(@comma_space)], [:remove, @world.join(@comma_space)]], crossing_deletions: <<-DIAGNOSTIC.chomp (rewriter):1:12: warning: the deletion of: (rewriter):1: puts(:hello, :world) (rewriter):1: ^~~~~~~~ (rewriter):1:6: warning: is crossing: (rewriter):1: puts(:hello, :world) (rewriter):1: ^~~~~~~~ DIAGNOSTIC end def test_multiple_actions assert_actions_result 'puts({:hello => [:everybody]})', [:replace, @comma_space, ' => '], [:wrap, @hello.join(@world), '{', '}'], [:replace, @world, ':everybody'], [:wrap, @world, '[', ']'] end def test_wraps_same_range assert_actions_result 'puts([(:hello)], :world)', [[:wrap, @hello, '(', ')'], [:wrap, @hello, '[', ']']] end def test_replace_same_range assert_actions_result 'puts(:hey, :world)', [[:replace, @hello, ':hi'], [:replace, @hello, ':hey']], different_replacements: <<-DIAGNOSTIC.chomp (rewriter):1:6: warning: different replacements: :hey vs :hi (rewriter):1: puts(:hello, :world) (rewriter):1: ^~~~~~ DIAGNOSTIC end def test_swallowed_insertions assert_actions_result 'puts(:hi)', [[:wrap, @hello.adjust(begin_pos: 1), '__', '__'], [:replace, @world.adjust(end_pos: -2), 'xx'], [:replace, @hello.join(@world), ':hi']], swallowed_insertions: <<-DIAGNOSTIC.chomp (rewriter):1:6: warning: this replacement: (rewriter):1: puts(:hello, :world) (rewriter):1: ^~~~~~~~~~~~~~ (rewriter):1:7: warning: swallows some inner rewriting actions: (rewriter):1: puts(:hello, :world) (rewriter):1: ^~~~~ ~~~~ DIAGNOSTIC end def test_out_of_range_ranges rewriter = Parser::Source::TreeRewriter.new(@buf) assert_raises(IndexError) { rewriter.insert_before(range(0, 100), 'hola') } end end parser-2.7.0.2/test/test_runner_parse.rb0000644000004100000410000000144213617025313020254 0ustar www-datawww-data# frozen_string_literal: true require 'helper' require 'open3' class TestRunnerParse < Minitest::Test PATH_TO_RUBY_PARSE = File.expand_path('../bin/ruby-parse', __dir__).freeze def assert_prints(argv, expected_output) stdout, stderr, status = Open3.capture3(PATH_TO_RUBY_PARSE, *argv) assert_equal 0, status.to_i assert_includes(stdout, expected_output) end def test_emit_ruby assert_prints ['--emit-ruby', '-e 123'], 's(:int, 123)' end def test_emit_json assert_prints ['--emit-json', '-e', '123'], '["int",123]' end def test_emit_ruby_empty assert_prints ['--emit-ruby', '-e', ''], "\n" end def test_emit_json_empty assert_prints ['--emit-json', '-e', ''], "\n" end end parser-2.7.0.2/test/using_tree_rewriter/0000755000004100000410000000000013617025313020253 5ustar www-datawww-dataparser-2.7.0.2/test/using_tree_rewriter/fixtures/0000755000004100000410000000000013617025313022124 5ustar www-datawww-dataparser-2.7.0.2/test/using_tree_rewriter/fixtures/output.rb0000644000004100000410000000005113617025313024005 0ustar www-datawww-data# frozen_string_literal: true ([6] * 7) parser-2.7.0.2/test/using_tree_rewriter/fixtures/input.rb0000644000004100000410000000004513617025313023607 0ustar www-datawww-data# frozen_string_literal: true 6 * 7 parser-2.7.0.2/test/using_tree_rewriter/using_tree_rewriter.rb0000644000004100000410000000032213617025313024664 0ustar www-datawww-data# frozen_string_literal: true class UsingTreeRewriter < Parser::TreeRewriter def on_send(node) wrap(node.loc.expression, '(', ')') wrap(node.children[0].loc.expression, '[', ']') super end end parser-2.7.0.2/test/test_source_comment.rb0000644000004100000410000000145313617025313020575 0ustar www-datawww-data# frozen_string_literal: true require 'helper' class TestSourceComment < Minitest::Test def setup @buf = Parser::Source::Buffer.new('(string)') @buf.source = "# foo\n=begin foo\nbar\n=end baz\n" end def range(s, e) Parser::Source::Range.new(@buf, s, e) end def test_initialize comment = Parser::Source::Comment.new(range(0, 5)) assert comment.frozen? end def test_text comment = Parser::Source::Comment.new(range(0, 5)) assert_equal '# foo', comment.text end def test_inline comment = Parser::Source::Comment.new(range(0, 5)) assert_equal :inline, comment.type assert comment.inline? end def test_document comment = Parser::Source::Comment.new(range(6, 25)) assert_equal :document, comment.type assert comment.document? end end parser-2.7.0.2/test/test_runner_rewrite.rb0000644000004100000410000000277713617025313020637 0ustar www-datawww-data# frozen_string_literal: true require 'pathname' require 'fileutils' require 'shellwords' require 'open3' BASE_DIR = Pathname.new(__FILE__) + '..' require (BASE_DIR + 'helper').expand_path class TestRunnerRewrite < Minitest::Test def assert_rewriter_output(path, args, input: 'input.rb', output: 'output.rb', expected_output: '', expected_error: '') @ruby_rewrite = BASE_DIR.expand_path + '../bin/ruby-rewrite' @test_dir = BASE_DIR + path @fixtures_dir = @test_dir + 'fixtures' Dir.mktmpdir("parser", BASE_DIR.expand_path.to_s) do |tmp_dir| tmp_dir = Pathname.new(tmp_dir) sample_file = tmp_dir + "#{path}.rb" sample_file_expanded = sample_file.expand_path expected_file = @fixtures_dir + output FileUtils.cp(@fixtures_dir + input, sample_file_expanded) stdout, stderr, exit_code = Dir.chdir @test_dir do Open3.capture3 %Q{ #{Shellwords.escape(@ruby_rewrite.to_s)} #{args} \ #{Shellwords.escape(sample_file_expanded.to_s)} } end assert_equal expected_output.chomp, stdout.chomp assert_match expected_error.chomp, stderr.chomp assert_equal File.read(expected_file.expand_path), File.read(sample_file) end end def test_rewriter_bug_163 assert_rewriter_output('bug_163', '--modify -l rewriter.rb', expected_error: Parser::Rewriter::DEPRECATION_WARNING ) end def test_tree_rewriter assert_rewriter_output('using_tree_rewriter', '-l using_tree_rewriter.rb --modify') end end parser-2.7.0.2/test/test_source_map.rb0000644000004100000410000000055213617025313017707 0ustar www-datawww-data# frozen_string_literal: true require 'helper' require 'parse_helper' class TestSourceMap < Minitest::Test include ParseHelper def test_to_hash buf = Parser::Source::Buffer.new("") buf.source = "1" ast = parser_for_ruby_version('1.8').parse(buf) assert_equal [:expression, :operator], ast.loc.to_hash.keys.sort_by(&:to_s) end end parser-2.7.0.2/test/test_parser.rb0000644000004100000410000064721213617025313017060 0ustar www-datawww-data# encoding: utf-8 # frozen_string_literal: true require 'helper' require 'parse_helper' Parser::Builders::Default.modernize class TestParser < Minitest::Test include ParseHelper def parser_for_ruby_version(version) parser = super parser.diagnostics.all_errors_are_fatal = true %w(foo bar baz).each do |metasyntactic_var| parser.static_env.declare(metasyntactic_var) end parser end SINCE_1_9 = ALL_VERSIONS - %w(1.8) SINCE_2_0 = SINCE_1_9 - %w(1.9 mac ios) SINCE_2_1 = SINCE_2_0 - %w(2.0) SINCE_2_2 = SINCE_2_1 - %w(2.1) SINCE_2_3 = SINCE_2_2 - %w(2.2) SINCE_2_4 = SINCE_2_3 - %w(2.3) SINCE_2_5 = SINCE_2_4 - %w(2.4) SINCE_2_6 = SINCE_2_5 - %w(2.5) SINCE_2_7 = SINCE_2_6 - %w(2.6) # Guidelines for test naming: # * Test structure follows structure of AST_FORMAT.md. # * Test names follow node names. # * Structurally similar sources may be grouped into one test. # * If, following the guidelines above, names clash, append # an abbreviated disambiguator. E.g. `test_class` and # `test_class_super`. # * When writing a test for a bug, append unabbreviated (but # concise) bug description. E.g. `test_class_bug_missing_newline`. # * Do not append Ruby language version to the name. # * When in doubt, look at existing test names. # # Guidelines for writing assertions: # * Don't check for structurally same source mapping information # more than once or twice in the entire file. It clutters the # source for no reason. # * Don't forget to check for optional delimiters. `()`, `then`, etc. # * When in doubt, look at existing assertions. # # Literals # def test_empty_stmt assert_parses( nil, %q{}) end def test_nil assert_parses( s(:nil), %q{nil}, %q{~~~ expression}) end def test_nil_expression assert_parses( s(:begin), %q{()}, %q{^ begin | ^ end |~~ expression}) assert_parses( s(:kwbegin), %q{begin end}, %q{~~~~~ begin | ~~~ end |~~~~~~~~~ expression}) end def test_true assert_parses( s(:true), %q{true}, %q{~~~~ expression}) end def test_false assert_parses( s(:false), %q{false}, %q{~~~~~ expression}) end def test_int assert_parses( s(:int, 42), %q{42}, %q{~~ expression}) assert_parses( s(:int, 42), %q{+42}, %q{^ operator |~~~ expression}) assert_parses( s(:int, -42), %q{-42}, %q{^ operator |~~~ expression}) end def test_int___LINE__ assert_parses( s(:int, 1), %q{__LINE__}, %q{~~~~~~~~ expression}) end def test_float assert_parses( s(:float, 1.33), %q{1.33}, %q{~~~~ expression}) assert_parses( s(:float, -1.33), %q{-1.33}, %q{^ operator |~~~~~ expression}) end def test_rational assert_parses( s(:rational, Rational(42)), %q{42r}, %q{~~~ expression}, SINCE_2_1) assert_parses( s(:rational, Rational(421, 10)), %q{42.1r}, %q{~~~~~ expression}, SINCE_2_1) end def test_complex assert_parses( s(:complex, Complex(0, 42)), %q{42i}, %q{~~~ expression}, SINCE_2_1) assert_parses( s(:complex, Complex(0, Rational(42))), %q{42ri}, %q{~~~~ expression}, SINCE_2_1) assert_parses( s(:complex, Complex(0, 42.1)), %q{42.1i}, %q{~~~~~ expression}, SINCE_2_1) assert_parses( s(:complex, Complex(0, Rational(421, 10))), %q{42.1ri}, %q{~~~~~~ expression}, SINCE_2_1) end # Strings def test_string_plain assert_parses( s(:str, 'foobar'), %q{'foobar'}, %q{^ begin | ^ end |~~~~~~~~ expression}) assert_parses( s(:str, 'foobar'), %q{%q(foobar)}, %q{^^^ begin | ^ end |~~~~~~~~~~ expression}) end def test_string_interp assert_parses( s(:dstr, s(:str, 'foo'), s(:begin, s(:lvar, :bar)), s(:str, 'baz')), %q{"foo#{bar}baz"}, %q{^ begin | ^ end | ^^ begin (begin) | ^ end (begin) | ~~~~~~ expression (begin) |~~~~~~~~~~~~~~ expression}) end def test_string_dvar assert_parses( s(:dstr, s(:ivar, :@a), s(:str, ' '), s(:cvar, :@@a), s(:str, ' '), s(:gvar, :$a)), %q{"#@a #@@a #$a"}) end def test_string_concat assert_parses( s(:dstr, s(:dstr, s(:str, 'foo'), s(:ivar, :@a)), s(:str, 'bar')), %q{"foo#@a" "bar"}, %q{^ begin (dstr) | ^ end (dstr) | ^ begin (str) | ^ end (str) |~~~~~~~~~~~~~~ expression}) end def test_string___FILE__ assert_parses( s(:str, '(assert_parses)'), %q{__FILE__}, %q{~~~~~~~~ expression}) end def test_character assert_parses( s(:str, 'a'), %q{?a}, %q{^ begin |~~ expression}, SINCE_1_9) assert_parses( s(:int, 97), %q{?a}, %q{~~ expression}, %w(1.8)) end def test_heredoc assert_parses( s(:dstr, s(:str, "foo\n"), s(:str, "bar\n")), %Q{< e message = e.message end assert_diagnoses( [:error, :invalid_regexp, {:message => message}], %q[/?/], %q(~~~ location), SINCE_1_9) assert_diagnoses( [:error, :invalid_regexp, {:message => message}], %q[/#{""}?/], %q(~~~~~~~~ location), SINCE_1_9) end # Arrays def test_array_plain assert_parses( s(:array, s(:int, 1), s(:int, 2)), %q{[1, 2]}, %q{^ begin | ^ end |~~~~~~ expression}) end def test_array_splat assert_parses( s(:array, s(:int, 1), s(:splat, s(:lvar, :foo)), s(:int, 2)), %q{[1, *foo, 2]}, %q{^ begin | ^ end | ^ operator (splat) | ~~~~ expression (splat) |~~~~~~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:array, s(:int, 1), s(:splat, s(:lvar, :foo))), %q{[1, *foo]}, %q{^ begin | ^ end | ^ operator (splat) | ~~~~ expression (splat) |~~~~~~~~~ expression}) assert_parses( s(:array, s(:splat, s(:lvar, :foo))), %q{[*foo]}) end def test_array_assocs assert_parses( s(:array, s(:hash, s(:pair, s(:int, 1), s(:int, 2)))), %q{[ 1 => 2 ]}, %q{ ~~ operator (hash.pair) | ~~~~~~ expression (hash.pair) | ~~~~~~ expression (hash)}) assert_parses( s(:array, s(:int, 1), s(:hash, s(:pair, s(:int, 2), s(:int, 3)))), %q{[ 1, 2 => 3 ]}, %q{}, SINCE_1_9) end def test_array_words assert_parses( s(:array, s(:str, 'foo'), s(:str, 'bar')), %q{%w[foo bar]}, %q{^^^ begin | ^ end | ~~~ expression (str) |~~~~~~~~~~~ expression}) end def test_array_words_interp assert_parses( s(:array, s(:str, 'foo'), s(:dstr, s(:begin, s(:lvar, :bar)))), %q{%W[foo #{bar}]}, %q{^^^ begin | ^^ begin (dstr.begin) | ^ end (dstr.begin) | ~~~~~~ expression (dstr.begin) | ^ end | ~~~ expression (str) | ~~~ expression (dstr.begin.lvar) |~~~~~~~~~~~~~~ expression}) assert_parses( s(:array, s(:str, 'foo'), s(:dstr, s(:begin, s(:lvar, :bar)), s(:str, 'foo'), s(:ivar, :@baz))), %q{%W[foo #{bar}foo#@baz]}) end def test_array_words_empty assert_parses( s(:array), %q{%w[]}, %q{^^^ begin | ^ end |~~~~ expression}) assert_parses( s(:array), %q{%W()}) end def test_array_symbols assert_parses( s(:array, s(:sym, :foo), s(:sym, :bar)), %q{%i[foo bar]}, %q{^^^ begin | ^ end | ~~~ expression (sym) |~~~~~~~~~~~ expression}, SINCE_2_0) end def test_array_symbols_interp assert_parses( s(:array, s(:sym, :foo), s(:dsym, s(:begin, s(:lvar, :bar)))), %q{%I[foo #{bar}]}, %q{^^^ begin | ^ end | ~~~ expression (sym) | ^^ begin (dsym.begin) | ^ end (dsym.begin) | ~~~~~~ expression (dsym.begin) | ~~~ expression (dsym.begin.lvar) |~~~~~~~~~~~~~~ expression}, SINCE_2_0) assert_parses( s(:array, s(:dsym, s(:str, 'foo'), s(:begin, s(:lvar, :bar)))), %q{%I[foo#{bar}]}, %q{}, SINCE_2_0) end def test_array_symbols_empty assert_parses( s(:array), %q{%i[]}, %q{^^^ begin | ^ end |~~~~ expression}, SINCE_2_0) assert_parses( s(:array), %q{%I()}, %q{}, SINCE_2_0) end # Hashes def test_hash_empty assert_parses( s(:hash), %q[{ }], %q{^ begin | ^ end |~~~ expression}) end def test_hash_hashrocket assert_parses( s(:hash, s(:pair, s(:int, 1), s(:int, 2))), %q[{ 1 => 2 }], %q{^ begin | ^ end | ^^ operator (pair) | ~~~~~~ expression (pair) |~~~~~~~~~~ expression}) assert_parses( s(:hash, s(:pair, s(:int, 1), s(:int, 2)), s(:pair, s(:sym, :foo), s(:str, 'bar'))), %q[{ 1 => 2, :foo => "bar" }]) end def test_hash_label assert_parses( s(:hash, s(:pair, s(:sym, :foo), s(:int, 2))), %q[{ foo: 2 }], %q{^ begin | ^ end | ^ operator (pair) | ~~~ expression (pair.sym) | ~~~~~~ expression (pair) |~~~~~~~~~~ expression}, SINCE_1_9) end def test_hash_label_end assert_parses( s(:hash, s(:pair, s(:sym, :foo), s(:int, 2))), %q[{ 'foo': 2 }], %q{^ begin | ^ end | ^ operator (pair) | ^ begin (pair.sym) | ^ end (pair.sym) | ~~~~~ expression (pair.sym) | ~~~~~~~~ expression (pair) |~~~~~~~~~~~~ expression}, SINCE_2_2) assert_parses( s(:hash, s(:pair, s(:sym, :foo), s(:int, 2)), s(:pair, s(:sym, :bar), s(:hash))), %q[{ 'foo': 2, 'bar': {}}], %q{}, SINCE_2_2) assert_parses( s(:send, nil, :f, s(:if, s(:send, nil, :a), s(:str, "a"), s(:int, 1))), %q{f(a ? "a":1)}, %q{}, SINCE_2_2) end def test_hash_kwsplat assert_parses( s(:hash, s(:pair, s(:sym, :foo), s(:int, 2)), s(:kwsplat, s(:lvar, :bar))), %q[{ foo: 2, **bar }], %q{ ^^ operator (kwsplat) | ~~~~~ expression (kwsplat)}, SINCE_2_0) end def test_hash_no_hashrocket assert_parses( s(:hash, s(:pair, s(:int, 1), s(:int, 2))), %q[{ 1, 2 }], %q{^ begin | ^ end | ~~~~ expression (pair) |~~~~~~~~ expression}, %w(1.8)) end def test_hash_no_hashrocket_odd assert_diagnoses( [:error, :odd_hash], %q[{ 1, 2, 3 }], %q( ~ location), %w(1.8)) end # Range def test_range_inclusive assert_parses( s(:irange, s(:int, 1), s(:int, 2)), %q{1..2}, %q{ ~~ operator |~~~~ expression}) end def test_range_exclusive assert_parses( s(:erange, s(:int, 1), s(:int, 2)), %q{1...2}, %q{ ~~~ operator |~~~~~ expression}) end def test_range_endless assert_parses( s(:irange, s(:int, 1), nil), %q{1..}, %q{~~~ expression | ~~ operator}, SINCE_2_6) assert_parses( s(:erange, s(:int, 1), nil), %q{1...}, %q{~~~~ expression | ~~~ operator}, SINCE_2_6) end def test_beginless_range_before_27 assert_diagnoses( [:error, :unexpected_token, { :token => 'tDOT2' }], %q{..42}, %q{^^ location}, ALL_VERSIONS - SINCE_2_7 ) assert_diagnoses( [:error, :unexpected_token, { :token => 'tDOT3' }], %q{...42}, %q{^^^ location}, ALL_VERSIONS - SINCE_2_7 ) end def test_beginless_range assert_parses( s(:irange, nil, s(:int, 100)), %q{..100}, %q{~~~~~ expression |~~ operator}, SINCE_2_7 ) assert_parses( s(:erange, nil, s(:int, 100)), %q{...100}, %q{~~~~~~ expression |~~~ operator}, SINCE_2_7 ) end # # Access # # Variables and pseudovariables def test_self assert_parses( s(:self), %q{self}, %q{~~~~ expression}) end def test_lvar assert_parses( s(:lvar, :foo), %q{foo}, %q{~~~ expression}) end def test_ivar assert_parses( s(:ivar, :@foo), %q{@foo}, %q{~~~~ expression}) end def test_cvar assert_parses( s(:cvar, :@@foo), %q{@@foo}, %q{~~~~~ expression}) end def test_gvar assert_parses( s(:gvar, :$foo), %q{$foo}, %q{~~~~ expression}) end def test_gvar_dash_empty assert_diagnoses( [:fatal, :unexpected, { :character => '$' }], %q{$- }, %q{^ location}, %w(2.1)) end def test_back_ref assert_parses( s(:back_ref, :$+), %q{$+}, %q{~~ expression}) end def test_nth_ref assert_parses( s(:nth_ref, 10), %q{$10}, %q{~~~ expression}) end # Constants def test_const_toplevel assert_parses( s(:const, s(:cbase), :Foo), %q{::Foo}, %q{ ~~~ name |~~ double_colon |~~~~~ expression}) end def test_const_scoped assert_parses( s(:const, s(:const, nil, :Bar), :Foo), %q{Bar::Foo}, %q{ ~~~ name | ~~ double_colon |~~~~~~~~ expression}) end def test_const_unscoped assert_parses( s(:const, nil, :Foo), %q{Foo}, %q{~~~ name |~~~ expression}) end def test___ENCODING__ assert_parses( s(:__ENCODING__), %q{__ENCODING__}, %q{~~~~~~~~~~~~ expression}, SINCE_1_9) end def test___ENCODING___legacy_ Parser::Builders::Default.emit_encoding = false assert_parses( s(:const, s(:const, nil, :Encoding), :UTF_8), %q{__ENCODING__}, %q{~~~~~~~~~~~~ expression}, SINCE_1_9) ensure Parser::Builders::Default.emit_encoding = true end # defined? def test_defined assert_parses( s(:defined?, s(:lvar, :foo)), %q{defined? foo}, %q{~~~~~~~~ keyword |~~~~~~~~~~~~ expression}) assert_parses( s(:defined?, s(:lvar, :foo)), %q{defined?(foo)}, %q{~~~~~~~~ keyword | ^ begin | ^ end |~~~~~~~~~~~~~ expression}) assert_parses( s(:defined?, s(:ivar, :@foo)), %q{defined? @foo}) end # # Assignment # # Variables def test_lvasgn assert_parses( s(:begin, s(:lvasgn, :var, s(:int, 10)), s(:lvar, :var)), %q{var = 10; var}, %q{~~~ name (lvasgn) | ^ operator (lvasgn) |~~~~~~~~ expression (lvasgn) }) end def test_ivasgn assert_parses( s(:ivasgn, :@var, s(:int, 10)), %q{@var = 10}, %q{~~~~ name | ^ operator |~~~~~~~~~ expression }) end def test_cvasgn assert_parses( s(:cvasgn, :@@var, s(:int, 10)), %q{@@var = 10}, %q{~~~~~ name | ^ operator |~~~~~~~~~~ expression }) end def test_gvasgn assert_parses( s(:gvasgn, :$var, s(:int, 10)), %q{$var = 10}, %q{~~~~ name | ^ operator |~~~~~~~~~ expression }) end def test_asgn_cmd assert_parses( s(:lvasgn, :foo, s(:send, nil, :m, s(:lvar, :foo))), %q{foo = m foo}) assert_parses( s(:lvasgn, :foo, s(:lvasgn, :bar, s(:send, nil, :m, s(:lvar, :foo)))), %q{foo = bar = m foo}, %q{}, ALL_VERSIONS - %w(1.8 mac ios)) end def test_asgn_keyword_invalid assert_diagnoses( [:error, :invalid_assignment], %q{nil = foo}, %q{~~~ location}) assert_diagnoses( [:error, :invalid_assignment], %q{self = foo}, %q{~~~~ location}) assert_diagnoses( [:error, :invalid_assignment], %q{true = foo}, %q{~~~~ location}) assert_diagnoses( [:error, :invalid_assignment], %q{false = foo}, %q{~~~~~ location}) assert_diagnoses( [:error, :invalid_assignment], %q{__FILE__ = foo}, %q{~~~~~~~~ location}) assert_diagnoses( [:error, :invalid_assignment], %q{__LINE__ = foo}, %q{~~~~~~~~ location}) end def test_asgn_backref_invalid assert_diagnoses( [:error, :backref_assignment], %q{$1 = foo}, %q{~~ location}) end # Constants def test_casgn_toplevel assert_parses( s(:casgn, s(:cbase), :Foo, s(:int, 10)), %q{::Foo = 10}, %q{ ~~~ name | ^ operator |~~ double_colon |~~~~~~~~~~ expression }) end def test_casgn_scoped assert_parses( s(:casgn, s(:const, nil, :Bar), :Foo, s(:int, 10)), %q{Bar::Foo = 10}, %q{ ~~~ name | ^ operator | ~~ double_colon |~~~~~~~~~~~~~ expression }) end def test_casgn_unscoped assert_parses( s(:casgn, nil, :Foo, s(:int, 10)), %q{Foo = 10}, %q{~~~ name | ^ operator |~~~~~~~~ expression }) end def test_casgn_invalid assert_diagnoses( [:error, :dynamic_const], %q{def f; Foo = 1; end}, %q{ ~~~ location}) assert_diagnoses( [:error, :dynamic_const], %q{def f; Foo::Bar = 1; end}, %q{ ~~~~~~~~ location}) assert_diagnoses( [:error, :dynamic_const], %q{def f; ::Bar = 1; end}, %q{ ~~~~~ location}) assert_diagnoses( [:error, :dynamic_const], %q{def self.f; Foo = 1; end}, %q{ ~~~ location}) assert_diagnoses( [:error, :dynamic_const], %q{def self.f; Foo::Bar = 1; end}, %q{ ~~~~~~~~ location}) assert_diagnoses( [:error, :dynamic_const], %q{def self.f; ::Bar = 1; end}, %q{ ~~~~~ location}) end # Multiple assignment def test_masgn assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :foo), s(:lvasgn, :bar)), s(:array, s(:int, 1), s(:int, 2))), %q{foo, bar = 1, 2}, %q{ ^ operator |~~~~~~~~ expression (mlhs) | ~~~~ expression (array) |~~~~~~~~~~~~~~~ expression }) assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :foo), s(:lvasgn, :bar)), s(:array, s(:int, 1), s(:int, 2))), %q{(foo, bar) = 1, 2}, %q{^ begin (mlhs) | ^ end (mlhs) |~~~~~~~~~~ expression (mlhs) |~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :foo), s(:lvasgn, :bar), s(:lvasgn, :baz)), s(:array, s(:int, 1), s(:int, 2))), %q{foo, bar, baz = 1, 2}) end def test_masgn_splat assert_parses( s(:masgn, s(:mlhs, s(:ivasgn, :@foo), s(:cvasgn, :@@bar)), s(:array, s(:splat, s(:lvar, :foo)))), %q{@foo, @@bar = *foo}, %q{ ^ operator (array.splat) | ~~~~ expression (array.splat) }) assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), s(:array, s(:splat, s(:lvar, :foo)), s(:lvar, :bar))), %q{a, b = *foo, bar}, %q{}, SINCE_1_9) assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:splat, s(:lvasgn, :b))), s(:lvar, :bar)), %q{a, *b = bar}) assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:splat, s(:lvasgn, :b)), s(:lvasgn, :c)), s(:lvar, :bar)), %q{a, *b, c = bar}, %q{}, SINCE_1_9) assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:splat)), s(:lvar, :bar)), %q{a, * = bar}) assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:splat), s(:lvasgn, :c)), s(:lvar, :bar)), %q{a, *, c = bar}, %q{}, SINCE_1_9) assert_parses( s(:masgn, s(:mlhs, s(:splat, s(:lvasgn, :b))), s(:lvar, :bar)), %q{*b = bar}) assert_parses( s(:masgn, s(:mlhs, s(:splat, s(:lvasgn, :b)), s(:lvasgn, :c)), s(:lvar, :bar)), %q{*b, c = bar}, %q{}, SINCE_1_9) assert_parses( s(:masgn, s(:mlhs, s(:splat)), s(:lvar, :bar)), %q{* = bar}) assert_parses( s(:masgn, s(:mlhs, s(:splat), s(:lvasgn, :c), s(:lvasgn, :d)), s(:lvar, :bar)), %q{*, c, d = bar}, %q{}, SINCE_1_9) end def test_masgn_nested assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:mlhs, s(:lvasgn, :b), s(:lvasgn, :c))), s(:lvar, :foo)), %q{a, (b, c) = foo}, %q{ ^ begin (mlhs.mlhs) | ^ end (mlhs.mlhs) | ~~~~~~ expression (mlhs.mlhs) }) assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :b)), s(:lvar, :foo)), %q{((b, )) = foo}, %q{^ begin (mlhs) | ^ end (mlhs)}) end def test_masgn_attr assert_parses( s(:masgn, s(:mlhs, s(:send, s(:self), :a=), s(:indexasgn, s(:self), s(:int, 1), s(:int, 2))), s(:lvar, :foo)), %q{self.a, self[1, 2] = foo}, %q{~~~~~~ expression (mlhs.send) | ~ selector (mlhs.send) | ^ begin (mlhs.indexasgn) | ^ end (mlhs.indexasgn) | ~~~~~~~~~~ expression (mlhs.indexasgn)}) assert_parses( s(:masgn, s(:mlhs, s(:send, s(:self), :a=), s(:lvasgn, :foo)), s(:lvar, :foo)), %q{self::a, foo = foo}) assert_parses( s(:masgn, s(:mlhs, s(:send, s(:self), :A=), s(:lvasgn, :foo)), s(:lvar, :foo)), %q{self.A, foo = foo}) end def test_masgn_const assert_parses( s(:masgn, s(:mlhs, s(:casgn, s(:self), :A), s(:lvasgn, :foo)), s(:lvar, :foo)), %q{self::A, foo = foo}) assert_parses( s(:masgn, s(:mlhs, s(:casgn, s(:cbase), :A), s(:lvasgn, :foo)), s(:lvar, :foo)), %q{::A, foo = foo}) end def test_masgn_cmd assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :foo), s(:lvasgn, :bar)), s(:send, nil, :m, s(:lvar, :foo))), %q{foo, bar = m foo}) end def test_asgn_mrhs assert_parses( s(:lvasgn, :foo, s(:array, s(:lvar, :bar), s(:int, 1))), %q{foo = bar, 1}, %q{ ~~~~~~ expression (array) |~~~~~~~~~~~~ expression}) assert_parses( s(:lvasgn, :foo, s(:array, s(:splat, s(:lvar, :bar)))), %q{foo = *bar}) assert_parses( s(:lvasgn, :foo, s(:array, s(:lvar, :baz), s(:splat, s(:lvar, :bar)))), %q{foo = baz, *bar}) end def test_masgn_keyword_invalid assert_diagnoses( [:error, :invalid_assignment], %q{nil, foo = bar}, %q{~~~ location}) end def test_masgn_backref_invalid assert_diagnoses( [:error, :backref_assignment], %q{$1, = foo}, %q{~~ location}) end def test_masgn_const_invalid assert_diagnoses( [:error, :dynamic_const], %q{def f; self::A, foo = foo; end}, %q{ ~~~~~~~ location}) assert_diagnoses( [:error, :dynamic_const], %q{def f; ::A, foo = foo; end}, %q{ ~~~ location}) end # Variable binary operator-assignment def test_var_op_asgn assert_parses( s(:op_asgn, s(:lvasgn, :a), :+, s(:int, 1)), %q{a += 1}, %q{ ^^ operator |~~~~~~ expression}) assert_parses( s(:op_asgn, s(:ivasgn, :@a), :|, s(:int, 1)), %q{@a |= 1}, %q{ ^^ operator |~~~~~~~ expression}) assert_parses( s(:op_asgn, s(:cvasgn, :@@var), :|, s(:int, 10)), %q{@@var |= 10}) assert_parses( s(:def, :a, s(:args), s(:op_asgn, s(:cvasgn, :@@var), :|, s(:int, 10))), %q{def a; @@var |= 10; end}) end def test_var_op_asgn_cmd assert_parses( s(:op_asgn, s(:lvasgn, :foo), :+, s(:send, nil, :m, s(:lvar, :foo))), %q{foo += m foo}) end def test_var_op_asgn_keyword_invalid assert_diagnoses( [:error, :invalid_assignment], %q{nil += foo}, %q{~~~ location}) end def test_const_op_asgn assert_parses( s(:op_asgn, s(:casgn, nil, :A), :+, s(:int, 1)), %q{A += 1}) assert_parses( s(:op_asgn, s(:casgn, s(:cbase), :A), :+, s(:int, 1)), %q{::A += 1}, %q{}, SINCE_2_0) assert_parses( s(:op_asgn, s(:casgn, s(:const, nil, :B), :A), :+, s(:int, 1)), %q{B::A += 1}, %q{}, SINCE_2_0) assert_parses( s(:def, :x, s(:args), s(:or_asgn, s(:casgn, s(:self), :A), s(:int, 1))), %q{def x; self::A ||= 1; end}, %q{}, SINCE_2_0) assert_parses( s(:def, :x, s(:args), s(:or_asgn, s(:casgn, s(:cbase), :A), s(:int, 1))), %q{def x; ::A ||= 1; end}, %q{}, SINCE_2_0) end def test_const_op_asgn_invalid assert_diagnoses( [:error, :dynamic_const], %q{Foo::Bar += 1}, %q{ ~~~ location}, %w(1.8 1.9 mac ios)) assert_diagnoses( [:error, :dynamic_const], %q{::Bar += 1}, %q{ ~~~ location}, %w(1.8 1.9 mac ios)) assert_diagnoses( [:error, :dynamic_const], %q{def foo; Foo::Bar += 1; end}, %q{ ~~~ location}, %w(1.8 1.9 mac ios)) assert_diagnoses( [:error, :dynamic_const], %q{def foo; ::Bar += 1; end}, %q{ ~~~ location}, %w(1.8 1.9 mac ios)) end # Method binary operator-assignment def test_op_asgn assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :a), :+, s(:int, 1)), %q{foo.a += 1}, %q{ ^^ operator | ~ selector (send) |~~~~~ expression (send) |~~~~~~~~~~ expression}) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :a), :+, s(:int, 1)), %q{foo::a += 1}) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :A), :+, s(:int, 1)), %q{foo.A += 1}) end def test_op_asgn_cmd assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :a), :+, s(:send, nil, :m, s(:lvar, :foo))), %q{foo.a += m foo}) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :a), :+, s(:send, nil, :m, s(:lvar, :foo))), %q{foo::a += m foo}) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :A), :+, s(:send, nil, :m, s(:lvar, :foo))), %q{foo.A += m foo}) assert_diagnoses( [:error, :const_reassignment], %q{foo::A += m foo}, %q{ ~~ location}, %w(1.9 mac)) assert_parses( s(:op_asgn, s(:casgn, s(:lvar, :foo), :A), :+, s(:send, nil, :m, s(:lvar, :foo))), %q{foo::A += m foo}, %q{}, SINCE_2_0) end def test_op_asgn_index assert_parses( s(:op_asgn, s(:indexasgn, s(:lvar, :foo), s(:int, 0), s(:int, 1)), :+, s(:int, 2)), %q{foo[0, 1] += 2}, %q{ ^^ operator | ^ begin (indexasgn) | ^ end (indexasgn) |~~~~~~~~~ expression (indexasgn) |~~~~~~~~~~~~~~ expression}) end def test_op_asgn_index_cmd assert_parses( s(:op_asgn, s(:indexasgn, s(:lvar, :foo), s(:int, 0), s(:int, 1)), :+, s(:send, nil, :m, s(:lvar, :foo))), %q{foo[0, 1] += m foo}) end def test_op_asgn_invalid assert_diagnoses( [:error, :backref_assignment], %q{$1 |= 1}, %q{~~ location}) assert_diagnoses( [:error, :backref_assignment], %q{$+ |= 1}, %q{~~ location}) assert_diagnoses( [:error, :backref_assignment], %q{$+ |= m foo}, %q{~~ location}) end # Variable logical operator-assignment def test_var_or_asgn assert_parses( s(:or_asgn, s(:lvasgn, :a), s(:int, 1)), %q{a ||= 1}, %q{ ^^^ operator |~~~~~~~ expression}) end def test_var_and_asgn assert_parses( s(:and_asgn, s(:lvasgn, :a), s(:int, 1)), %q{a &&= 1}, %q{ ^^^ operator |~~~~~~~ expression}) end # Method logical operator-assignment def test_or_asgn assert_parses( s(:or_asgn, s(:send, s(:lvar, :foo), :a), s(:int, 1)), %q{foo.a ||= 1}, %q{ ^^^ operator | ~ selector (send) |~~~~~ expression (send) |~~~~~~~~~~~ expression}) assert_parses( s(:or_asgn, s(:indexasgn, s(:lvar, :foo), s(:int, 0), s(:int, 1)), s(:int, 2)), %q{foo[0, 1] ||= 2}, %q{ ^^^ operator | ^ begin (indexasgn) | ^ end (indexasgn) |~~~~~~~~~ expression (indexasgn) |~~~~~~~~~~~~~~~ expression}) end def test_and_asgn assert_parses( s(:and_asgn, s(:send, s(:lvar, :foo), :a), s(:int, 1)), %q{foo.a &&= 1}, %q{ ^^^ operator | ~ selector (send) |~~~~~ expression (send) |~~~~~~~~~~~ expression}) assert_parses( s(:and_asgn, s(:indexasgn, s(:lvar, :foo), s(:int, 0), s(:int, 1)), s(:int, 2)), %q{foo[0, 1] &&= 2}, %q{ ^^^ operator | ^ begin (indexasgn) | ^ end (indexasgn) |~~~~~~~~~ expression (indexasgn) |~~~~~~~~~~~~~~~ expression}) end def test_log_asgn_invalid assert_diagnoses( [:error, :backref_assignment], %q{$1 &&= 1}, %q{~~ location}) assert_diagnoses( [:error, :backref_assignment], %q{$+ ||= 1}, %q{~~ location}) end # # Class and module definitions # def test_module assert_parses( s(:module, s(:const, nil, :Foo), nil), %q{module Foo; end}, %q{~~~~~~ keyword | ~~~ name | ~~~ end}) end def test_module_invalid assert_diagnoses( [:error, :module_in_def], %q{def a; module Foo; end; end}, %q{ ^^^^^^ location}) end def test_cpath assert_parses( s(:module, s(:const, s(:cbase), :Foo), nil), %q{module ::Foo; end}) assert_parses( s(:module, s(:const, s(:const, nil, :Bar), :Foo), nil), %q{module Bar::Foo; end}) end def test_cpath_invalid assert_diagnoses( [:error, :module_name_const], %q{module foo; end}) end def test_class assert_parses( s(:class, s(:const, nil, :Foo), nil, nil), %q{class Foo; end}, %q{~~~~~ keyword | ~~~ name | ~~~ end}) assert_parses( s(:class, s(:const, nil, :Foo), nil, nil), %q{class Foo end}, %q{}, SINCE_2_3) end def test_class_super assert_parses( s(:class, s(:const, nil, :Foo), s(:const, nil, :Bar), nil), %q{class Foo < Bar; end}, %q{~~~~~ keyword | ^ operator | ~~~ end}) end def test_class_super_label assert_parses( s(:class, s(:const, nil, :Foo), s(:send, nil, :a, s(:sym, :b)), nil), %q{class Foo < a:b; end}, %q{}, SINCE_2_0) end def test_class_invalid assert_diagnoses( [:error, :class_in_def], %q{def a; class Foo; end; end}, %q{ ^^^^^ location}) assert_diagnoses( [:error, :class_in_def], %q{def self.a; class Foo; end; end}, %q{ ^^^^^ location}) end def test_sclass assert_parses( s(:sclass, s(:lvar, :foo), s(:nil)), %q{class << foo; nil; end}, %q{~~~~~ keyword | ^^ operator | ~~~ end}) end # # Method (un)definition # def test_def assert_parses( s(:def, :foo, s(:args), nil), %q{def foo; end}, %q{~~~ keyword | ~~~ name | ~~~ end}) assert_parses( s(:def, :String, s(:args), nil), %q{def String; end}) assert_parses( s(:def, :String=, s(:args), nil), %q{def String=; end}) assert_parses( s(:def, :until, s(:args), nil), %q{def until; end}) assert_parses( s(:def, :BEGIN, s(:args), nil), %q{def BEGIN; end}) assert_parses( s(:def, :END, s(:args), nil), %q{def END; end}) end def test_defs assert_parses( s(:defs, s(:self), :foo, s(:args), nil), %q{def self.foo; end}, %q{~~~ keyword | ^ operator | ~~~ name | ~~~ end}) assert_parses( s(:defs, s(:self), :foo, s(:args), nil), %q{def self::foo; end}, %q{~~~ keyword | ^^ operator | ~~~ name | ~~~ end}) assert_parses( s(:defs, s(:lvar, :foo), :foo, s(:args), nil), %q{def (foo).foo; end}) assert_parses( s(:defs, s(:const, nil, :String), :foo, s(:args), nil), %q{def String.foo; end}) assert_parses( s(:defs, s(:const, nil, :String), :foo, s(:args), nil), %q{def String::foo; end}) end def test_defs_invalid assert_diagnoses( [:error, :singleton_literal], %q{def (1).foo; end}, %q{ ~ location}) assert_diagnoses( [:error, :singleton_literal], %q{def ("foo").foo; end}, %q{ ~~~~~ location}) assert_diagnoses( [:error, :singleton_literal], %q{def ("foo#{bar}").foo; end}, %q{ ~~~~~~~~~~~ location}) assert_diagnoses( [:error, :singleton_literal], %q{def (:foo).foo; end}, %q{ ~~~~ location}) assert_diagnoses( [:error, :singleton_literal], %q{def (:"foo#{bar}").foo; end}, %q{ ~~~~~~~~~~~~ location}) assert_diagnoses( [:error, :singleton_literal], %q{def ([]).foo; end}, %q{ ~~ location}) assert_diagnoses( [:error, :singleton_literal], %q{def ({}).foo; end}, %q{ ~~ location}) assert_diagnoses( [:error, :singleton_literal], %q{def (/foo/).foo; end}, %q{ ~~~~~ location}) end def test_undef assert_parses( s(:undef, s(:sym, :foo), s(:sym, :bar), s(:dsym, s(:str, 'foo'), s(:begin, s(:int, 1)))), %q{undef foo, :bar, :"foo#{1}"}, %q{~~~~~ keyword | ~~~ expression (sym/1) | ~~~~ expression (sym/2) |~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end # # Aliasing # def test_alias assert_parses( s(:alias, s(:sym, :foo), s(:sym, :bar)), %q{alias :foo bar}, %q{~~~~~ keyword | ~~~~ expression (sym/1) | ~~~ expression (sym/2) |~~~~~~~~~~~~~~ expression}) end def test_alias_gvar assert_parses( s(:alias, s(:gvar, :$a), s(:gvar, :$b)), %q{alias $a $b}, %q{ ~~ expression (gvar/1)}) assert_parses( s(:alias, s(:gvar, :$a), s(:back_ref, :$+)), %q{alias $a $+}, %q{ ~~ expression (back_ref)}) end def test_alias_nth_ref assert_diagnoses( [:error, :nth_ref_alias], %q{alias $a $1}, %q{ ~~ location}) end # # Formal arguments # def test_arg assert_parses( s(:def, :f, s(:args, s(:arg, :foo)), nil), %q{def f(foo); end}, %q{ ~~~ name (args.arg) | ~~~ expression (args.arg) | ^ begin (args) | ^ end (args) | ~~~~~ expression (args)}) assert_parses( s(:def, :f, s(:args, s(:arg, :foo), s(:arg, :bar)), nil), %q{def f(foo, bar); end}) end def test_optarg assert_parses( s(:def, :f, s(:args, s(:optarg, :foo, s(:int, 1))), nil), %q{def f foo = 1; end}, %q{ ~~~ name (args.optarg) | ^ operator (args.optarg) | ~~~~~~~ expression (args.optarg) | ~~~~~~~ expression (args)}) assert_parses( s(:def, :f, s(:args, s(:optarg, :foo, s(:int, 1)), s(:optarg, :bar, s(:int, 2))), nil), %q{def f(foo=1, bar=2); end}) end def test_restarg_named assert_parses( s(:def, :f, s(:args, s(:restarg, :foo)), nil), %q{def f(*foo); end}, %q{ ~~~ name (args.restarg) | ~~~~ expression (args.restarg)}) end def test_restarg_unnamed assert_parses( s(:def, :f, s(:args, s(:restarg)), nil), %q{def f(*); end}, %q{ ~ expression (args.restarg)}) end def test_kwarg assert_parses( s(:def, :f, s(:args, s(:kwarg, :foo)), nil), %q{def f(foo:); end}, %q{ ~~~ name (args.kwarg) | ~~~~ expression (args.kwarg)}, SINCE_2_1) end def test_kwoptarg assert_parses( s(:def, :f, s(:args, s(:kwoptarg, :foo, s(:int, 1))), nil), %q{def f(foo: 1); end}, %q{ ~~~ name (args.kwoptarg) | ~~~~~~ expression (args.kwoptarg)}, SINCE_2_0) end def test_kwrestarg_named assert_parses( s(:def, :f, s(:args, s(:kwrestarg, :foo)), nil), %q{def f(**foo); end}, %q{ ~~~ name (args.kwrestarg) | ~~~~~ expression (args.kwrestarg)}, SINCE_2_0) end def test_kwrestarg_unnamed assert_parses( s(:def, :f, s(:args, s(:kwrestarg)), nil), %q{def f(**); end}, %q{ ~~ expression (args.kwrestarg)}, SINCE_2_0) end def test_kwnilarg assert_parses( s(:def, :f, s(:args, s(:kwnilarg)), nil), %q{def f(**nil); end}, %q{ ~~~~~ expression (args.kwnilarg) | ~~~ name (args.kwnilarg)}, SINCE_2_7) assert_parses( s(:block, s(:send, nil, :m), s(:args, s(:kwnilarg)), nil), %q{m { |**nil| }}, %q{ ~~~~~ expression (args.kwnilarg) | ~~~ name (args.kwnilarg)}, SINCE_2_7) assert_parses( s(:block, s(:lambda), s(:args, s(:kwnilarg)), nil), %q{->(**nil) {}}, %q{ ~~~~~ expression (args.kwnilarg) | ~~~ name (args.kwnilarg)}, SINCE_2_7) end def test_blockarg assert_parses( s(:def, :f, s(:args, s(:blockarg, :block)), nil), %q{def f(&block); end}, %q{ ~~~~~ name (args.blockarg) | ~~~~~~ expression (args.blockarg)}) end def test_objc_arg assert_parses( s(:def, :f, s(:args, s(:arg, :a), s(:objc_kwarg, :b, :c)), nil), %q{def f(a, b: c); end}, %q{ ~ keyword (args.objc_kwarg) | ~ operator (args.objc_kwarg) | ~ argument (args.objc_kwarg) | ~~~~ expression (args.objc_kwarg)}, %w(mac)) assert_parses( s(:def, :f, s(:args, s(:arg, :a), s(:objc_kwarg, :b, :c)), nil), %q{def f(a, b => c); end}, %q{ ~ keyword (args.objc_kwarg) | ~~ operator (args.objc_kwarg) | ~ argument (args.objc_kwarg) | ~~~~~~ expression (args.objc_kwarg)}, %w(mac)) end def test_arg_scope # [ruby-core:61299] [Bug #9593] assert_parses( s(:def, :f, s(:args, s(:optarg, :var, s(:defined?, s(:lvar, :var)))), s(:lvar, :var)), %q{def f(var = defined?(var)) var end}, %q{}, SINCE_2_7 - SINCE_2_1) assert_parses( s(:def, :f, s(:args, s(:kwoptarg, :var, s(:defined?, s(:lvar, :var)))), s(:lvar, :var)), %q{def f(var: defined?(var)) var end}, %q{}, SINCE_2_7 - SINCE_2_1) assert_parses( s(:block, s(:send, nil, :lambda), s(:args, s(:shadowarg, :a)), s(:lvar, :a)), %q{lambda{|;a|a}}, %q{}, SINCE_1_9) end def assert_parses_args(ast, code, versions=ALL_VERSIONS) assert_parses( s(:def, :f, ast, nil), %Q{def f #{code}; end}, %q{}, versions) end def test_arg_combinations # f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg assert_parses_args( s(:args, s(:arg, :a), s(:optarg, :o, s(:int, 1)), s(:restarg, :r), s(:blockarg, :b)), %q{a, o=1, *r, &b}) # f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg assert_parses_args( s(:args, s(:arg, :a), s(:optarg, :o, s(:int, 1)), s(:restarg, :r), s(:arg, :p), s(:blockarg, :b)), %q{a, o=1, *r, p, &b}, SINCE_1_9) # f_arg tCOMMA f_optarg opt_f_block_arg assert_parses_args( s(:args, s(:arg, :a), s(:optarg, :o, s(:int, 1)), s(:blockarg, :b)), %q{a, o=1, &b}) # f_arg tCOMMA f_optarg tCOMMA f_arg opt_f_block_arg assert_parses_args( s(:args, s(:arg, :a), s(:optarg, :o, s(:int, 1)), s(:arg, :p), s(:blockarg, :b)), %q{a, o=1, p, &b}, SINCE_1_9) # f_arg tCOMMA f_rest_arg opt_f_block_arg assert_parses_args( s(:args, s(:arg, :a), s(:restarg, :r), s(:blockarg, :b)), %q{a, *r, &b}) # f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg assert_parses_args( s(:args, s(:arg, :a), s(:restarg, :r), s(:arg, :p), s(:blockarg, :b)), %q{a, *r, p, &b}, SINCE_1_9) # f_arg opt_f_block_arg assert_parses_args( s(:args, s(:arg, :a), s(:blockarg, :b)), %q{a, &b}) # f_optarg tCOMMA f_rest_arg opt_f_block_arg assert_parses_args( s(:args, s(:optarg, :o, s(:int, 1)), s(:restarg, :r), s(:blockarg, :b)), %q{o=1, *r, &b}) # f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg assert_parses_args( s(:args, s(:optarg, :o, s(:int, 1)), s(:restarg, :r), s(:arg, :p), s(:blockarg, :b)), %q{o=1, *r, p, &b}, SINCE_1_9) # f_optarg opt_f_block_arg assert_parses_args( s(:args, s(:optarg, :o, s(:int, 1)), s(:blockarg, :b)), %q{o=1, &b}) # f_optarg tCOMMA f_arg opt_f_block_arg assert_parses_args( s(:args, s(:optarg, :o, s(:int, 1)), s(:arg, :p), s(:blockarg, :b)), %q{o=1, p, &b}, SINCE_1_9) # f_rest_arg opt_f_block_arg assert_parses_args( s(:args, s(:restarg, :r), s(:blockarg, :b)), %q{*r, &b}) # f_rest_arg tCOMMA f_arg opt_f_block_arg assert_parses_args( s(:args, s(:restarg, :r), s(:arg, :p), s(:blockarg, :b)), %q{*r, p, &b}, SINCE_1_9) # f_block_arg assert_parses_args( s(:args, s(:blockarg, :b)), %q{&b}) # (nothing) assert_parses_args( s(:args), %q{}) end def test_kwarg_combinations # f_kwarg tCOMMA f_kwrest opt_f_block_arg assert_parses_args( s(:args, s(:kwoptarg, :foo, s(:int, 1)), s(:kwoptarg, :bar, s(:int, 2)), s(:kwrestarg, :baz), s(:blockarg, :b)), %q{(foo: 1, bar: 2, **baz, &b)}, SINCE_2_0) # f_kwarg opt_f_block_arg assert_parses_args( s(:args, s(:kwoptarg, :foo, s(:int, 1)), s(:blockarg, :b)), %q{(foo: 1, &b)}, SINCE_2_0) # f_kwrest opt_f_block_arg assert_parses_args( s(:args, s(:kwrestarg, :baz), s(:blockarg, :b)), %q{**baz, &b}, SINCE_2_0) assert_parses_args( s(:args, s(:restarg), s(:kwrestarg)), %q{*, **}, SINCE_2_0) end def test_kwarg_no_paren assert_parses_args( s(:args, s(:kwarg, :foo)), %Q{foo:\n}, SINCE_2_1) assert_parses_args( s(:args, s(:kwoptarg, :foo, s(:int, -1))), %Q{foo: -1\n}, SINCE_2_1) end def assert_parses_margs(ast, code, versions=SINCE_1_9) assert_parses_args( s(:args, ast), %Q{(#{code})}, versions) end def test_marg_combinations # tLPAREN f_margs rparen assert_parses_margs( s(:mlhs, s(:mlhs, s(:arg, :a))), %q{((a))}) # f_marg_list assert_parses_margs( s(:mlhs, s(:arg, :a), s(:arg, :a1)), %q{(a, a1)}) # f_marg_list tCOMMA tSTAR f_norm_arg assert_parses_margs( s(:mlhs, s(:arg, :a), s(:restarg, :r)), %q{(a, *r)}) # f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list assert_parses_margs( s(:mlhs, s(:arg, :a), s(:restarg, :r), s(:arg, :p)), %q{(a, *r, p)}) # f_marg_list tCOMMA tSTAR assert_parses_margs( s(:mlhs, s(:arg, :a), s(:restarg)), %q{(a, *)}) # f_marg_list tCOMMA tSTAR tCOMMA f_marg_list assert_parses_margs( s(:mlhs, s(:arg, :a), s(:restarg), s(:arg, :p)), %q{(a, *, p)}) # tSTAR f_norm_arg assert_parses_margs( s(:mlhs, s(:restarg, :r)), %q{(*r)}) # tSTAR f_norm_arg tCOMMA f_marg_list assert_parses_margs( s(:mlhs, s(:restarg, :r), s(:arg, :p)), %q{(*r, p)}) # tSTAR assert_parses_margs( s(:mlhs, s(:restarg)), %q{(*)}) # tSTAR tCOMMA f_marg_list assert_parses_margs( s(:mlhs, s(:restarg), s(:arg, :p)), %q{(*, p)}) end def test_marg_objc_restarg assert_parses( s(:def, :f, s(:args, s(:arg, :a), s(:mlhs, s(:objc_restarg, s(:objc_kwarg, :b, :c)))), nil), %Q{def f(a, (*b: c)); end}, %q{ ~ operator (args.mlhs.objc_restarg) | ~~~~~ expression (args.mlhs.objc_restarg)}, %w(mac)) end def assert_parses_blockargs(ast, code, versions=ALL_VERSIONS) assert_parses( s(:block, s(:send, nil, :f), ast, nil), %Q{f{ #{code} }}, %q{}, versions) end def test_block_arg_combinations # none assert_parses_blockargs( s(:args), %q{}) # tPIPE tPIPE # tPIPE opt_bv_decl tPIPE assert_parses_blockargs( s(:args), %q{| |}) assert_parses_blockargs( s(:args, s(:shadowarg, :a)), %q{|;a|}, SINCE_1_9) assert_parses_blockargs( s(:args, s(:shadowarg, :a)), %Q{|;\na\n|}, SINCE_2_0) # tOROP before 2.7 / tPIPE+tPIPE after assert_parses_blockargs( s(:args), %q{||}) # block_par # block_par tCOMMA # block_par tCOMMA tAMPER lhs # f_arg opt_f_block_arg # f_arg tCOMMA assert_parses_blockargs( s(:args, s(:procarg0, s(:arg, :a))), %q{|a|}, SINCE_1_9) assert_parses_blockargs( s(:args, s(:arg, :a)), %q{|a|}, %w(1.8)) assert_parses_blockargs( s(:args, s(:arg, :a), s(:arg, :c)), %q{|a, c|}) assert_parses_blockargs( s(:args, s(:arg_expr, s(:ivasgn, :@a))), %q{|@a|}, %w(1.8)) assert_parses_blockargs( s(:args, s(:arg, :a)), %q{|a,|} ) assert_parses_blockargs( s(:args, s(:arg, :a), s(:blockarg, :b)), %q{|a, &b|}) assert_parses_blockargs( s(:args, s(:arg, :a), s(:blockarg_expr, s(:ivasgn, :@b))), %q{|a, &@b|}, %w(1.8)) # block_par tCOMMA tSTAR lhs tCOMMA tAMPER lhs # block_par tCOMMA tSTAR tCOMMA tAMPER lhs # block_par tCOMMA tSTAR lhs # block_par tCOMMA tSTAR # f_arg tCOMMA f_rest_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:arg, :a), s(:restarg, :s), s(:blockarg, :b)), %q{|a, *s, &b|}) assert_parses_blockargs( s(:args, s(:arg, :a), s(:restarg_expr, s(:ivasgn, :@s)), s(:blockarg_expr, s(:ivasgn, :@b))), %q{|a, *@s, &@b|}, %w(1.8)) assert_parses_blockargs( s(:args, s(:arg, :a), s(:restarg), s(:blockarg, :b)), %q{|a, *, &b|}) assert_parses_blockargs( s(:args, s(:arg, :a), s(:restarg), s(:blockarg_expr, s(:ivasgn, :@b))), %q{|a, *, &@b|}, %w(1.8)) assert_parses_blockargs( s(:args, s(:arg, :a), s(:restarg, :s)), %q{|a, *s|}) assert_parses_blockargs( s(:args, s(:arg, :a), s(:restarg_expr, s(:ivasgn, :@s))), %q{|a, *@s|}, %w(1.8)) assert_parses_blockargs( s(:args, s(:arg, :a), s(:restarg)), %q{|a, *|}) # tSTAR lhs tCOMMA tAMPER lhs # tSTAR lhs # tSTAR # tSTAR tCOMMA tAMPER lhs # f_rest_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:restarg, :s), s(:blockarg, :b)), %q{|*s, &b|}) assert_parses_blockargs( s(:args, s(:restarg_expr, s(:ivasgn, :@s)), s(:blockarg_expr, s(:ivasgn, :@b))), %q{|*@s, &@b|}, %w(1.8)) assert_parses_blockargs( s(:args, s(:restarg), s(:blockarg, :b)), %q{|*, &b|}) assert_parses_blockargs( s(:args, s(:restarg), s(:blockarg_expr, s(:ivasgn, :@b))), %q{|*, &@b|}, %w(1.8)) assert_parses_blockargs( s(:args, s(:restarg, :s)), %q{|*s|}) assert_parses_blockargs( s(:args, s(:restarg_expr, s(:ivasgn, :@s))), %q{|*@s|}, %w(1.8)) assert_parses_blockargs( s(:args, s(:restarg)), %q{|*|}) # tAMPER lhs # f_block_arg assert_parses_blockargs( s(:args, s(:blockarg, :b)), %q{|&b|}) assert_parses_blockargs( s(:args, s(:blockarg_expr, s(:ivasgn, :@b))), %q{|&@b|}, %w(1.8)) # f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:arg, :a), s(:optarg, :o, s(:int, 1)), s(:optarg, :o1, s(:int, 2)), s(:restarg, :r), s(:blockarg, :b)), %q{|a, o=1, o1=2, *r, &b|}, SINCE_1_9) # f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:arg, :a), s(:optarg, :o, s(:int, 1)), s(:restarg, :r), s(:arg, :p), s(:blockarg, :b)), %q{|a, o=1, *r, p, &b|}, SINCE_1_9) # f_arg tCOMMA f_block_optarg opt_f_block_arg assert_parses_blockargs( s(:args, s(:arg, :a), s(:optarg, :o, s(:int, 1)), s(:blockarg, :b)), %q{|a, o=1, &b|}, SINCE_1_9) # f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:arg, :a), s(:optarg, :o, s(:int, 1)), s(:arg, :p), s(:blockarg, :b)), %q{|a, o=1, p, &b|}, SINCE_1_9) # f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:arg, :a), s(:restarg, :r), s(:arg, :p), s(:blockarg, :b)), %q{|a, *r, p, &b|}, SINCE_1_9) # f_block_optarg tCOMMA f_rest_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:optarg, :o, s(:int, 1)), s(:restarg, :r), s(:blockarg, :b)), %q{|o=1, *r, &b|}, SINCE_1_9) # f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:optarg, :o, s(:int, 1)), s(:restarg, :r), s(:arg, :p), s(:blockarg, :b)), %q{|o=1, *r, p, &b|}, SINCE_1_9) # f_block_optarg opt_f_block_arg assert_parses_blockargs( s(:args, s(:optarg, :o, s(:int, 1)), s(:blockarg, :b)), %q{|o=1, &b|}, SINCE_1_9) # f_block_optarg tCOMMA f_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:optarg, :o, s(:int, 1)), s(:arg, :p), s(:blockarg, :b)), %q{|o=1, p, &b|}, SINCE_1_9) # f_rest_arg tCOMMA f_arg opt_f_block_arg assert_parses_blockargs( s(:args, s(:restarg, :r), s(:arg, :p), s(:blockarg, :b)), %q{|*r, p, &b|}, SINCE_1_9) end def test_multiple_args_with_trailing_comma assert_parses_blockargs( s(:args, s(:arg, :a), s(:arg, :b)), %q(|a, b,|) ) end def test_procarg0_legacy Parser::Builders::Default.emit_procarg0 = false assert_parses_blockargs( s(:args, s(:arg, :a)), %q{|a|} ) ensure Parser::Builders::Default.emit_procarg0 = true end def test_emit_arg_inside_procarg0_legacy Parser::Builders::Default.emit_arg_inside_procarg0 = false assert_parses_blockargs( s(:args, s(:procarg0, :a)), %q{|a|}, SINCE_1_9) ensure Parser::Builders::Default.emit_arg_inside_procarg0 = true end def test_procarg0 assert_parses( s(:block, s(:send, nil, :m), s(:args, s(:procarg0, s(:arg, :foo))), nil), %q{m { |foo| } }, %q{ ^^^ expression (args.procarg0)}, SINCE_1_9) assert_parses( s(:block, s(:send, nil, :m), s(:args, s(:procarg0, s(:arg, :foo), s(:arg, :bar))), nil), %q{m { |(foo, bar)| } }, %q{ ^ begin (args.procarg0) | ^ end (args.procarg0) | ^^^^^^^^^^ expression (args.procarg0)}, SINCE_1_9) end def test_block_kwarg_combinations # f_block_kwarg tCOMMA f_kwrest opt_f_block_arg assert_parses_blockargs( s(:args, s(:kwoptarg, :foo, s(:int, 1)), s(:kwoptarg, :bar, s(:int, 2)), s(:kwrestarg, :baz), s(:blockarg, :b)), %q{|foo: 1, bar: 2, **baz, &b|}, SINCE_2_0) # f_block_kwarg opt_f_block_arg assert_parses_blockargs( s(:args, s(:kwoptarg, :foo, s(:int, 1)), s(:blockarg, :b)), %q{|foo: 1, &b|}, SINCE_2_0) # f_kwrest opt_f_block_arg assert_parses_blockargs( s(:args, s(:kwrestarg, :baz), s(:blockarg, :b)), %q{|**baz, &b|}, SINCE_2_0) end def test_block_kwarg assert_parses_blockargs( s(:args, s(:kwarg, :foo)), %q{|foo:|}, SINCE_2_1) end def test_arg_invalid assert_diagnoses( [:error, :argument_const], %q{def foo(Abc); end}, %q{ ~~~ location}) assert_diagnoses( [:error, :argument_ivar], %q{def foo(@abc); end}, %q{ ~~~~ location}) assert_diagnoses( [:error, :argument_gvar], %q{def foo($abc); end}, %q{ ~~~~ location}) assert_diagnoses( [:error, :argument_cvar], %q{def foo(@@abc); end}, %q{ ~~~~~ location}) end def test_arg_duplicate assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, aa); end}, %q{ ^^ location | ~~ highlights (0)}) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, aa=1); end}, %q{ ^^ location | ~~ highlights (0)}) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, *aa); end}, %q{ ^^ location | ~~ highlights (0)}) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, &aa); end}, %q{ ^^ location | ~~ highlights (0)}) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, (bb, aa)); end}, %q{ ^^ location | ~~ highlights (0)}, SINCE_1_9) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, *r, aa); end}, %q{ ^^ location | ~~ highlights (0)}, SINCE_1_9) assert_diagnoses( [:error, :duplicate_argument], %q{lambda do |aa; aa| end}, %q{ ^^ location | ~~ highlights (0)}, SINCE_1_9) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, aa: 1); end}, %q{ ^^ location | ~~ highlights (0)}, SINCE_2_0) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, **aa); end}, %q{ ^^ location | ~~ highlights (0)}, SINCE_2_0) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(aa, aa:); end}, %q{ ^^ location | ~~ highlights (0)}, SINCE_2_1) end def test_arg_duplicate_ignored assert_diagnoses( [:error, :duplicate_argument], %q{def foo(_, _); end}, %q{}, %w(1.8)) assert_parses( s(:def, :foo, s(:args, s(:arg, :_), s(:arg, :_)), nil), %q{def foo(_, _); end}, %q{}, SINCE_1_9) assert_diagnoses( [:error, :duplicate_argument], %q{def foo(_a, _a); end}, %q{}, %w(1.8 1.9 mac ios)) assert_parses( s(:def, :foo, s(:args, s(:arg, :_a), s(:arg, :_a)), nil), %q{def foo(_a, _a); end}, %q{}, SINCE_2_0) end def test_arg_duplicate_proc assert_parses( s(:block, s(:send, nil, :proc), s(:args, s(:arg, :a), s(:arg, :a)), nil), %q{proc{|a,a|}}, %q{}, %w(1.8)) assert_diagnoses( [:error, :duplicate_argument], %q{proc{|a,a|}}, %q{}, SINCE_1_9) end def test_kwarg_invalid assert_diagnoses( [:error, :argument_const], %q{def foo(Abc: 1); end}, %q{ ~~~~ location}, SINCE_2_0) assert_diagnoses( [:error, :argument_const], %q{def foo(Abc:); end}, %q{ ~~~~ location}, SINCE_2_1) end def test_arg_label assert_parses( s(:def, :foo, s(:args), s(:send, nil, :a, s(:sym, :b))), %q{def foo() a:b end}, %q{}, SINCE_1_9) assert_parses( s(:def, :foo, s(:args), s(:send, nil, :a, s(:sym, :b))), %Q{def foo\n a:b end}, %q{}, SINCE_1_9) assert_parses( s(:block, s(:send, nil, :f), s(:args), s(:send, nil, :a, s(:sym, :b))), %Q{f { || a:b }}, %q{}, SINCE_1_9) end # # Sends # # To self def test_send_self assert_parses( s(:send, nil, :fun), %q{fun}, %q{~~~ selector |~~~ expression}) assert_parses( s(:send, nil, :fun!), %q{fun!}, %q{~~~~ selector |~~~~ expression}) assert_parses( s(:send, nil, :fun, s(:int, 1)), %q{fun(1)}, %q{~~~ selector | ^ begin | ^ end |~~~~~~ expression}) end def test_send_self_block assert_parses( s(:block, s(:send, nil, :fun), s(:args), nil), %q{fun { }}) assert_parses( s(:block, s(:send, nil, :fun), s(:args), nil), %q{fun() { }}) assert_parses( s(:block, s(:send, nil, :fun, s(:int, 1)), s(:args), nil), %q{fun(1) { }}) assert_parses( s(:block, s(:send, nil, :fun), s(:args), nil), %q{fun do end}) end def test_send_block_blockarg assert_diagnoses( [:error, :block_and_blockarg], %q{fun(&bar) do end}, %q{ ~~~~ location | ~~ highlights (0)}) end def test_send_objc_vararg assert_parses( s(:send, nil, :fun, s(:int, 1), s(:hash, s(:pair, s(:sym, :bar), s(:objc_varargs, s(:int, 2), s(:int, 3), s(:nil))))), %q{fun(1, bar: 2, 3, nil)}, %q{ ~~~~~~~~~ expression (hash.pair.objc_varargs)}, %w(mac)) end # To receiver def test_send_plain assert_parses( s(:send, s(:lvar, :foo), :fun), %q{foo.fun}, %q{ ~~~ selector | ^ dot |~~~~~~~ expression}) assert_parses( s(:send, s(:lvar, :foo), :fun), %q{foo::fun}, %q{ ~~~ selector | ^^ dot |~~~~~~~~ expression}) assert_parses( s(:send, s(:lvar, :foo), :Fun), %q{foo::Fun()}, %q{ ~~~ selector | ^^ dot |~~~~~~~~~~ expression}) end def test_send_plain_cmd assert_parses( s(:send, s(:lvar, :foo), :fun, s(:lvar, :bar)), %q{foo.fun bar}, %q{ ~~~ selector | ^ dot |~~~~~~~~~~~ expression}) assert_parses( s(:send, s(:lvar, :foo), :fun, s(:lvar, :bar)), %q{foo::fun bar}, %q{ ~~~ selector | ^^ dot |~~~~~~~~~~~~ expression}) assert_parses( s(:send, s(:lvar, :foo), :Fun, s(:lvar, :bar)), %q{foo::Fun bar}, %q{ ~~~ selector | ^^ dot |~~~~~~~~~~~~ expression}) end def test_send_plain_cmd_ambiguous_literal assert_diagnoses( [:warning, :ambiguous_literal], %q{m /foo/}, %q{ ^ location}) refute_diagnoses( %q{m %[1]}) end def test_send_plain_cmd_ambiguous_prefix assert_diagnoses( [:warning, :ambiguous_prefix, { :prefix => '+' }], %q{m +foo}, %q{ ^ location}) assert_diagnoses( [:warning, :ambiguous_prefix, { :prefix => '-' }], %q{m -foo}, %q{ ^ location}) assert_diagnoses( [:warning, :ambiguous_prefix, { :prefix => '&' }], %q{m &foo}, %q{ ^ location}) assert_diagnoses( [:warning, :ambiguous_prefix, { :prefix => '*' }], %q{m *foo}, %q{ ^ location}) assert_diagnoses( [:warning, :ambiguous_prefix, { :prefix => '**' }], %q{m **foo}, %q{ ^^ location}, SINCE_2_0) end def test_send_block_chain_cmd assert_parses( s(:send, s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil), :fun, s(:lvar, :bar)), %q{meth 1 do end.fun bar}, %q{ ~~~ selector | ^ dot |~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:send, s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil), :fun, s(:lvar, :bar)), %q{meth 1 do end.fun(bar)}, %q{ ~~~ selector | ^ dot | ^ begin | ^ end |~~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:send, s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil), :fun, s(:lvar, :bar)), %q{meth 1 do end::fun bar}, %q{ ~~~ selector | ^^ dot |~~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:send, s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil), :fun, s(:lvar, :bar)), %q{meth 1 do end::fun(bar)}, %q{ ~~~ selector | ^ begin | ^ end | ^^ dot |~~~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:block, s(:send, s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil), :fun, s(:lvar, :bar)), s(:args), nil), %q{meth 1 do end.fun bar do end}, %q{}, SINCE_2_0) assert_parses( s(:block, s(:send, s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil), :fun, s(:lvar, :bar)), s(:args), nil), %q{meth 1 do end.fun(bar) {}}, %q{}, SINCE_2_0) assert_parses( s(:block, s(:send, s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil), :fun), s(:args), nil), %q{meth 1 do end.fun {}}, %q{}, SINCE_2_0) end def test_send_paren_block_cmd assert_parses( s(:send, nil, :foo, s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil)), %q{foo(meth 1 do end)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :foo, s(:int, 1), s(:block, s(:send, nil, :meth, s(:int, 1)), s(:args), nil)), %q{foo(1, meth 1 do end)}, %q{}, %w(1.8)) end def test_send_binary_op assert_parses( s(:send, s(:lvar, :foo), :+, s(:int, 1)), %q{foo + 1}, %q{ ~ selector |~~~~~~~ expression}) assert_parses( s(:send, s(:lvar, :foo), :-, s(:int, 1)), %q{foo - 1}) assert_parses( s(:send, s(:lvar, :foo), :*, s(:int, 1)), %q{foo * 1}) assert_parses( s(:send, s(:lvar, :foo), :/, s(:int, 1)), %q{foo / 1}) assert_parses( s(:send, s(:lvar, :foo), :%, s(:int, 1)), %q{foo % 1}) assert_parses( s(:send, s(:lvar, :foo), :**, s(:int, 1)), %q{foo ** 1}) assert_parses( s(:send, s(:lvar, :foo), :|, s(:int, 1)), %q{foo | 1}) assert_parses( s(:send, s(:lvar, :foo), :^, s(:int, 1)), %q{foo ^ 1}) assert_parses( s(:send, s(:lvar, :foo), :&, s(:int, 1)), %q{foo & 1}) assert_parses( s(:send, s(:lvar, :foo), :<=>, s(:int, 1)), %q{foo <=> 1}) assert_parses( s(:send, s(:lvar, :foo), :<, s(:int, 1)), %q{foo < 1}) assert_parses( s(:send, s(:lvar, :foo), :<=, s(:int, 1)), %q{foo <= 1}) assert_parses( s(:send, s(:lvar, :foo), :>, s(:int, 1)), %q{foo > 1}) assert_parses( s(:send, s(:lvar, :foo), :>=, s(:int, 1)), %q{foo >= 1}) assert_parses( s(:send, s(:lvar, :foo), :==, s(:int, 1)), %q{foo == 1}) assert_parses( s(:not, s(:send, s(:lvar, :foo), :==, s(:int, 1))), %q{foo != 1}, %q{}, %w(1.8)) assert_parses( s(:send, s(:lvar, :foo), :'!=', s(:int, 1)), %q{foo != 1}, %q{}, SINCE_1_9) assert_parses( s(:send, s(:lvar, :foo), :===, s(:int, 1)), %q{foo === 1}) assert_parses( s(:send, s(:lvar, :foo), :=~, s(:int, 1)), %q{foo =~ 1}) assert_parses( s(:not, s(:send, s(:lvar, :foo), :=~, s(:int, 1))), %q{foo !~ 1}, %q{}, %w(1.8)) assert_parses( s(:send, s(:lvar, :foo), :'!~', s(:int, 1)), %q{foo !~ 1}, %q{}, SINCE_1_9) assert_parses( s(:send, s(:lvar, :foo), :<<, s(:int, 1)), %q{foo << 1}) assert_parses( s(:send, s(:lvar, :foo), :>>, s(:int, 1)), %q{foo >> 1}) end def test_send_unary_op assert_parses( s(:send, s(:lvar, :foo), :-@), %q{-foo}, %q{~ selector |~~~~ expression}) assert_parses( s(:send, s(:lvar, :foo), :+@), %q{+foo}) assert_parses( s(:send, s(:lvar, :foo), :~), %q{~foo}) end def test_bang assert_parses( s(:not, s(:lvar, :foo)), %q{!foo}, %{}, %w(1.8)) assert_parses( s(:send, s(:lvar, :foo), :'!'), %q{!foo}, %{}, SINCE_1_9) end def test_bang_cmd assert_parses( s(:not, s(:send, nil, :m, s(:lvar, :foo))), %q{!m foo}, %{}, %w(1.8)) assert_parses( s(:send, s(:send, nil, :m, s(:lvar, :foo)), :'!'), %q{!m foo}, %{}, SINCE_1_9) end def test_not assert_parses( s(:not, s(:lvar, :foo)), %q{not foo}, %{}, %w(1.8)) assert_parses( s(:send, s(:lvar, :foo), :'!'), %q{not foo}, %{}, SINCE_1_9) assert_parses( s(:send, s(:lvar, :foo), :'!'), %q{not(foo)}, %q{~~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:send, s(:begin), :'!'), %q{not()}, %q{~~~~~ expression}, SINCE_1_9) end def test_not_cmd assert_parses( s(:not, s(:send, nil, :m, s(:lvar, :foo))), %q{not m foo}, %{}, %w(1.8)) assert_parses( s(:send, s(:send, nil, :m, s(:lvar, :foo)), :'!'), %q{not m foo}, %{}, SINCE_1_9) end def test_unary_num_pow_precedence assert_parses( s(:send, s(:send, s(:int, 2), :**, s(:int, 10)), :+@), %q{+2 ** 10}, %{}, %w{2.1}) assert_parses( s(:send, s(:send, s(:float, 2.0), :**, s(:int, 10)), :+@), %q{+2.0 ** 10}) assert_parses( s(:send, s(:send, s(:int, 2), :**, s(:int, 10)), :-@), %q{-2 ** 10}) assert_parses( s(:send, s(:send, s(:float, 2.0), :**, s(:int, 10)), :-@), %q{-2.0 ** 10}) end def test_send_attr_asgn assert_parses( s(:send, s(:lvar, :foo), :a=, s(:int, 1)), %q{foo.a = 1}, %q{ ~ selector | ^ dot | ^ operator |~~~~~~~~~ expression}) assert_parses( s(:send, s(:lvar, :foo), :a=, s(:int, 1)), %q{foo::a = 1}, %q{ ~ selector | ^^ dot | ^ operator |~~~~~~~~~~ expression}) assert_parses( s(:send, s(:lvar, :foo), :A=, s(:int, 1)), %q{foo.A = 1}, %q{ ~ selector | ^ dot | ^ operator |~~~~~~~~~ expression}) assert_parses( s(:casgn, s(:lvar, :foo), :A, s(:int, 1)), %q{foo::A = 1}, %q{ ~ name | ^^ double_colon | ^ operator |~~~~~~~~~~ expression}) end def test_send_index assert_parses( s(:index, s(:lvar, :foo), s(:int, 1), s(:int, 2)), %q{foo[1, 2]}, %q{ ^ begin | ^ end |~~~~~~~~~ expression}) end def test_send_index_legacy Parser::Builders::Default.emit_index = false assert_parses( s(:send, s(:lvar, :foo), :[], s(:int, 1), s(:int, 2)), %q{foo[1, 2]}, %q{ ~~~~~~ selector |~~~~~~~~~ expression}) ensure Parser::Builders::Default.emit_index = true end def test_send_index_cmd assert_parses( s(:index, s(:lvar, :foo), s(:send, nil, :m, s(:lvar, :bar))), %q{foo[m bar]}) end def test_send_index_asgn assert_parses( s(:indexasgn, s(:lvar, :foo), s(:int, 1), s(:int, 2), s(:int, 3)), %q{foo[1, 2] = 3}, %q{ ^ begin | ^ end | ^ operator |~~~~~~~~~~~~~ expression}) end def test_send_index_asgn_legacy Parser::Builders::Default.emit_index = false assert_parses( s(:send, s(:lvar, :foo), :[]=, s(:int, 1), s(:int, 2), s(:int, 3)), %q{foo[1, 2] = 3}, %q{ ~~~~~~ selector | ^ operator |~~~~~~~~~~~~~ expression}) ensure Parser::Builders::Default.emit_index = true end def test_send_lambda assert_parses( s(:block, s(:lambda), s(:args), nil), %q{->{ }}, %q{~~ expression (lambda) | ^ begin | ^ end |~~~~~ expression}, SINCE_1_9) assert_parses( s(:block, s(:lambda), s(:args, s(:restarg)), nil), %q{-> * { }}, %q{~~ expression (lambda) | ^ begin | ^ end | ^ expression (args.restarg) |~~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:block, s(:lambda), s(:args), nil), %q{-> do end}, %q{~~ expression (lambda) | ^^ begin | ^^^ end |~~~~~~~~~ expression}, SINCE_1_9) end def test_send_lambda_args assert_parses( s(:block, s(:lambda), s(:args, s(:arg, :a)), nil), %q{->(a) { }}, %q{~~ expression (lambda) | ^ begin (args) | ^ end (args) | ^ begin | ^ end |~~~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:block, s(:lambda), s(:args, s(:arg, :a)), nil), %q{-> (a) { }}, %q{}, SINCE_2_0) end def test_send_lambda_args_shadow assert_parses( s(:block, s(:lambda), s(:args, s(:arg, :a), s(:shadowarg, :foo), s(:shadowarg, :bar)), nil), %q{->(a; foo, bar) { }}, %q{ ~~~ expression (args.shadowarg)}, SINCE_1_9) end def test_send_lambda_args_noparen assert_parses( s(:block, s(:lambda), s(:args, s(:kwoptarg, :a, s(:int, 1))), nil), %q{-> a: 1 { }}, %q{}, SINCE_2_0) assert_parses( s(:block, s(:lambda), s(:args, s(:kwarg, :a)), nil), %q{-> a: { }}, %q{}, SINCE_2_1) end def test_send_lambda_legacy Parser::Builders::Default.emit_lambda = false assert_parses( s(:block, s(:send, nil, :lambda), s(:args), nil), %q{->{ }}, %q{~~ selector (send) | ^ begin | ^ end |~~~~~ expression}, SINCE_1_9) ensure Parser::Builders::Default.emit_lambda = true end def test_send_call assert_parses( s(:send, s(:lvar, :foo), :call, s(:int, 1)), %q{foo.(1)}, %q{ ^ begin | ^ end | ^ dot |~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:send, s(:lvar, :foo), :call, s(:int, 1)), %q{foo::(1)}, %q{ ^ begin | ^ end | ^^ dot |~~~~~~~~ expression}, SINCE_1_9) end def test_send_conditional assert_parses( s(:csend, s(:send, nil, :a), :b), %q{a&.b}, %q{ ^^ dot}, SINCE_2_3 + %w{ios}) end def test_send_attr_asgn_conditional assert_parses( s(:csend, s(:send, nil, :a), :b=, s(:int, 1)), %q{a&.b = 1}, %q{ ^^ dot}, SINCE_2_3 + %w{ios}) end def test_send_block_conditional assert_parses( s(:block, s(:csend, s(:lvar, :foo), :bar), s(:args), nil), %q{foo&.bar {}}, %q{}, SINCE_2_3 + %w{ios}) end def test_send_op_asgn_conditional assert_parses( s(:and_asgn, s(:csend, s(:send, nil, :a), :b), s(:int, 1)), %q{a&.b &&= 1}, %q{}, SINCE_2_3 + %w{ios}) end def test_lvar_injecting_match assert_parses( s(:begin, s(:match_with_lvasgn, s(:regexp, s(:str, '(?bar)'), s(:regopt)), s(:str, 'bar')), s(:lvar, :match)), %q{/(?bar)/ =~ 'bar'; match}, %q{ ~~ selector (match_with_lvasgn) |~~~~~~~~~~~~~~~~~~~~~~~~ expression (match_with_lvasgn)}, SINCE_1_9) end def test_non_lvar_injecting_match assert_parses( s(:send, s(:regexp, s(:begin, s(:int, 1)), s(:str, '(?bar)'), s(:regopt)), :=~, s(:str, 'bar')), %q{/#{1}(?bar)/ =~ 'bar'}) end # To superclass def test_super assert_parses( s(:super, s(:lvar, :foo)), %q{super(foo)}, %q{~~~~~ keyword | ^ begin | ^ end |~~~~~~~~~~ expression}) assert_parses( s(:super, s(:lvar, :foo)), %q{super foo}, %q{~~~~~ keyword |~~~~~~~~~ expression}) assert_parses( s(:super), %q{super()}, %q{~~~~~ keyword | ^ begin | ^ end |~~~~~~~ expression}) end def test_zsuper assert_parses( s(:zsuper), %q{super}, %q{~~~~~ keyword |~~~~~ expression}) end def test_super_block assert_parses( s(:block, s(:super, s(:lvar, :foo), s(:lvar, :bar)), s(:args), nil), %q{super foo, bar do end}) assert_parses( s(:block, s(:zsuper), s(:args), nil), %q{super do end}) end # To block argument def test_yield assert_parses( s(:yield, s(:lvar, :foo)), %q{yield(foo)}, %q{~~~~~ keyword | ^ begin | ^ end |~~~~~~~~~~ expression}) assert_parses( s(:yield, s(:lvar, :foo)), %q{yield foo}, %q{~~~~~ keyword |~~~~~~~~~ expression}) assert_parses( s(:yield), %q{yield()}, %q{~~~~~ keyword | ^ begin | ^ end |~~~~~~~ expression}) assert_parses( s(:yield), %q{yield}, %q{~~~~~ keyword |~~~~~ expression}) end def test_yield_block assert_diagnoses( [:error, :block_given_to_yield], %q{yield foo do end}, %q{~~~~~ location | ~~ highlights (0)}) assert_diagnoses( [:error, :block_given_to_yield], %q{yield(&foo)}, %q{~~~~~ location | ~~~~ highlights (0)}) end # Call arguments def test_args_cmd assert_parses( s(:send, nil, :fun, s(:send, nil, :f, s(:lvar, :bar))), %q{fun(f bar)}) end def test_args_args_star assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:splat, s(:lvar, :bar))), %q{fun(foo, *bar)}) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun(foo, *bar, &baz)}) end def test_args_star assert_parses( s(:send, nil, :fun, s(:splat, s(:lvar, :bar))), %q{fun(*bar)}) assert_parses( s(:send, nil, :fun, s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun(*bar, &baz)}) end def test_args_block_pass assert_parses( s(:send, nil, :fun, s(:block_pass, s(:lvar, :bar))), %q{fun(&bar)}) end def test_args_args_comma assert_parses( s(:index, s(:lvar, :foo), s(:lvar, :bar)), %q{foo[bar,]}, %q{}, SINCE_1_9) end def test_args_assocs assert_parses( s(:send, nil, :fun, s(:hash, s(:pair, s(:sym, :foo), s(:int, 1)))), %q{fun(:foo => 1)}) assert_parses( s(:send, nil, :fun, s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:block_pass, s(:lvar, :baz))), %q{fun(:foo => 1, &baz)}) end def test_args_assocs_star assert_parses( s(:send, nil, :fun, s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar))), %q{fun(:foo => 1, *bar)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun(:foo => 1, *bar, &baz)}, %q{}, %w(1.8)) end def test_args_assocs_comma assert_parses( s(:index, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :baz), s(:int, 1)))), %q{foo[:baz => 1,]}, %q{}, SINCE_1_9) end def test_args_args_assocs assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1)))), %q{fun(foo, :foo => 1)}) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:block_pass, s(:lvar, :baz))), %q{fun(foo, :foo => 1, &baz)}) end def test_args_args_assocs_comma assert_parses( s(:index, s(:lvar, :foo), s(:lvar, :bar), s(:hash, s(:pair, s(:sym, :baz), s(:int, 1)))), %q{foo[bar, :baz => 1,]}, %q{}, SINCE_1_9) end def test_args_args_assocs_star assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar))), %q{fun(foo, :foo => 1, *bar)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun(foo, :foo => 1, *bar, &baz)}, %q{}, %w(1.8)) end # Call arguments with whitespace def test_space_args_cmd assert_parses( s(:send, nil, :fun, s(:begin, s(:send, nil, :f, s(:lvar, :bar)))), %q{fun (f bar)}) end def test_space_args_arg assert_parses( s(:send, nil, :fun, s(:begin, s(:int, 1))), %q{fun (1)}) end def test_space_args_arg_newline assert_parses( s(:send, nil, :fun, s(:begin, s(:int, 1))), %Q{fun (1\n)}, %q{}, ALL_VERSIONS - %w(mac)) end def test_space_args_arg_block assert_parses( s(:block, s(:send, nil, :fun, s(:begin, s(:int, 1))), s(:args), nil), %q{fun (1) {}}) assert_parses( s(:block, s(:send, s(:lvar, :foo), :fun, s(:int, 1)), s(:args), nil), %q{foo.fun (1) {}}, %q{}, %w(1.8)) assert_parses( s(:block, s(:send, s(:lvar, :foo), :fun, s(:begin, s(:int, 1))), s(:args), nil), %q{foo.fun (1) {}}, %q{}, SINCE_1_9) assert_parses( s(:block, s(:send, s(:lvar, :foo), :fun, s(:int, 1)), s(:args), nil), %q{foo::fun (1) {}}, %q{}, %w(1.8)) assert_parses( s(:block, s(:send, s(:lvar, :foo), :fun, s(:begin, s(:int, 1))), s(:args), nil), %q{foo::fun (1) {}}, %q{}, SINCE_1_9) end def test_space_args_hash_literal_then_block # This code only parses if the lexer enters expr_endarg state correctly assert_parses( s(:block, s(:send, nil, :f, s(:int, 1), s(:hash, s(:pair, s(:int, 1), s(:int, 2)))), s(:args), s(:int, 1)), %q{f 1, {1 => 2} {1}}, %q{}, ALL_VERSIONS - SINCE_2_5) end def test_space_args_arg_call assert_parses( s(:send, nil, :fun, s(:send, s(:begin, s(:int, 1)), :to_i)), %q{fun (1).to_i}) end def test_space_args_block_pass assert_parses( s(:send, nil, :fun, s(:block_pass, s(:lvar, :foo))), %q{fun (&foo)}, %q{}, %w(1.8)) end def test_space_args_arg_block_pass assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:block_pass, s(:lvar, :bar))), %q{fun (foo, &bar)}, %q{}, %w(1.8)) end def test_space_args_args_star assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:splat, s(:lvar, :bar))), %q{fun (foo, *bar)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun (foo, *bar, &baz)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:int, 1), s(:splat, s(:lvar, :bar))), %q{fun (foo, 1, *bar)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:int, 1), s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun (foo, 1, *bar, &baz)}, %q{}, %w(1.8)) end def test_space_args_star assert_parses( s(:send, nil, :fun, s(:splat, s(:lvar, :bar))), %q{fun (*bar)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun (*bar, &baz)}, %q{}, %w(1.8)) end def test_space_args_assocs assert_parses( s(:send, nil, :fun, s(:hash, s(:pair, s(:sym, :foo), s(:int, 1)))), %q{fun (:foo => 1)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:block_pass, s(:lvar, :baz))), %q{fun (:foo => 1, &baz)}, %q{}, %w(1.8)) end def test_space_args_assocs_star assert_parses( s(:send, nil, :fun, s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar))), %q{fun (:foo => 1, *bar)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun (:foo => 1, *bar, &baz)}, %q{}, %w(1.8)) end def test_space_args_args_assocs assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1)))), %q{fun (foo, :foo => 1)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:block_pass, s(:lvar, :baz))), %q{fun (foo, :foo => 1, &baz)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:int, 1), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1)))), %q{fun (foo, 1, :foo => 1)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:int, 1), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:block_pass, s(:lvar, :baz))), %q{fun (foo, 1, :foo => 1, &baz)}, %q{}, %w(1.8)) end def test_space_args_args_assocs_star assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar))), %q{fun (foo, :foo => 1, *bar)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun (foo, :foo => 1, *bar, &baz)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:int, 1), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar))), %q{fun (foo, 1, :foo => 1, *bar)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :fun, s(:lvar, :foo), s(:int, 1), s(:hash, s(:pair, s(:sym, :foo), s(:int, 1))), s(:splat, s(:lvar, :bar)), s(:block_pass, s(:lvar, :baz))), %q{fun (foo, 1, :foo => 1, *bar, &baz)}, %q{}, %w(1.8)) end def test_space_args_arg_arg assert_parses( s(:send, nil, :fun, s(:int, 1), s(:int, 2)), %q{fun (1, 2)}, %q{}, %w(1.8)) end def test_space_args_none assert_parses( s(:send, nil, :fun), %q{fun ()}, %q{}, %w(1.8)) end def test_space_args_block assert_parses( s(:block, s(:send, nil, :fun), s(:args), nil), %q{fun () {}}, %q{ ^ begin (send) | ^ end (send)}, %w(1.8)) assert_parses( s(:block, s(:send, s(:lvar, :foo), :fun), s(:args), nil), %q{foo.fun () {}}, %q{ ^ begin (send) | ^ end (send)}, %w(1.8)) assert_parses( s(:block, s(:send, s(:lvar, :foo), :fun), s(:args), nil), %q{foo::fun () {}}, %q{ ^ begin (send) | ^ end (send)}, %w(1.8)) assert_parses( s(:block, s(:send, nil, :fun, s(:begin)), s(:args), nil), %q{fun () {}}, %q{ ~~ expression (send.begin)}, SINCE_2_0) end # # Control flow # # Operators def test_and assert_parses( s(:and, s(:lvar, :foo), s(:lvar, :bar)), %q{foo and bar}, %q{ ~~~ operator |~~~~~~~~~~~ expression}) assert_parses( s(:and, s(:lvar, :foo), s(:lvar, :bar)), %q{foo && bar}, %q{ ~~ operator |~~~~~~~~~~ expression}) end def test_or assert_parses( s(:or, s(:lvar, :foo), s(:lvar, :bar)), %q{foo or bar}, %q{ ~~ operator |~~~~~~~~~~ expression}) assert_parses( s(:or, s(:lvar, :foo), s(:lvar, :bar)), %q{foo || bar}, %q{ ~~ operator |~~~~~~~~~~ expression}) end def test_and_or_masgn assert_parses( s(:and, s(:lvar, :foo), s(:begin, s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), s(:lvar, :bar)))), %q{foo && (a, b = bar)}) assert_parses( s(:or, s(:lvar, :foo), s(:begin, s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), s(:lvar, :bar)))), %q{foo || (a, b = bar)}) end # Branching def test_if assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :bar), nil), %q{if foo then bar; end}, %q{~~ keyword | ~~~~ begin | ~~~ end |~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :bar), nil), %q{if foo; bar; end}, %q{~~ keyword | ~~~ end |~~~~~~~~~~~~~~~~ expression}) end def test_if_nl_then assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :bar), nil), %Q{if foo\nthen bar end}, %q{ ~~~~ begin}) end def test_if_mod assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :bar), nil), %q{bar if foo}, %q{ ~~ keyword |~~~~~~~~~~ expression}) end def test_unless assert_parses( s(:if, s(:lvar, :foo), nil, s(:lvar, :bar)), %q{unless foo then bar; end}, %q{~~~~~~ keyword | ~~~~ begin | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:if, s(:lvar, :foo), nil, s(:lvar, :bar)), %q{unless foo; bar; end}, %q{~~~~~~ keyword | ~~~ end |~~~~~~~~~~~~~~~~~~~~ expression}) end def test_unless_mod assert_parses( s(:if, s(:lvar, :foo), nil, s(:lvar, :bar)), %q{bar unless foo}, %q{ ~~~~~~ keyword |~~~~~~~~~~~~~~ expression}) end def test_if_else assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :bar), s(:lvar, :baz)), %q{if foo then bar; else baz; end}, %q{~~ keyword | ~~~~ begin | ~~~~ else | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :bar), s(:lvar, :baz)), %q{if foo; bar; else baz; end}, %q{~~ keyword | ~~~~ else | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_unless_else assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :baz), s(:lvar, :bar)), %q{unless foo then bar; else baz; end}, %q{~~~~~~ keyword | ~~~~ begin | ~~~~ else | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :baz), s(:lvar, :bar)), %q{unless foo; bar; else baz; end}, %q{~~~~~~ keyword | ~~~~ else | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_if_elsif assert_parses( s(:if, s(:lvar, :foo), s(:lvar, :bar), s(:if, s(:lvar, :baz), s(:int, 1), s(:int, 2))), %q{if foo; bar; elsif baz; 1; else 2; end}, %q{~~ keyword | ~~~~~ else | ~~~~~ keyword (if) | ~~~~ else (if) | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_ternary assert_parses( s(:if, s(:lvar, :foo), s(:int, 1), s(:int, 2)), %q{foo ? 1 : 2}, %q{ ^ question | ^ colon |~~~~~~~~~~~ expression}) end def test_ternary_ambiguous_symbol assert_parses( s(:begin, s(:lvasgn, :t, s(:int, 1)), s(:if, s(:begin, s(:lvar, :foo)), s(:lvar, :t), s(:const, nil, :T))), %q{t=1;(foo)?t:T}, %q{}, SINCE_1_9) end def test_if_masgn assert_diagnoses( [:error, :masgn_as_condition], %q{if (a, b = foo); end}, %q{ ~~~~~~~~~~ location}, %w(1.8 1.9 2.0 2.1 2.2 2.3 ios mac)) end def test_if_masgn__24 assert_parses( s(:if, s(:begin, s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), s(:lvar, :foo))), nil, nil), %q{if (a, b = foo); end}, %q{}, SINCE_2_4) end def test_if_mod_masgn assert_diagnoses( [:error, :masgn_as_condition], %q{1 if (a, b = foo)}, %q{ ~~~~~~~~~~ location}, %w(1.8 1.9 2.0 2.1 2.2 2.3 ios mac)) end def test_tern_masgn assert_diagnoses( [:error, :masgn_as_condition], %q{(a, b = foo) ? 1 : 2}, %q{ ~~~~~~~~~~ location}, %w(1.8 1.9 2.0 2.1 2.2 2.3 ios mac)) end def test_not_masgn assert_diagnoses( [:error, :masgn_as_condition], %q{!(a, b = foo)}, %q{ ~~~~~~~~~~ location}, %w(1.8 1.9 2.0 2.1 2.2 2.3 ios mac)) end def test_not_masgn__24 assert_parses( s(:send, s(:begin, s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), s(:lvar, :foo))), :'!'), %q{!(a, b = foo)}, %q{}, SINCE_2_4) end def test_cond_begin assert_parses( s(:if, s(:begin, s(:lvar, :bar)), s(:lvar, :foo), nil), %q{if (bar); foo; end}) end def test_cond_begin_masgn assert_parses( s(:if, s(:begin, s(:lvar, :bar), s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), s(:lvar, :foo))), nil, nil), %q{if (bar; a, b = foo); end}) end def test_cond_begin_and_or_masgn assert_diagnoses( [:error, :masgn_as_condition], %q{if foo && (a, b = bar); end}, %q{ ~~~~~~~~~~ location}, %w(1.9 2.0 2.1 2.2 2.3 ios mac)) assert_diagnoses( [:error, :masgn_as_condition], %q{if foo || (a, b = bar); end}, %q{ ~~~~~~~~~~ location}, %w(1.9 2.0 2.1 2.2 2.3 ios mac)) assert_parses( s(:if, s(:and, s(:begin, s(:masgn, s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), s(:lvar, :foo))), s(:lvar, :bar)), nil, nil), %q{if (a, b = foo) && bar; end}, %q{}, %w(1.8)) end def test_cond_iflipflop assert_parses( s(:if, s(:iflipflop, s(:lvar, :foo), s(:lvar, :bar)), nil, nil), %q{if foo..bar; end}, %q{ ~~~~~~~~ expression (iflipflop) | ~~ operator (iflipflop)}) assert_parses( s(:not, s(:begin, s(:iflipflop, s(:lvar, :foo), s(:lvar, :bar)))), %q{!(foo..bar)}, %q{ ~~~~~~~~ expression (begin.iflipflop) | ~~ operator (begin.iflipflop)}, %w(1.8)) assert_parses( s(:send, s(:begin, s(:iflipflop, s(:lvar, :foo), s(:lvar, :bar))), :'!'), %q{!(foo..bar)}, %q{ ~~~~~~~~ expression (begin.iflipflop) | ~~ operator (begin.iflipflop)}, SINCE_1_9) end def test_cond_eflipflop assert_parses( s(:if, s(:eflipflop, s(:lvar, :foo), s(:lvar, :bar)), nil, nil), %q{if foo...bar; end}, %q{ ~~~~~~~~~ expression (eflipflop) | ~~~ operator (eflipflop)}) assert_parses( s(:not, s(:begin, s(:eflipflop, s(:lvar, :foo), s(:lvar, :bar)))), %q{!(foo...bar)}, %q{ ~~~~~~~~~ expression (begin.eflipflop) | ~~~ operator (begin.eflipflop)}, %w(1.8)) assert_parses( s(:send, s(:begin, s(:eflipflop, s(:lvar, :foo), s(:lvar, :bar))), :'!'), %q{!(foo...bar)}, %q{ ~~~~~~~~~ expression (begin.eflipflop) | ~~~ operator (begin.eflipflop)}, SINCE_1_9) end def test_cond_match_current_line assert_parses( s(:if, s(:match_current_line, s(:regexp, s(:str, 'wat'), s(:regopt))), nil, nil), %q{if /wat/; end}, %q{ ~~~~~ expression (match_current_line)}) assert_parses( s(:not, s(:match_current_line, s(:regexp, s(:str, 'wat'), s(:regopt)))), %q{!/wat/}, %q{ ~~~~~ expression (match_current_line)}, %w(1.8)) assert_parses( s(:send, s(:match_current_line, s(:regexp, s(:str, 'wat'), s(:regopt))), :'!'), %q{!/wat/}, %q{ ~~~~~ expression (match_current_line)}, SINCE_1_9) end # Case matching def test_case_expr assert_parses( s(:case, s(:lvar, :foo), s(:when, s(:str, 'bar'), s(:lvar, :bar)), nil), %q{case foo; when 'bar'; bar; end}, %q{~~~~ keyword | ~~~~ keyword (when) | ~~~ end | ~~~~~~~~~~~~~~~ expression (when) |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_case_expr_else assert_parses( s(:case, s(:lvar, :foo), s(:when, s(:str, 'bar'), s(:lvar, :bar)), s(:lvar, :baz)), %q{case foo; when 'bar'; bar; else baz; end}, %q{~~~~ keyword | ~~~~ keyword (when) | ~~~~ else | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_case_cond assert_parses( s(:case, nil, s(:when, s(:lvar, :foo), s(:str, 'foo')), nil), %q{case; when foo; 'foo'; end}, %q{~~~~ keyword | ~~~~ keyword (when) | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_case_cond_else assert_parses( s(:case, nil, s(:when, s(:lvar, :foo), s(:str, 'foo')), s(:str, 'bar')), %q{case; when foo; 'foo'; else 'bar'; end}, %q{~~~~ keyword | ~~~~ keyword (when) | ~~~~ else | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_case_cond_just_else assert_parses( s(:case, nil, s(:str, 'bar')), %q{case; else 'bar'; end}, %q{~~~~ keyword | ~~~~ else | ~~~ end |~~~~~~~~~~~~~~~~~~~~~ expression}, %w(1.8)) end def test_when_then assert_parses( s(:case, s(:lvar, :foo), s(:when, s(:str, 'bar'), s(:lvar, :bar)), nil), %q{case foo; when 'bar' then bar; end}, %q{ ~~~~ keyword (when) | ~~~~ begin (when) | ~~~~~~~~~~~~~~~~~~~ expression (when)}) end def test_when_multi assert_parses( s(:case, s(:lvar, :foo), s(:when, s(:str, 'bar'), s(:str, 'baz'), s(:lvar, :bar)), nil), %q{case foo; when 'bar', 'baz'; bar; end}) end def test_when_splat assert_parses( s(:case, s(:lvar, :foo), s(:when, s(:int, 1), s(:splat, s(:lvar, :baz)), s(:lvar, :bar)), s(:when, s(:splat, s(:lvar, :foo)), nil), nil), %q{case foo; when 1, *baz; bar; when *foo; end}, %q{ ^ operator (when/1.splat) | ~~~~ expression (when/1.splat) | ^ operator (when/2.splat) | ~~~~ expression (when/2.splat)}) end # Looping def test_while assert_parses( s(:while, s(:lvar, :foo), s(:send, nil, :meth)), %q{while foo do meth end}, %q{~~~~~ keyword | ~~ begin | ~~~ end |~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:while, s(:lvar, :foo), s(:send, nil, :meth)), %q{while foo; meth end}, %q{~~~~~ keyword | ~~~ end |~~~~~~~~~~~~~~~~~~~ expression}) end def test_while_mod assert_parses( s(:while, s(:lvar, :foo), s(:send, nil, :meth)), %q{meth while foo}, %q{ ~~~~~ keyword}) end def test_until assert_parses( s(:until, s(:lvar, :foo), s(:send, nil, :meth)), %q{until foo do meth end}, %q{~~~~~ keyword | ~~ begin | ~~~ end}) assert_parses( s(:until, s(:lvar, :foo), s(:send, nil, :meth)), %q{until foo; meth end}, %q{~~~~~ keyword | ~~~ end}) end def test_until_mod assert_parses( s(:until, s(:lvar, :foo), s(:send, nil, :meth)), %q{meth until foo}, %q{ ~~~~~ keyword}) end def test_while_post assert_parses( s(:while_post, s(:lvar, :foo), s(:kwbegin, s(:send, nil, :meth))), %q{begin meth end while foo}, %q{ ~~~~~ keyword}) end def test_until_post assert_parses( s(:until_post, s(:lvar, :foo), s(:kwbegin, s(:send, nil, :meth))), %q{begin meth end until foo}, %q{ ~~~~~ keyword}) end def test_while_masgn assert_diagnoses( [:error, :masgn_as_condition], %q{while (a, b = foo); end}, %q{ ~~~~~~~~~~ location}, %w(1.8 1.9 2.0 2.1 2.2 2.3 ios mac)) end def test_while_mod_masgn assert_diagnoses( [:error, :masgn_as_condition], %q{foo while (a, b = foo)}, %q{ ~~~~~~~~~~ location}, %w(1.8 1.9 2.0 2.1 2.2 2.3 ios mac)) end def test_for assert_parses( s(:for, s(:lvasgn, :a), s(:lvar, :foo), s(:send, nil, :p, s(:lvar, :a))), %q{for a in foo do p a; end}, %q{~~~ keyword | ~~ in | ~~ begin | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~ expression}) assert_parses( s(:for, s(:lvasgn, :a), s(:lvar, :foo), s(:send, nil, :p, s(:lvar, :a))), %q{for a in foo; p a; end}) end def test_for_mlhs assert_parses( s(:for, s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), s(:lvar, :foo), s(:send, nil, :p, s(:lvar, :a), s(:lvar, :b))), %q{for a, b in foo; p a, b; end}, %q{ ~~~~ expression (mlhs)}) end # Control flow commands def test_break assert_parses( s(:break, s(:begin, s(:lvar, :foo))), %q{break(foo)}, %q{~~~~~ keyword |~~~~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:break, s(:begin, s(:lvar, :foo))), %q{break(foo)}, %q{~~~~~ keyword |~~~~~~~~~~ expression}, %w(1.8)) assert_parses( s(:break, s(:lvar, :foo)), %q{break foo}, %q{~~~~~ keyword |~~~~~~~~~ expression}) assert_parses( s(:break, s(:begin)), %q{break()}, %q{~~~~~ keyword |~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:break), %q{break}, %q{~~~~~ keyword |~~~~~ expression}) end def test_break_block assert_parses( s(:break, s(:block, s(:send, nil, :fun, s(:lvar, :foo)), s(:args), nil)), %q{break fun foo do end}, %q{ ~~~~~~~~~~~~~~ expression (block) |~~~~~~~~~~~~~~~~~~~~ expression}, ALL_VERSIONS - %w(1.8 ios)) end def test_return assert_parses( s(:return, s(:begin, s(:lvar, :foo))), %q{return(foo)}, %q{~~~~~~ keyword |~~~~~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:return, s(:begin, s(:lvar, :foo))), %q{return(foo)}, %q{~~~~~~ keyword |~~~~~~~~~~~ expression}, %w(1.8)) assert_parses( s(:return, s(:lvar, :foo)), %q{return foo}, %q{~~~~~~ keyword |~~~~~~~~~~ expression}) assert_parses( s(:return, s(:begin)), %q{return()}, %q{~~~~~~ keyword |~~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:return), %q{return}, %q{~~~~~~ keyword |~~~~~~ expression}) end def test_return_block assert_parses( s(:return, s(:block, s(:send, nil, :fun, s(:lvar, :foo)), s(:args), nil)), %q{return fun foo do end}, %q{ ~~~~~~~~~~~~~~ expression (block) |~~~~~~~~~~~~~~~~~~~~~ expression}, ALL_VERSIONS - %w(1.8 ios)) end def test_next assert_parses( s(:next, s(:begin, s(:lvar, :foo))), %q{next(foo)}, %q{~~~~ keyword |~~~~~~~~~ expression}, SINCE_1_9) assert_parses( s(:next, s(:begin, s(:lvar, :foo))), %q{next(foo)}, %q{~~~~ keyword |~~~~~~~~~ expression}, %w(1.8)) assert_parses( s(:next, s(:lvar, :foo)), %q{next foo}, %q{~~~~ keyword |~~~~~~~~ expression}) assert_parses( s(:next, s(:begin)), %q{next()}, %q{~~~~ keyword |~~~~~~ expression}, SINCE_1_9) assert_parses( s(:next), %q{next}, %q{~~~~ keyword |~~~~ expression}) end def test_next_block assert_parses( s(:next, s(:block, s(:send, nil, :fun, s(:lvar, :foo)), s(:args), nil)), %q{next fun foo do end}, %q{ ~~~~~~~~~~~~~~ expression (block) |~~~~~~~~~~~~~~~~~~~ expression}, ALL_VERSIONS - %w(1.8 ios)) end def test_redo assert_parses( s(:redo), %q{redo}, %q{~~~~ keyword |~~~~ expression}) end # Exception handling def test_rescue assert_parses( s(:kwbegin, s(:rescue, s(:send, nil, :meth), s(:resbody, nil, nil, s(:lvar, :foo)), nil)), %q{begin; meth; rescue; foo; end}, %q{~~~~~ begin | ~~~~~~ keyword (rescue.resbody) | ~~~~~~~~~~~ expression (rescue.resbody) | ~~~~~~~~~~~~~~~~~ expression (rescue) | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_rescue_else assert_parses( s(:kwbegin, s(:rescue, s(:send, nil, :meth), s(:resbody, nil, nil, s(:lvar, :foo)), s(:lvar, :bar))), %q{begin; meth; rescue; foo; else; bar; end}, %q{ ~~~~ else (rescue) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (rescue)}) end def test_rescue_else_useless assert_parses( s(:kwbegin, s(:begin, s(:int, 2))), %q{begin; else; 2; end}, %q{ ~~~~ begin (begin)}, ALL_VERSIONS - SINCE_2_6) assert_parses( s(:kwbegin, s(:int, 1), s(:begin, s(:int, 2))), %q{begin; 1; else; 2; end}, %q{ ~~~~ begin (begin)}, ALL_VERSIONS - SINCE_2_6) assert_parses( s(:kwbegin, s(:int, 1), s(:int, 2), s(:begin, s(:int, 3))), %q{begin; 1; 2; else; 3; end}, %q{ ~~~~ begin (begin)}, ALL_VERSIONS - SINCE_2_6) assert_diagnoses( [:warning, :useless_else], %q{begin; 1; else; 2; end}, %q{ ~~~~ location}, ALL_VERSIONS - SINCE_2_6) assert_diagnoses( [:error, :useless_else], %q{begin; 1; else; 2; end}, %q{ ~~~~ location}, SINCE_2_6) assert_diagnoses( [:error, :useless_else], %q{begin; 1; else; end}, %q{ ~~~~ location}, SINCE_2_6) end def test_ensure assert_parses( s(:kwbegin, s(:ensure, s(:send, nil, :meth), s(:lvar, :bar))), %q{begin; meth; ensure; bar; end}, %q{~~~~~ begin | ~~~~~~ keyword (ensure) | ~~~~~~~~~~~~~~~~~ expression (ensure) | ~~~ end |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_ensure_empty assert_parses( s(:kwbegin, s(:ensure, nil, nil)), %q{begin ensure end}, %q{~~~~~ begin | ~~~~~~ keyword (ensure) | ~~~~~~ expression (ensure) | ~~~ end |~~~~~~~~~~~~~~~~ expression}) end def test_rescue_ensure assert_parses( s(:kwbegin, s(:ensure, s(:rescue, s(:send, nil, :meth), s(:resbody, nil, nil, s(:lvar, :baz)), nil), s(:lvar, :bar))), %q{begin; meth; rescue; baz; ensure; bar; end}, %q{ ~~~~~~ keyword (ensure) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (ensure) | ~~~~~~ keyword (ensure.rescue.resbody) | ~~~~~~~~~~~~~~~~~ expression (ensure.rescue)}) end def test_rescue_else_ensure assert_parses( s(:kwbegin, s(:ensure, s(:rescue, s(:send, nil, :meth), s(:resbody, nil, nil, s(:lvar, :baz)), s(:lvar, :foo)), s(:lvar, :bar))), %q{begin; meth; rescue; baz; else foo; ensure; bar end}, %q{ ~~~~~~ keyword (ensure) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (ensure) | ~~~~~~ keyword (ensure.rescue.resbody) | ~~~~ else (ensure.rescue) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (ensure.rescue)}) end def test_rescue_mod assert_parses( s(:rescue, s(:send, nil, :meth), s(:resbody, nil, nil, s(:lvar, :bar)), nil), %q{meth rescue bar}, %q{ ~~~~~~ keyword (resbody) | ~~~~~~~~~~ expression (resbody) |~~~~~~~~~~~~~~~ expression}) end def test_rescue_mod_asgn assert_parses( s(:lvasgn, :foo, s(:rescue, s(:send, nil, :meth), s(:resbody, nil, nil, s(:lvar, :bar)), nil)), %q{foo = meth rescue bar}, %q{ ~~~~~~ keyword (rescue.resbody) | ~~~~~~~~~~ expression (rescue.resbody) | ~~~~~~~~~~~~~~~ expression (rescue) |~~~~~~~~~~~~~~~~~~~~~ expression}) end def test_rescue_mod_masgn assert_parses( s(:masgn, s(:mlhs, s(:lvasgn, :foo), s(:lvasgn, :bar)), s(:rescue, s(:send, nil, :meth), s(:resbody, nil, nil, s(:array, s(:int, 1), s(:int, 2))), nil)), %q{foo, bar = meth rescue [1, 2]}, %q{ ~~~~~~ keyword (rescue.resbody) | ~~~~~~~~~~~~~ expression (rescue.resbody) | ~~~~~~~~~~~~~~~~~~ expression (rescue) |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression}, SINCE_2_7) end def test_rescue_mod_op_assign assert_parses( s(:op_asgn, s(:lvasgn, :foo), :+, s(:rescue, s(:send, nil, :meth), s(:resbody, nil, nil, s(:lvar, :bar)), nil)), %q{foo += meth rescue bar}, %q{ ~~~~~~ keyword (rescue.resbody) | ~~~~~~~~~~ expression (rescue.resbody) | ~~~~~~~~~~~~~~~ expression (rescue) |~~~~~~~~~~~~~~~~~~~~~~ expression}, SINCE_1_9) end def test_rescue_without_begin_end assert_parses( s(:block, s(:send, nil, :meth), s(:args), s(:rescue, s(:lvar, :foo), s(:resbody, nil, nil, s(:lvar, :bar)), nil)), %q{meth do; foo; rescue; bar; end}, %q{ ~~~~~~ keyword (rescue.resbody) | ~~~~~~~~~~~ expression (rescue.resbody) | ~~~~~~~~~~~~~~~~ expression (rescue)}, SINCE_2_5) end def test_resbody_list assert_parses( s(:kwbegin, s(:rescue, s(:send, nil, :meth), s(:resbody, s(:array, s(:const, nil, :Exception)), nil, s(:lvar, :bar)), nil)), %q{begin; meth; rescue Exception; bar; end}) end def test_resbody_list_mrhs assert_parses( s(:kwbegin, s(:rescue, s(:send, nil, :meth), s(:resbody, s(:array, s(:const, nil, :Exception), s(:lvar, :foo)), nil, s(:lvar, :bar)), nil)), %q{begin; meth; rescue Exception, foo; bar; end}) end def test_resbody_var assert_parses( s(:kwbegin, s(:rescue, s(:send, nil, :meth), s(:resbody, nil, s(:lvasgn, :ex), s(:lvar, :bar)), nil)), %q{begin; meth; rescue => ex; bar; end}) assert_parses( s(:kwbegin, s(:rescue, s(:send, nil, :meth), s(:resbody, nil, s(:ivasgn, :@ex), s(:lvar, :bar)), nil)), %q{begin; meth; rescue => @ex; bar; end}) end def test_resbody_list_var assert_parses( s(:kwbegin, s(:rescue, s(:send, nil, :meth), s(:resbody, s(:array, s(:lvar, :foo)), s(:lvasgn, :ex), s(:lvar, :bar)), nil)), %q{begin; meth; rescue foo => ex; bar; end}) end def test_retry assert_parses( s(:retry), %q{retry}, %q{~~~~~ keyword |~~~~~ expression}) end # BEGIN and END def test_preexe assert_parses( s(:preexe, s(:int, 1)), %q{BEGIN { 1 }}, %q{~~~~~ keyword | ^ begin | ^ end |~~~~~~~~~~~ expression}) end def test_preexe_invalid assert_diagnoses( [:error, :begin_in_method], %q{def f; BEGIN{}; end}, %q{ ~~~~~ location}, # Yes. *Exclude 1.9*. Sigh. ALL_VERSIONS - %w(1.9 mac ios)) end def test_postexe assert_parses( s(:postexe, s(:int, 1)), %q{END { 1 }}, %q{~~~ keyword | ^ begin | ^ end |~~~~~~~~~ expression}) end # # Miscellanea # def test_kwbegin_compstmt assert_parses( s(:kwbegin, s(:send, nil, :foo!), s(:send, nil, :bar!)), %q{begin foo!; bar! end}) end def test_crlf_line_endings with_versions(ALL_VERSIONS) do |_ver, parser| source_file = Parser::Source::Buffer.new('(comments)') source_file.source = "\r\nfoo" range = lambda do |from, to| Parser::Source::Range.new(source_file, from, to) end ast = parser.parse(source_file) assert_equal s(:lvar, :foo), ast assert_equal range.call(1, 4), ast.loc.expression end end def test_begin_cmdarg assert_parses( s(:send, nil, :p, s(:kwbegin, s(:block, s(:send, s(:int, 1), :times), s(:args), s(:int, 1)))), %q{p begin 1.times do 1 end end}, %{}, SINCE_2_0) end def test_bug_cmdarg assert_parses( s(:send, nil, :meth, s(:begin, s(:block, s(:send, nil, :lambda), s(:args), nil))), %q{meth (lambda do end)}, %q{}, %w(1.8)) assert_parses( s(:send, nil, :assert, s(:send, nil, :dogs)), %q{assert dogs}) assert_parses( s(:send, nil, :assert, s(:hash, s(:pair, s(:sym, :do), s(:true)))), %q{assert do: true}, %q{}, SINCE_1_9) assert_parses( s(:send, nil, :f, s(:hash, s(:pair, s(:sym, :x), s(:block, s(:lambda), s(:args), s(:block, s(:send, nil, :meth), s(:args), nil))))), %q{f x: -> do meth do end end}, %q{}, SINCE_1_9) end def test_file_line_non_literals with_versions(ALL_VERSIONS) do |_ver, parser| parser.builder.emit_file_line_as_literals = false source_file = Parser::Source::Buffer.new('(comments)') source_file.source = "[__FILE__, __LINE__]" ast = parser.parse(source_file) assert_equal s(:array, s(:__FILE__), s(:__LINE__)), ast end end def test_bom assert_parses( s(:int, 1), %Q{\xef\xbb\xbf1}.b, %q{}, %w(1.9 2.0 2.1)) end def test_magic_encoding_comment assert_parses( s(:begin, s(:lvasgn, :"проверка", s(:int, 42)), s(:send, nil, :puts, s(:lvar, :"проверка"))), %Q{# coding:koi8-r \xd0\xd2\xcf\xd7\xc5\xd2\xcb\xc1 = 42 puts \xd0\xd2\xcf\xd7\xc5\xd2\xcb\xc1}.b, %q{}, %w(1.9 2.0 2.1)) end def test_regexp_encoding assert_parses( s(:match_with_lvasgn, s(:regexp, s(:str, "\\xa8"), s(:regopt, :n)), s(:str, "")), %q{/\xa8/n =~ ""}.dup.force_encoding(Encoding::UTF_8), %{}, SINCE_1_9) end # # Error recovery # def test_unknown_percent_str assert_diagnoses( [:error, :unexpected_percent_str, { :type => '%k' }], %q{%k[foo]}, %q{~~ location}) end def test_unterminated_embedded_doc assert_diagnoses( [:fatal, :embedded_document], %Q{=begin\nfoo\nend}, %q{~~~~~~ location}) assert_diagnoses( [:fatal, :embedded_document], %Q{=begin\nfoo\nend\n}, %q{~~~~~~ location}) end def test_codepoint_too_large assert_diagnoses( [:error, :unicode_point_too_large], %q{"\u{120 120000}"}, %q{ ~~~~~~ location}, SINCE_1_9) end def test_on_error assert_diagnoses( [:error, :unexpected_token, { :token => 'tIDENTIFIER' }], %q{def foo(bar baz); end}, %q{ ~~~ location}) end # # Token and comment extraction # def assert_parses_with_comments(ast_pattern, source, comments_pattern) with_versions(ALL_VERSIONS) do |_ver, parser| source_file = Parser::Source::Buffer.new('(comments)') source_file.source = source comments_pattern_here = comments_pattern.map do |(from, to)| range = Parser::Source::Range.new(source_file, from, to) Parser::Source::Comment.new(range) end ast, comments = parser.parse_with_comments(source_file) assert_equal ast_pattern, ast assert_equal comments_pattern_here, comments end end def test_comment_interleaved assert_parses_with_comments( s(:send, s(:int, 1), :+, s(:int, 2)), %Q{1 + # foo\n 2}, [ [4, 9] ]) end def test_comment_single assert_parses_with_comments( s(:send, nil, :puts), %Q{puts # whatever}, [ [5, 15] ]) end def test_tokenize with_versions(ALL_VERSIONS) do |_ver, parser| source_file = Parser::Source::Buffer.new('(tokenize)') source_file.source = "1 + # foo\n 2" range = lambda do |from, to| Parser::Source::Range.new(source_file, from, to) end ast, comments, tokens = parser.tokenize(source_file) assert_equal s(:send, s(:int, 1), :+, s(:int, 2)), ast assert_equal [ Parser::Source::Comment.new(range.call(4, 9)) ], comments assert_equal [ [:tINTEGER, [ 1, range.call(0, 1) ]], [:tPLUS, [ '+', range.call(2, 3) ]], [:tCOMMENT, [ '# foo', range.call(4, 9) ]], [:tINTEGER, [ 2, range.call(11, 12) ]], ], tokens end end def test_tokenize_recover with_versions(ALL_VERSIONS) do |_ver, parser| source_file = Parser::Source::Buffer.new('(tokenize)') source_file.source = "1 + # foo\n " range = lambda do |from, to| Parser::Source::Range.new(source_file, from, to) end ast, comments, tokens = parser.tokenize(source_file, true) assert_nil ast assert_equal [ Parser::Source::Comment.new(range.call(4, 9)) ], comments assert_equal [ [:tINTEGER, [ 1, range.call(0, 1) ]], [:tPLUS, [ '+', range.call(2, 3) ]], [:tCOMMENT, [ '# foo', range.call(4, 9) ]], ], tokens end end # # Bug-specific tests # def test_bug_cmd_string_lookahead assert_parses( s(:block, s(:send, nil, :desc, s(:str, 'foo')), s(:args), nil), %q{desc "foo" do end}) end def test_bug_do_block_in_call_args # [ruby-core:59342] [Bug #9308] assert_parses( s(:send, nil, :bar, s(:def, :foo, s(:args), s(:block, s(:send, s(:self), :each), s(:args), nil))), %q{bar def foo; self.each do end end}, %q{}, SINCE_1_9) end def test_bug_do_block_in_cmdarg # [ruby-core:61950] [Bug #9726] assert_parses( s(:send, nil, :tap, s(:begin, s(:block, s(:send, nil, :proc), s(:args), nil))), %q{tap (proc do end)}, %q{}, ALL_VERSIONS - %w(1.8 mac ios)) end def test_bug_interp_single assert_parses( s(:dstr, s(:begin, s(:int, 1))), %q{"#{1}"}) assert_parses( s(:array, s(:dstr, s(:begin, s(:int, 1)))), %q{%W"#{1}"}) end def test_bug_def_no_paren_eql_begin assert_parses( s(:def, :foo, s(:args), nil), %Q{def foo\n=begin\n=end\nend}) end def test_bug_while_not_parens_do assert_parses( s(:while, s(:send, s(:begin, s(:true)), :"!"), nil), %q{while not (true) do end}, %q{}, SINCE_1_9) end def test_bug_rescue_empty_else assert_parses( s(:kwbegin, s(:rescue, nil, s(:resbody, s(:array, s(:const, nil, :LoadError)), nil, nil), nil)), %q{begin; rescue LoadError; else; end}, %q{ ~~~~ else (rescue) | ~~~~~~~~~~~~~~~~~~~~~~ expression (rescue)}) end def test_bug_def_empty_else assert_parses( s(:def, :foo, s(:args), s(:begin, s(:begin, nil))), %q{def foo; else; end}, %q{}, ALL_VERSIONS - SINCE_2_6) end def test_bug_heredoc_do assert_parses( s(:block, s(:send, nil, :f, s(:dstr)), s(:args), nil), %Q{f <<-TABLE do\nTABLE\nend}) end def test_bug_ascii_8bit_in_literal assert_diagnoses( [:error, :invalid_encoding], %q{".\xc3."}, %q{^^^^^^^^ location}, ALL_VERSIONS) assert_diagnoses( [:error, :invalid_encoding], %q{%W"x .\xc3."}, %q{ ^^^^^^ location}, ALL_VERSIONS) assert_diagnoses( [:error, :invalid_encoding], %q{:".\xc3."}, %q{ ^^^^^^ location}, ALL_VERSIONS) assert_diagnoses( [:error, :invalid_encoding], %q{%I"x .\xc3."}, %q{ ^^^^^^ location}, ALL_VERSIONS - %w(1.8 1.9 ios mac)) assert_parses( s(:int, 0xc3), %q{?\xc3}, %q{}, %w(1.8)) assert_diagnoses( [:error, :invalid_encoding], %q{?\xc3}, %q{^^^^^ location}, SINCE_1_9) assert_parses( s(:str, "проверка"), %q{# coding:utf-8 "\xD0\xBF\xD1\x80\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80\xD0\xBA\xD0\xB0"}, %q{}, SINCE_1_9) end def test_ruby_bug_9669 assert_parses( s(:def, :a, s(:args, s(:kwarg, :b)), s(:return)), %Q{def a b:\nreturn\nend}, %q{}, SINCE_2_1) assert_parses( s(:lvasgn, :o, s(:hash, s(:pair, s(:sym, :a), s(:int, 1)))), %Q{o = {\na:\n1\n}}, %q{}, SINCE_2_1) end def test_ruby_bug_10279 assert_parses( s(:hash, s(:pair, s(:sym, :a), s(:if, s(:true), s(:int, 42), nil))), %q{{a: if true then 42 end}}, %q{}, SINCE_2_1) end def test_ruby_bug_10653 assert_parses( s(:if, s(:true), s(:block, s(:send, s(:int, 1), :tap), s(:args, s(:procarg0, s(:arg, :n))), s(:send, nil, :p, s(:lvar, :n))), s(:int, 0)), %q{true ? 1.tap do |n| p n end : 0}, %q{}, SINCE_1_9) assert_parses( s(:if, s(:true), s(:block, s(:send, s(:int, 1), :tap), s(:args, s(:arg, :n)), s(:send, nil, :p, s(:lvar, :n))), s(:int, 0)), %q{true ? 1.tap do |n| p n end : 0}, %q{}, %w(1.8)) assert_parses( s(:if, s(:false), s(:block, s(:send, nil, :raise), s(:args), nil), s(:block, s(:send, nil, :tap), s(:args), nil)), %q{false ? raise {} : tap {}}, %q{}, ALL_VERSIONS) assert_parses( s(:if, s(:false), s(:block, s(:send, nil, :raise), s(:args), nil), s(:block, s(:send, nil, :tap), s(:args), nil)), %q{false ? raise do end : tap do end}, %q{}, ALL_VERSIONS) end def test_ruby_bug_11107 assert_parses( s(:send, nil, :p, s(:block, s(:lambda), s(:args), s(:block, s(:send, nil, :a), s(:args), nil))), %q{p ->() do a() do end end}, %q{}, SINCE_2_1) # no 1.9 backport end def test_ruby_bug_11380 assert_parses( s(:block, s(:send, nil, :p, s(:block, s(:lambda), s(:args), s(:sym, :hello)), s(:hash, s(:pair, s(:sym, :a), s(:int, 1)))), s(:args), nil), %q{p -> { :hello }, a: 1 do end}, %q{}, SINCE_2_1) # no 1.9 backport end def test_ruby_bug_11873_a [[":e", s(:sym, :e)], ["1", s(:int, 1)], ["1.0", s(:float, 1.0)], ["1.0r", s(:rational, Rational(1, 1))], ["1.0i", s(:complex, Complex(0.0, 1.0))]].each do |code, node| expect_a = \ s(:block, s(:send, nil, :a, s(:block, s(:send, nil, :b), s(:args), s(:send, nil, :c, s(:send, nil, :d))), node), s(:args), nil) assert_parses( expect_a, %Q{a b{c d}, #{code} do end}, %q{}, SINCE_2_4) assert_parses( expect_a, %Q{a b{c(d)}, #{code} do end}, %q{}, SINCE_2_4) expect_b = \ s(:block, s(:send, nil, :a, s(:send, nil, :b, s(:send, nil, :c, s(:send, nil, :d))), node), s(:args), nil) assert_parses( expect_b, %Q{a b(c d), #{code} do end}, %q{}, SINCE_2_4) assert_parses( expect_b, %Q{a b(c(d)), #{code} do end}, %q{}, SINCE_2_4) end end def test_ruby_bug_11873_b assert_parses( s(:block, s(:send, nil, :p, s(:block, s(:send, nil, :p), s(:args), s(:begin, s(:send, nil, :p, s(:send, nil, :p)), s(:send, nil, :p, s(:send, nil, :p)))), s(:send, nil, :tap)), s(:args), nil), %q{p p{p(p);p p}, tap do end}, %q{}, SINCE_2_4) end def test_ruby_bug_11989 assert_parses( s(:send, nil, :p, s(:str, "x\n y\n")), %Q{p <<~"E"\n x\\n y\nE}, %q{}, SINCE_2_3) end def test_ruby_bug_11990 assert_parses( s(:send, nil, :p, s(:dstr, s(:str, "x\n"), s(:str, " y"))), %Q{p <<~E " y"\n x\nE}, %q{}, SINCE_2_3) end def test_ruby_bug_12073 assert_parses( s(:begin, s(:lvasgn, :a, s(:int, 1)), s(:send, nil, :a, s(:hash, s(:pair, s(:sym, :b), s(:int, 1))))), %q{a = 1; a b: 1}, %q{}, SINCE_1_9) assert_parses( s(:def, :foo, s(:args, s(:arg, :raise)), s(:send, nil, :raise, s(:const, s(:const, nil, :A), :B), s(:str, ""))), %q{def foo raise; raise A::B, ''; end}, %q{}, SINCE_1_9) end def test_ruby_bug_12402 assert_parses( s(:lvasgn, :foo, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo = raise(bar) rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:lvasgn, :foo), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo += raise(bar) rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:indexasgn, s(:lvar, :foo), s(:int, 0)), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo[0] += raise(bar) rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :m), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo.m += raise(bar) rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :m), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo::m += raise(bar) rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :C), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo.C += raise(bar) rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:or_asgn, s(:casgn, s(:lvar, :foo), :C), s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo::C ||= raise(bar) rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:lvasgn, :foo, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo = raise bar rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:lvasgn, :foo), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo += raise bar rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:indexasgn, s(:lvar, :foo), s(:int, 0)), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo[0] += raise bar rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :m), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo.m += raise bar rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :m), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo::m += raise bar rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:send, s(:lvar, :foo), :C), :+, s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo.C += raise bar rescue nil}, %q{}, SINCE_2_4) assert_parses( s(:or_asgn, s(:casgn, s(:lvar, :foo), :C), s(:rescue, s(:send, nil, :raise, s(:lvar, :bar)), s(:resbody, nil, nil, s(:nil)), nil)), %q{foo::C ||= raise bar rescue nil}, %q{}, SINCE_2_4) end def test_ruby_bug_12669 assert_parses( s(:lvasgn, :a, s(:lvasgn, :b, s(:send, nil, :raise, s(:sym, :x)))), %q{a = b = raise :x}, %q{}, SINCE_2_0) assert_parses( s(:op_asgn, s(:lvasgn, :a), :+, s(:lvasgn, :b, s(:send, nil, :raise, s(:sym, :x)))), %q{a += b = raise :x}, %q{}, SINCE_2_4) assert_parses( s(:lvasgn, :a, s(:op_asgn, s(:lvasgn, :b), :+, s(:send, nil, :raise, s(:sym, :x)))), %q{a = b += raise :x}, %q{}, SINCE_2_4) assert_parses( s(:op_asgn, s(:lvasgn, :a), :+, s(:op_asgn, s(:lvasgn, :b), :+, s(:send, nil, :raise, s(:sym, :x)))), %q{a += b += raise :x}, %q{}, SINCE_2_4) end def test_ruby_bug_12686 assert_parses( s(:send, nil, :f, s(:begin, s(:rescue, s(:send, nil, :g), s(:resbody, nil, nil, s(:nil)), nil))), %q{f (g rescue nil)}, %q{}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, {:token => 'kRESCUE_MOD'}], %q{f(g rescue nil)}, %q{ ^^^^^^ location}) end def test_ruby_bug_11873 # strings assert_parses( s(:block, s(:send, nil, :a, s(:block, s(:send, nil, :b), s(:args), s(:send, nil, :c, s(:send, nil, :d))), s(:str, "x")), s(:args), nil), %q{a b{c d}, "x" do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:send, nil, :b, s(:send, nil, :c, s(:send, nil, :d))), s(:str, "x")), s(:args), nil), %q{a b(c d), "x" do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:block, s(:send, nil, :b), s(:args), s(:send, nil, :c, s(:send, nil, :d))), s(:str, "x")), s(:args), nil), %q{a b{c(d)}, "x" do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:send, nil, :b, s(:send, nil, :c, s(:send, nil, :d))), s(:str, "x")), s(:args), nil), %q{a b(c(d)), "x" do end}, %q{}, SINCE_2_4) # regexps without options assert_parses( s(:block, s(:send, nil, :a, s(:block, s(:send, nil, :b), s(:args), s(:send, nil, :c, s(:send, nil, :d))), s(:regexp, s(:str, "x"), s(:regopt))), s(:args), nil), %q{a b{c d}, /x/ do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:send, nil, :b, s(:send, nil, :c, s(:send, nil, :d))), s(:regexp, s(:str, "x"), s(:regopt))), s(:args), nil), %q{a b(c d), /x/ do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:block, s(:send, nil, :b), s(:args), s(:send, nil, :c, s(:send, nil, :d))), s(:regexp, s(:str, "x"), s(:regopt))), s(:args), nil), %q{a b{c(d)}, /x/ do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:send, nil, :b, s(:send, nil, :c, s(:send, nil, :d))), s(:regexp, s(:str, "x"), s(:regopt))), s(:args), nil), %q{a b(c(d)), /x/ do end}, %q{}, SINCE_2_4) # regexps with options assert_parses( s(:block, s(:send, nil, :a, s(:block, s(:send, nil, :b), s(:args), s(:send, nil, :c, s(:send, nil, :d))), s(:regexp, s(:str, "x"), s(:regopt, :m))), s(:args), nil), %q{a b{c d}, /x/m do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:send, nil, :b, s(:send, nil, :c, s(:send, nil, :d))), s(:regexp, s(:str, "x"), s(:regopt, :m))), s(:args), nil), %q{a b(c d), /x/m do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:block, s(:send, nil, :b), s(:args), s(:send, nil, :c, s(:send, nil, :d))), s(:regexp, s(:str, "x"), s(:regopt, :m))), s(:args), nil), %q{a b{c(d)}, /x/m do end}, %q{}, SINCE_2_4) assert_parses( s(:block, s(:send, nil, :a, s(:send, nil, :b, s(:send, nil, :c, s(:send, nil, :d))), s(:regexp, s(:str, "x"), s(:regopt, :m))), s(:args), nil), %q{a b(c(d)), /x/m do end}, %q{}, SINCE_2_4) end def test_parser_bug_198 assert_parses( s(:array, s(:regexp, s(:str, "()\\1"), s(:regopt)), s(:str, "#")), %q{[/()\\1/, ?#]}, %q{}, SINCE_1_9) end def test_parser_bug_272 assert_parses( s(:block, s(:send, nil, :a, s(:ivar, :@b)), s(:args, s(:procarg0, s(:arg, :c))), nil), %q{a @b do |c|;end}, %q{}, SINCE_1_9) assert_parses( s(:block, s(:send, nil, :a, s(:ivar, :@b)), s(:args, s(:arg, :c)), nil), %q{a @b do |c|;end}, %q{}, %w(1.8)) end def test_bug_lambda_leakage assert_parses( s(:begin, s(:block, s(:lambda), s(:args, s(:arg, :scope)), nil), s(:send, nil, :scope)), %q{->(scope) {}; scope}, %q{}, SINCE_1_9) end def test_bug_regex_verification assert_parses( s(:regexp, s(:str, "#)"), s(:regopt, :x)), %Q{/#)/x}) end def test_bug_do_block_in_hash_brace assert_parses( s(:send, nil, :p, s(:sym, :foo), s(:hash, s(:pair, s(:sym, :a), s(:block, s(:send, nil, :proc), s(:args), nil)), s(:pair, s(:sym, :b), s(:block, s(:send, nil, :proc), s(:args), nil)))), %q{p :foo, {a: proc do end, b: proc do end}}, %q{}, SINCE_2_3) assert_parses( s(:send, nil, :p, s(:sym, :foo), s(:hash, s(:pair, s(:sym, :a), s(:block, s(:send, nil, :proc), s(:args), nil)), s(:pair, s(:sym, :b), s(:block, s(:send, nil, :proc), s(:args), nil)))), %q{p :foo, {:a => proc do end, b: proc do end}}, %q{}, SINCE_2_3) assert_parses( s(:send, nil, :p, s(:sym, :foo), s(:hash, s(:pair, s(:sym, :a), s(:block, s(:send, nil, :proc), s(:args), nil)), s(:pair, s(:sym, :b), s(:block, s(:send, nil, :proc), s(:args), nil)))), %q{p :foo, {"a": proc do end, b: proc do end}}, %q{}, SINCE_2_3) assert_parses( s(:send, nil, :p, s(:sym, :foo), s(:hash, s(:pair, s(:block, s(:send, nil, :proc), s(:args), nil), s(:block, s(:send, nil, :proc), s(:args), nil)), s(:pair, s(:sym, :b), s(:block, s(:send, nil, :proc), s(:args), nil)))), %q{p :foo, {proc do end => proc do end, b: proc do end}}, %q{}, SINCE_2_3) assert_parses( s(:send, nil, :p, s(:sym, :foo), s(:hash, s(:kwsplat, s(:block, s(:send, nil, :proc), s(:args), nil)), s(:pair, s(:sym, :b), s(:block, s(:send, nil, :proc), s(:args), nil)))), %q{p :foo, {** proc do end, b: proc do end}}, %q{}, SINCE_2_3) end def test_lparenarg_after_lvar__since_25 assert_parses( s(:send, nil, :meth, s(:send, s(:begin, s(:float, -1.3)), :abs)), %q{meth (-1.3).abs}, %q{}, ALL_VERSIONS - SINCE_2_5) assert_parses( s(:send, s(:send, nil, :foo, s(:float, -1.3)), :abs), %q{foo (-1.3).abs}, %q{}, ALL_VERSIONS - SINCE_2_5) assert_parses( s(:send, nil, :meth, s(:send, s(:begin, s(:float, -1.3)), :abs)), %q{meth (-1.3).abs}, %q{}, SINCE_2_5) assert_parses( s(:send, nil, :foo, s(:send, s(:begin, s(:float, -1.3)), :abs)), %q{foo (-1.3).abs}, %q{}, SINCE_2_5) end def test_context_class [ %q{class A;}, %q{class A < B;} ].each do |code| assert_context([:class], code, ALL_VERSIONS) end end def test_context_sclass assert_context( [:sclass], %q{class << foo;}, ALL_VERSIONS) end def test_context_def assert_context( [:def], %q{def m;}, ALL_VERSIONS) end def test_context_defs assert_context( [:defs], %q{def foo.m;}, ALL_VERSIONS) end def test_context_cmd_brace_block [ 'tap foo {', 'foo.tap foo {', 'foo::tap foo {' ].each do |code| assert_context([:block], code, ALL_VERSIONS) end end def test_context_brace_block [ 'tap {', 'foo.tap {', 'foo::tap {', 'tap do', 'foo.tap do', 'foo::tap do' ].each do |code| assert_context([:block], code, ALL_VERSIONS) end end def test_context_do_block [ %q{tap 1 do}, %q{foo.tap do}, %q{foo::tap do} ].each do |code| assert_context([:block], code, ALL_VERSIONS) end end def test_context_lambda [ '->() {', '->() do' ].each do |code| assert_context([:lambda], code, SINCE_1_9) end end def test_context_nested assert_context( [:class, :sclass, :defs, :def, :block], %q{class A; class << foo; def bar.m; def m; tap do}, ALL_VERSIONS) assert_context( [:class, :sclass, :defs, :def, :lambda, :block], %q{class A; class << foo; def bar.m; def m; -> do; tap do}, SINCE_1_9) assert_context( [], %q{ class A class << foo def bar.m def m tap do end end end end end }, ALL_VERSIONS) assert_context( [], %q{ class A class << foo def bar.m def m -> do tap do end end end end end end }, SINCE_1_9) end def test_return_in_class assert_parses( s(:class, s(:const, nil, :A), nil, s(:return)), %q{class A; return; end}, %q{}, ALL_VERSIONS - SINCE_2_5) assert_diagnoses( [:error, :invalid_return, {}], %q{class A; return; end}, %q{ ^^^^^^ location}, SINCE_2_5) [ %q{class << foo; return; end}, %q{def m; return; end}, %q{tap { return }}, %q{class A; class << self; return; end; end}, %q{class A; def m; return; end; end}, ].each do |code| refute_diagnoses(code, ALL_VERSIONS) end [ %q{-> do return end}, %q{class A; -> do return end; end}, ].each do |code| refute_diagnoses(code, SINCE_1_9) end end def test_method_definition_in_while_cond assert_parses( s(:while, s(:def, :foo, s(:args), s(:block, s(:send, nil, :tap), s(:args), nil)), s(:break)), %q{while def foo; tap do end; end; break; end}, %q{}, SINCE_2_5) assert_parses( s(:while, s(:defs, s(:self), :foo, s(:args), s(:block, s(:send, nil, :tap), s(:args), nil)), s(:break)), %q{while def self.foo; tap do end; end; break; end}, %q{}, SINCE_2_5) assert_parses( s(:while, s(:def, :foo, s(:args, s(:optarg, :a, s(:block, s(:send, nil, :tap), s(:args), nil))), nil), s(:break)), %q{while def foo a = tap do end; end; break; end}, %q{}, SINCE_2_5) assert_parses( s(:while, s(:defs, s(:self), :foo, s(:args, s(:optarg, :a, s(:block, s(:send, nil, :tap), s(:args), nil))), nil), s(:break)), %q{while def self.foo a = tap do end; end; break; end}, %q{}, SINCE_2_5) end def test_class_definition_in_while_cond assert_parses( s(:while, s(:class, s(:const, nil, :Foo), nil, s(:block, s(:send, nil, :tap), s(:args), nil)), s(:break)), %q{while class Foo; tap do end; end; break; end}, %q{}, SINCE_2_5) assert_parses( s(:while, s(:class, s(:const, nil, :Foo), nil, s(:lvasgn, :a, s(:block, s(:send, nil, :tap), s(:args), nil))), s(:break)), %q{while class Foo a = tap do end; end; break; end}, %q{}, SINCE_2_5) assert_parses( s(:while, s(:sclass, s(:self), s(:block, s(:send, nil, :tap), s(:args), nil)), s(:break)), %q{while class << self; tap do end; end; break; end}, %q{}, SINCE_2_5) assert_parses( s(:while, s(:sclass, s(:self), s(:lvasgn, :a, s(:block, s(:send, nil, :tap), s(:args), nil))), s(:break)), %q{while class << self; a = tap do end; end; break; end}, %q{}, SINCE_2_5) end def test_rescue_in_lambda_block assert_diagnoses( [:error, :unexpected_token, { :token => 'kRESCUE'}], %q{-> do rescue; end}, %q{ ~~~~~~ location}, SINCE_1_9 - SINCE_2_6) assert_parses( s(:block, s(:lambda), s(:args), s(:rescue, nil, s(:resbody, nil, nil, nil), nil)), %q{-> do rescue; end}, %q{ ~~~~~~ keyword (rescue.resbody)}, SINCE_2_6) assert_diagnoses( [:error, :unexpected_token, { :token => 'kRESCUE'}], %q{-> { rescue; }}, %q{ ~~~~~~ location}, SINCE_1_9) end def test_ruby_bug_13547 assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m "x" {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m "#{'x'}" {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m 1 {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m 1.0 {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m 1r {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m 1i {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m :m {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m :"#{m}" {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m %[] {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m 0..1 {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m 0...1 {}}, %q{ ^ location}, SINCE_2_4) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLCURLY' }], %q{m [] {}}, %q{ ^ location}, SINCE_2_5) assert_parses( s(:block, s(:index, s(:send, nil, :meth)), s(:args), nil), %q{meth[] {}}, %q{}, SINCE_2_5 ) assert_diagnoses_many( [ [:warning, :ambiguous_literal], [:error, :unexpected_token, { :token => 'tLCURLY' }] ], %q{m /foo/ {}}, SINCE_2_4) assert_diagnoses_many( [ [:warning, :ambiguous_literal], [:error, :unexpected_token, { :token => 'tLCURLY' }] ], %q{m /foo/x {}}, SINCE_2_4) end def test_bug_447 assert_parses( s(:block, s(:send, nil, :m, s(:array)), s(:args), nil), %q{m [] do end}, %q{}, ALL_VERSIONS) assert_parses( s(:block, s(:send, nil, :m, s(:array), s(:int, 1)), s(:args), nil), %q{m [], 1 do end}, %q{}, ALL_VERSIONS) end def test_bug_435 assert_parses( s(:dstr, s(:begin, s(:block, s(:lambda), s(:args, s(:arg, :foo)), nil))), %q{"#{-> foo {}}"}, %q{}, SINCE_1_9) end def test_bug_452 assert_parses( s(:begin, s(:send, nil, :td, s(:send, s(:begin, s(:int, 1500)), :toString)), s(:block, s(:send, s(:send, nil, :td), :num), s(:args), nil)), %q{td (1_500).toString(); td.num do; end}, %q{}, ALL_VERSIONS) end def test_bug_466 assert_parses( s(:block, s(:send, nil, :foo, s(:dstr, s(:begin, s(:send, s(:begin, s(:send, s(:int, 1), :+, s(:int, 1))), :to_i)))), s(:args), nil), %q{foo "#{(1+1).to_i}" do; end}, %q{}, ALL_VERSIONS) end def test_bug_473 assert_parses( s(:send, nil, :m, s(:dstr, s(:begin, s(:array)))), %q{m "#{[]}"}, %q{}, ALL_VERSIONS) end def test_bug_480 assert_parses( s(:send, nil, :m, s(:dstr, s(:begin), s(:begin, s(:begin)))), %q{m "#{}#{()}"}, %q{}, ALL_VERSIONS) end def test_bug_481 assert_parses( s(:begin, s(:send, nil, :m, s(:def, :x, s(:args), nil)), s(:block, s(:send, s(:int, 1), :tap), s(:args), nil)), %q{m def x(); end; 1.tap do end}, %q{}, ALL_VERSIONS) end def test_parser_bug_490 assert_parses( s(:def, :m, s(:args), s(:sclass, s(:self), s(:class, s(:const, nil, :C), nil, nil))), %q{def m; class << self; class C; end; end; end}, %q{}, ALL_VERSIONS) assert_parses( s(:def, :m, s(:args), s(:sclass, s(:self), s(:module, s(:const, nil, :M), nil))), %q{def m; class << self; module M; end; end; end}, %q{}, ALL_VERSIONS) assert_parses( s(:def, :m, s(:args), s(:sclass, s(:self), s(:casgn, nil, :A, s(:nil)))), %q{def m; class << self; A = nil; end; end}, %q{}, ALL_VERSIONS) end def test_slash_newline_in_heredocs assert_parses( s(:dstr, s(:str, "1 2\n"), s(:str, "3\n")), %Q{<<~E\n 1 \\\n 2\n 3\nE\n}, %q{}, SINCE_2_3) assert_parses( s(:dstr, s(:str, " 1 2\n"), s(:str, " 3\n")), %Q{<<-E\n 1 \\\n 2\n 3\nE\n}, %q{}, ALL_VERSIONS) end def test_ambiuous_quoted_label_in_ternary_operator assert_parses( s(:if, s(:send, nil, :a), s(:send, s(:send, nil, :b), :&, s(:str, '')), s(:nil)), %q{a ? b & '': nil}, %q{}, ALL_VERSIONS) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLABEL_END' }], %q{a ? b | '': nil}, %q{ ^~ location}, SINCE_2_2) assert_diagnoses( [:error, :unexpected_token, { :token => 'tTILDE' }], %q{a ? b ~ '': nil}, %q{ ^ location}, SINCE_2_2) assert_diagnoses( [:error, :unexpected_token, { :token => 'tBANG' }], %q{a ? b ! '': nil}, %q{ ^ location}, SINCE_2_2) end def test_lbrace_arg_after_command_args assert_parses( s(:block, s(:send, nil, :let, s(:begin, s(:sym, :a))), s(:args), s(:block, s(:send, nil, :m), s(:args), nil)), %q{let (:a) { m do; end }}, %q{}, ALL_VERSIONS) end def test_ruby_bug_14690 assert_parses( s(:block, s(:send, nil, :let, s(:begin)), s(:args), s(:block, s(:send, nil, :m, s(:send, nil, :a)), s(:args), nil)), %q{let () { m(a) do; end }}, %q{}, SINCE_2_0) end def test_parser_bug_507 assert_parses( s(:lvasgn, :m, s(:block, s(:lambda), s(:args, s(:restarg, :args)), nil)), %q{m = -> *args do end}, %q{}, SINCE_1_9) end def test_parser_bug_518 assert_parses( s(:class, s(:const, nil, :A), s(:const, nil, :B), nil), "class A < B\nend", %q{}, ALL_VERSIONS) end def test_parser_bug_525 assert_parses( s(:block, s(:send, nil, :m1, s(:hash, s(:pair, s(:sym, :k), s(:send, nil, :m2)))), s(:args), s(:block, s(:send, nil, :m3), s(:args), nil)), 'm1 :k => m2 do; m3() do end; end', %q{}, ALL_VERSIONS) end def test_parser_slash_slash_n_escaping_in_literals [ ["'", "'", s(:dstr, s(:str, "a\\\n"), s(:str, "b")) ], ["<<-'HERE'\n", "\nHERE", s(:dstr, s(:str, "a\\\n"), s(:str, "b\n"))], ["%q{", "}", s(:dstr, s(:str, "a\\\n"), s(:str, "b")) ], ['"', '"', s(:str, "ab") ], ["<<-\"HERE\"\n", "\nHERE", s(:str, "ab\n") ], ["%{", "}", s(:str, "ab") ], ["%Q{", "}", s(:str, "ab") ], ["%w{", "}", s(:array, s(:str, "a\nb")) ], ["%W{", "}", s(:array, s(:str, "a\nb")) ], ["%i{", "}", s(:array, s(:sym, :"a\nb")) ], ["%I{", "}", s(:array, s(:sym, :"a\nb")) ], [":'", "'", s(:dsym, s(:str, "a\\\n"), s(:str, "b")) ], ["%s{", "}", s(:dsym, s(:str, "a\\\n"), s(:str, "b")) ], [':"', '"', s(:sym, :ab) ], ['/', '/', s(:regexp, s(:str, "ab"), s(:regopt)) ], ['%r{', '}', s(:regexp, s(:str, "ab"), s(:regopt)) ], ['%x{', '}', s(:xstr, s(:str, "ab")) ], ['`', '`', s(:xstr, s(:str, "ab")) ], ["<<-`HERE`\n", "\nHERE", s(:xstr, s(:str, "ab\n")) ], ].each do |literal_s, literal_e, expected| source = literal_s + "a\\\nb" + literal_e assert_parses( expected, source, %q{}, SINCE_2_0) end end def test_unterimated_heredoc_id__27 assert_diagnoses( [:error, :unterminated_heredoc_id], %Q{<<\"EOS\n\nEOS\n}, %q{^ location}, SINCE_2_7) assert_diagnoses( [:error, :unterminated_heredoc_id], %Q{<<\"EOS\n\"\nEOS\n}, %q{^ location}, SINCE_2_7) %W[\r\n \n].each do |nl| assert_diagnoses( [:error, :unterminated_heredoc_id], %Q{<<\"\r\"#{nl}\r#{nl}}, %q{^ location}, SINCE_2_7) end end def test_numbered_args_after_27 assert_parses( s(:numblock, s(:send, nil, :m), 9, s(:send, s(:lvar, :_1), :+, s(:lvar, :_9))), %q{m { _1 + _9 }}, %q{^^^^^^^^^^^^^ expression | ^^ name (send/2.lvar/1) | ^^ expression (send/2.lvar/1) | ^^ name (send/2.lvar/2) | ^^ expression (send/2.lvar/2)}, SINCE_2_7) assert_parses( s(:numblock, s(:send, nil, :m), 9, s(:send, s(:lvar, :_1), :+, s(:lvar, :_9))), %q{m do _1 + _9 end}, %q{^^^^^^^^^^^^^^^^ expression | ^^ name (send/2.lvar/1) | ^^ expression (send/2.lvar/1) | ^^ name (send/2.lvar/2) | ^^ expression (send/2.lvar/2)}, SINCE_2_7) # Lambdas assert_parses( s(:numblock, s(:lambda), 9, s(:send, s(:lvar, :_1), :+, s(:lvar, :_9))), %q{-> { _1 + _9}}, %q{^^^^^^^^^^^^^ expression | ^^ name (send.lvar/1) | ^^ expression (send.lvar/1) | ^^ name (send.lvar/2) | ^^ expression (send.lvar/2)}, SINCE_2_7) assert_parses( s(:numblock, s(:lambda), 9, s(:send, s(:lvar, :_1), :+, s(:lvar, :_9))), %q{-> do _1 + _9 end}, %q{^^^^^^^^^^^^^^^^^ expression | ^^ name (send.lvar/1) | ^^ expression (send.lvar/1) | ^^ name (send.lvar/2) | ^^ expression (send.lvar/2)}, SINCE_2_7) end def test_numbered_and_ordinary_parameters # Blocks assert_diagnoses( [:error, :ordinary_param_defined], %q{m { || _1 } }, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{m { |a| _1 } }, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{m do || _1 end }, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{m do |a, b| _1 end }, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{m { |x = _1| }}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{m { |x: _1| }}, %q{ ^^ location}, SINCE_2_7) # Lambdas assert_diagnoses( [:error, :ordinary_param_defined], %q{->() { _1 } }, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{->(a) { _1 } }, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{->() do _1 end }, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{->(a, b) do _1 end}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{->(x=_1) {}}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{->(x: _1) {}}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], %q{proc {|;a| _1}}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :ordinary_param_defined], "proc {|\n| _1}", %q{ ^^ location}, SINCE_2_7) end def test_numparam_outside_block assert_parses( s(:class, s(:const, nil, :A), nil, s(:send, nil, :_1)), %q{class A; _1; end}, %q{}, SINCE_2_7) assert_parses( s(:module, s(:const, nil, :A), s(:send, nil, :_1)), %q{module A; _1; end}, %q{}, SINCE_2_7) assert_parses( s(:sclass, s(:lvar, :foo), s(:send, nil, :_1)), %q{class << foo; _1; end}, %q{}, SINCE_2_7) assert_parses( s(:defs, s(:self), :m, s(:args), s(:send, nil, :_1)), %q{def self.m; _1; end}, %q{}, SINCE_2_7) assert_parses( s(:send, nil, :_1), %q{_1}, %q{}, SINCE_2_7) end def test_assignment_to_numparams assert_parses( s(:block, s(:send, nil, :proc), s(:args), s(:lvasgn, :_1, s(:nil))), %q{proc {_1 = nil}}, %q{}, SINCE_2_7) assert_diagnoses( [:error, :cant_assign_to_numparam, { :name => '_1' }], %q{proc {_1; _1 = nil}}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :cant_assign_to_numparam, { :name => '_1' }], %q{proc {_1; _1, foo = [nil, nil]}}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :cant_assign_to_numparam, { :name => '_1' }], %q{proc {_9; _1 = nil}}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :cant_assign_to_numparam, { :name => '_9' }], %q{proc {_1; _9 = nil}}, %q{ ^^ location}, SINCE_2_7) refute_diagnoses( %q{proc { _1 = nil; _1}}, SINCE_2_7) end def test_numparams_in_nested_blocks assert_diagnoses( [:error, :numparam_used_in_outer_scope], %q{foo { _1; bar { _2 }; }}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :numparam_used_in_outer_scope], %q{-> { _1; -> { _2 }; }}, %q{ ^^ location}, SINCE_2_7) [ ['class A', 'end'], ['class << foo', 'end'], ['def m', 'end'], ['def self.m', 'end'] ].each do |open_scope, close_scope| refute_diagnoses( "proc { _1; #{open_scope}; proc { _2 }; #{close_scope}; }", SINCE_2_7) refute_diagnoses( "-> { _1; #{open_scope}; -> { _2 }; #{close_scope}; }", SINCE_2_7) end end def test_ruby_bug_15789 assert_parses( s(:send, nil, :m, s(:block, s(:lambda), s(:args, s(:optarg, :a, s(:numblock, s(:lambda), 1, s(:lvar, :_1)))), s(:lvar, :a))), %q{m ->(a = ->{_1}) {a}}, %q{}, SINCE_2_7) assert_parses( s(:send, nil, :m, s(:block, s(:lambda), s(:args, s(:kwoptarg, :a, s(:numblock, s(:lambda), 1, s(:lvar, :_1)))), s(:lvar, :a))), %q{m ->(a: ->{_1}) {a}}, %q{}, SINCE_2_7) end def test_ruby_bug_15839 assert_diagnoses( [:error, :invalid_encoding], %q{# encoding: cp932 <<-TEXT \xe9\x9d\u1234 TEXT }) assert_diagnoses( [:error, :invalid_encoding], %q{ # encoding: cp932 <<-TEXT \xe9\x9d \u1234 TEXT }) assert_diagnoses( [:error, :invalid_encoding], %q{ # encoding: cp932 <<-TEXT \u1234\xe9\x9d TEXT }) assert_diagnoses( [:error, :invalid_encoding], %q{ # encoding: cp932 <<-TEXT \u1234 \xe9\x9d TEXT }) end def test_numparam_as_symbols assert_diagnoses( [:error, :ivar_name, { :name => '@' }], %q{:@}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{:@1}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@' }], %q{:@@}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{:@@1}, %q{ ^^^ location}, SINCE_2_7) end def test_csend_inside_lhs_of_masgn__since_27 assert_diagnoses( [:error, :csend_in_lhs_of_masgn], %q{*a&.x = 0}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :csend_in_lhs_of_masgn], %q{a&.x, = 0}, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :csend_in_lhs_of_masgn], %q{*a&.A = 0}, %q{ ^^ location}, SINCE_2_7) end def test_parser_bug_604 assert_parses( s(:block, s(:send, nil, :m, s(:send, s(:send, nil, :a), :+, s(:send, nil, :b))), s(:args), nil), %q{m a + b do end}, %q{}, ALL_VERSIONS) end def test_comments_before_leading_dot__27 assert_parses( s(:send, s(:send, nil, :a), :foo), %Q{a #\n#\n.foo\n}, %q{}, SINCE_2_7) assert_parses( s(:csend, s(:send, nil, :a), :foo), %Q{a #\n#\n&.foo\n}, %q{}, SINCE_2_7) end def test_comments_before_leading_dot__before_27 assert_diagnoses( [:error, :unexpected_token, { :token => 'tDOT' }], %q{a #!#!.foo!}.gsub('!', "\n"), %q{ ^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tAMPER' }], %q{a #!#!&.foo!}.gsub('!', "\n"), %q{ ^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tDOT' }], %q{a #!#!.:foo!}.gsub('!', "\n"), %q{ ^ location}, ALL_VERSIONS - SINCE_2_7) end def test_circular_argument_reference_error assert_diagnoses( [:error, :circular_argument_reference, { :var_name => 'foo' }], %q{def m(foo = foo) end}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :circular_argument_reference, { :var_name => 'foo' }], %q{def m(foo: foo) end}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :circular_argument_reference, { :var_name => 'foo' }], %q{m { |foo = foo| } }, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :circular_argument_reference, { :var_name => 'foo' }], %q{m { |foo: foo| } }, %q{ ^^^ location}, SINCE_2_7) # Traversing assert_diagnoses( [:error, :circular_argument_reference, { :var_name => 'foo' }], %q{def m(foo = class << foo; end) end}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :circular_argument_reference, { :var_name => 'foo' }], %q{def m(foo = def foo.m; end); end}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :circular_argument_reference, { :var_name => 'foo' }], %q{m { |foo = proc { 1 + foo }| } }, %q{ ^^^ location}, SINCE_2_7) # Valid cases [ 'm { |foo = class A; foo; end| }', 'm { |foo = class << self; foo; end| }', 'm { |foo = def m(foo = bar); foo; end| }', 'm { |foo = def m(bar = foo); foo; end| }', 'm { |foo = def self.m(bar = foo); foo; end| }', 'def m(foo = def m; foo; end) end', 'def m(foo = def self.m; foo; end) end', 'm { |foo = proc { |bar| 1 + foo }| }', 'm { |foo = proc { || 1 + foo }| }' ].each do |code| refute_diagnoses(code, SINCE_2_7) end end def test_forward_args assert_parses( s(:def, :foo, s(:forward_args), s(:send, nil, :bar, s(:forwarded_args))), %q{def foo(...); bar(...); end}, %q{ ~ begin (forward_args) | ~~~~~ expression (forward_args) | ~ end (forward_args) | ~~~ expression (send.forwarded_args)}, SINCE_2_7) assert_parses( s(:def, :foo, s(:forward_args), s(:super, s(:forwarded_args))), %q{def foo(...); super(...); end}, %q{ ~ begin (forward_args) | ~~~~~ expression (forward_args) | ~ end (forward_args) | ~~~ expression (super.forwarded_args)}, SINCE_2_7) assert_parses( s(:def, :foo, s(:forward_args), nil), %q{def foo(...); end}, %q{}, SINCE_2_7) assert_diagnoses( [:error, :block_and_blockarg], %q{def foo(...) bar(...) { }; end}, %q{ ^^^ location | ~ highlights (0)}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tBDOT3' }], %q{foo do |...| end}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tBDOT3' }], %q{foo { |...| }}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tBDOT3' }], %q{def foo(x,y,z); bar(...); end}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tBDOT3' }], %q{def foo(x,y,z); super(...); end}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tDOT3' }], %q{->... {}}, %q{ ^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tBDOT3' }], %q{->(...) {}}, %q{ ^^^ location}, SINCE_2_7) # Here and below the parser asssumes that # it can be a beginningless range, so the error comes after reducing right paren assert_diagnoses( [:error, :unexpected_token, { :token => 'tRPAREN' }], %q{def foo(...); yield(...); end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tRPAREN' }], %q{def foo(...); return(...); end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tRPAREN' }], %q{def foo(...); a = (...); end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tRBRACK' }], %q{def foo(...); [...]; end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tRBRACK' }], %q{def foo(...) bar[...]; end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tRBRACK' }], %q{def foo(...) bar[...] = x; end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tRPAREN' }], %q{def foo(...) defined?(...); end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tDOT3' }], %q{def foo ...; end}, %q{ ^^^ location}, SINCE_2_7) end def test_erange_without_parentheses_at_eol assert_diagnoses( [:warning, :triple_dot_at_eol], %Q{1...\n2}, %q{ ^^^ location}, SINCE_2_7) refute_diagnoses('(1...)', SINCE_2_7) refute_diagnoses("(1...\n)", SINCE_2_7) refute_diagnoses("[1...\n]", SINCE_2_7) refute_diagnoses("{a: 1...\n2}", SINCE_2_7) end def test_embedded_document_with_eof refute_diagnoses("=begin\n""=end", SINCE_2_7) refute_diagnoses("=begin\n""=end\0", SINCE_2_7) refute_diagnoses("=begin\n""=end\C-d", SINCE_2_7) refute_diagnoses("=begin\n""=end\C-z", SINCE_2_7) assert_diagnoses( [:fatal, :embedded_document], "=begin\n", %q{}, SINCE_2_7) assert_diagnoses( [:fatal, :embedded_document], "=begin", %q{}, SINCE_2_7) end def test_interp_digit_var # '#@1' assert_parses( s(:str, '#@1'), %q{ '#@1' }, %q{}, ALL_VERSIONS) assert_parses( s(:str, '#@@1'), %q{ '#@@1' }, %q{}, ALL_VERSIONS) # <<-'HERE' # #@1 # HERE assert_parses( s(:str, '#@1' + "\n"), %q{<<-'HERE'!#@1!HERE}.gsub('!', "\n"), %q{}, ALL_VERSIONS) assert_parses( s(:str, '#@@1' + "\n"), %q{<<-'HERE'!#@@1!HERE}.gsub('!', "\n"), %q{}, ALL_VERSIONS) # %q{#@1} assert_parses( s(:str, '#@1'), %q{ %q{#@1} }, %q{}, ALL_VERSIONS) assert_parses( s(:str, '#@@1'), %q{ %q{#@@1} }, %q{}, ALL_VERSIONS) # "#@1" assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ "#@1" }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ "#@@1" }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:str, '#@1'), %q{ "#@1" }, %q{}, SINCE_2_7) assert_parses( s(:str, '#@@1'), %q{ "#@@1" }, %q{}, SINCE_2_7) # <<-"HERE" # #@1 # HERE assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ <<-"HERE"!#@1!HERE }.gsub('!', "\n"), %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ <<-"HERE"!#@@1!HERE }.gsub('!', "\n"), %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:str, '#@1' + "\n"), %q{<<-"HERE"!#@1!HERE}.gsub('!', "\n"), %q{}, SINCE_2_7) assert_parses( s(:str, '#@@1' + "\n"), %q{<<-"HERE"!#@@1!HERE}.gsub('!', "\n"), %q{}, SINCE_2_7) # %{#@1} assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ %{#@1} }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ %{#@@1} }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:str, '#@1'), %q{ %{#@1} }, %q{}, SINCE_2_7) assert_parses( s(:str, '#@@1'), %q{ %{#@@1} }, %q{}, SINCE_2_7) # %Q{#@1} assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ %Q{#@1} }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ %Q{#@@1} }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:str, '#@1'), %q{ %Q{#@1} }, %q{}, SINCE_2_7) assert_parses( s(:str, '#@@1'), %q{ %Q{#@@1} }, %q{}, SINCE_2_7) # %w[#@1] assert_parses( s(:array, s(:str, '#@1')), %q{ %w[ #@1 ] }, %q{}, ALL_VERSIONS) assert_parses( s(:array, s(:str, '#@@1')), %q{ %w[ #@@1 ] }, %q{}, ALL_VERSIONS) # %W[#@1] assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ %W[#@1] }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ %W[#@@1] }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:array, s(:str, '#@1')), %q{ %W[#@1] }, %q{}, SINCE_2_7) assert_parses( s(:array, s(:str, '#@@1')), %q{ %W[#@@1] }, %q{}, SINCE_2_7) # %i[#@1] assert_parses( s(:array, s(:sym, :'#@1')), %q{ %i[ #@1 ] }, %q{}, SINCE_2_0) assert_parses( s(:array, s(:sym, :'#@@1')), %q{ %i[ #@@1 ] }, %q{}, SINCE_2_0) # %I[#@1] assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ %I[#@1] }, %q{ ^^ location}, SINCE_2_0 - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ %I[#@@1] }, %q{ ^^^ location}, SINCE_2_0 - SINCE_2_7) assert_parses( s(:array, s(:sym, :'#@1')), %q{ %I[#@1] }, %q{}, SINCE_2_7) assert_parses( s(:array, s(:sym, :'#@@1')), %q{ %I[#@@1] }, %q{}, SINCE_2_7) # :'#@1' assert_parses( s(:sym, :'#@1'), %q{ :'#@1' }, %q{}, ALL_VERSIONS) assert_parses( s(:sym, :'#@@1'), %q{ :'#@@1' }, %q{}, ALL_VERSIONS) # %s{#@1} assert_parses( s(:sym, :'#@1'), %q{ %s{#@1} }, %q{}, ALL_VERSIONS) assert_parses( s(:sym, :'#@@1'), %q{ %s{#@@1} }, %q{}, ALL_VERSIONS) # :"#@1" assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ :"#@1" }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ :"#@@1" }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:sym, :'#@1'), %q{ :"#@1" }, %q{}, SINCE_2_7) assert_parses( s(:sym, :'#@@1'), %q{ :"#@@1" }, %q{}, SINCE_2_7) # /#@1/ assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ /#@1/ }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ /#@@1/ }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:regexp, s(:str, '#@1'), s(:regopt)), %q{ /#@1/ }, %q{}, SINCE_2_7) assert_parses( s(:regexp, s(:str, '#@@1'), s(:regopt)), %q{ /#@@1/ }, %q{}, SINCE_2_7) # %r{#@1} assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ %r{#@1} }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ %r{#@@1} }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:regexp, s(:str, '#@1'), s(:regopt)), %q{ %r{#@1} }, %q{}, SINCE_2_7) assert_parses( s(:regexp, s(:str, '#@@1'), s(:regopt)), %q{ %r{#@@1} }, %q{}, SINCE_2_7) # %x{#@1} assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ %x{#@1} }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ %x{#@@1} }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:xstr, s(:str, '#@1')), %q{ %x{#@1} }, %q{}, SINCE_2_7) assert_parses( s(:xstr, s(:str, '#@@1')), %q{ %x{#@@1} }, %q{}, SINCE_2_7) # `#@1` assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ `#@1` }, %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ `#@@1` }, %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:xstr, s(:str, '#@1')), %q{ `#@1` }, %q{}, SINCE_2_7) assert_parses( s(:xstr, s(:str, '#@@1')), %q{ `#@@1` }, %q{}, SINCE_2_7) # <<-`HERE` # #@1 # HERE assert_diagnoses( [:error, :ivar_name, { :name => '@1' }], %q{ <<-`HERE`!#@1!HERE }.gsub('!', "\n"), %q{ ^^ location}, ALL_VERSIONS - SINCE_2_7) assert_diagnoses( [:error, :cvar_name, { :name => '@@1' }], %q{ <<-`HERE`!#@@1!HERE }.gsub('!', "\n"), %q{ ^^^ location}, ALL_VERSIONS - SINCE_2_7) assert_parses( s(:xstr, s(:str, '#@1' + "\n")), %q{<<-`HERE`!#@1!HERE}.gsub('!', "\n"), %q{}, SINCE_2_7) assert_parses( s(:xstr, s(:str, '#@@1' + "\n")), %q{<<-`HERE`!#@@1!HERE}.gsub('!', "\n"), %q{}, SINCE_2_7) end def assert_parses_pattern_match(ast, code, source_maps = '', versions = SINCE_2_7) case_pre = "case foo; " source_maps_offset = case_pre.length source_maps_prefix = ' ' * source_maps_offset source_maps = source_maps .lines .map { |line| source_maps_prefix + line.sub(/^\s*\|/, '') } .join("\n") assert_parses( s(:case_match, s(:lvar, :foo), ast, nil), "#{case_pre}#{code}; end", source_maps, SINCE_2_7 ) end def test_pattern_matching_single_match assert_parses_pattern_match( s(:in_pattern, s(:match_var, :x), nil, s(:lvar, :x)), %q{in x then x}, %q{~~ keyword (in_pattern) |~~~~~~~~~~~ expression (in_pattern) | ~~~~ begin (in_pattern) | ~ expression (in_pattern.match_var) | ~ name (in_pattern.match_var)} ) end def test_pattern_matching_no_body assert_parses_pattern_match( s(:in_pattern, s(:int, 1), nil, nil), %q{in 1} ) end def test_pattern_matching_if_unless_modifiers assert_parses_pattern_match( s(:in_pattern, s(:match_var, :x), s(:if_guard, s(:true)), s(:nil) ), %q{in x if true; nil}, %q{~~ keyword (in_pattern) |~~~~~~~~~~~~~~~~~ expression (in_pattern) | ~ begin (in_pattern) | ~~ keyword (in_pattern.if_guard) | ~~~~~~~ expression (in_pattern.if_guard)} ) assert_parses_pattern_match( s(:in_pattern, s(:match_var, :x), s(:unless_guard, s(:true)), s(:nil) ), %q{in x unless true; nil}, %q{~~ keyword (in_pattern) |~~~~~~~~~~~~~~~~~~~~~ expression (in_pattern) | ~ begin (in_pattern) | ~~~~~~ keyword (in_pattern.unless_guard) | ~~~~~~~~~~~ expression (in_pattern.unless_guard)} ) end def test_pattern_matching_pin_variable assert_parses_pattern_match( s(:in_pattern, s(:pin, s(:lvar, :foo)), nil, s(:nil)), %q{in ^foo then nil}, %q{ ~ selector (in_pattern.pin) | ~~~~ expression (in_pattern.pin) | ~~~ name (in_pattern.pin.lvar)} ) end def test_pattern_matching_implicit_array_match assert_parses_pattern_match( s(:in_pattern, s(:array_pattern_with_tail, s(:match_var, :x)), nil, s(:nil)), %q{in x, then nil}, %q{ ~ expression (in_pattern.array_pattern_with_tail)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_rest, s(:match_var, :x))), nil, s(:nil)), %q{in *x then nil}, %q{ ~~ expression (in_pattern.array_pattern) | ~ operator (in_pattern.array_pattern.match_rest) | ~ name (in_pattern.array_pattern.match_rest.match_var)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_rest)), nil, s(:nil)), %q{in * then nil}, %q{ ~ expression (in_pattern.array_pattern) | ~ operator (in_pattern.array_pattern.match_rest)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_var, :x), s(:match_var, :y)), nil, s(:nil)), %q{in x, y then nil}, %q{ ~~~~ expression (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern_with_tail, s(:match_var, :x), s(:match_var, :y)), nil, s(:nil)), %q{in x, y, then nil}, %q{ ~~~~ expression (in_pattern.array_pattern_with_tail)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_var, :x), s(:match_rest, s(:match_var, :y)), s(:match_var, :z)), nil, s(:nil)), %q{in x, *y, z then nil}, %q{ ~~~~~~~~ expression (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_rest, s(:match_var, :x)), s(:match_var, :y), s(:match_var, :z)), nil, s(:nil)), %q{in *x, y, z then nil}, %q{ ~~~~~~~~ expression (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:int, 1), s(:str, 'a'), s(:array_pattern), s(:hash_pattern)), nil, s(:nil)), %q{in 1, "a", [], {} then nil}, %q{ ~~~~~~~~~~~~~~ expression (in_pattern.array_pattern)} ) end def test_pattern_matching_explicit_array_match assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_var, :x)), nil, s(:nil)), %q{in [x] then nil}, %q{ ~~~ expression (in_pattern.array_pattern) | ~ begin (in_pattern.array_pattern) | ~ end (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern_with_tail, s(:match_var, :x)), nil, s(:nil)), %q{in [x,] then nil}, %q{ ~~~~ expression (in_pattern.array_pattern_with_tail) | ~ begin (in_pattern.array_pattern_with_tail) | ~ end (in_pattern.array_pattern_with_tail)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_var, :x), s(:match_var, :y)), nil, s(:true)), %q{in [x, y] then true}, %q{ ~~~~~~ expression (in_pattern.array_pattern) | ~ begin (in_pattern.array_pattern) | ~ end (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern_with_tail, s(:match_var, :x), s(:match_var, :y)), nil, s(:true)), %q{in [x, y,] then true}, %q{ ~~~~~~~ expression (in_pattern.array_pattern_with_tail) | ~ begin (in_pattern.array_pattern_with_tail) | ~ end (in_pattern.array_pattern_with_tail)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_var, :x), s(:match_var, :y), s(:match_rest)), nil, s(:true)), %q{in [x, y, *] then true}, %q{ ~~~~~~~~~ expression (in_pattern.array_pattern) | ~ begin (in_pattern.array_pattern) | ~ end (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_var, :x), s(:match_var, :y), s(:match_rest, s(:match_var, :z))), nil, s(:true)), %q{in [x, y, *z] then true}, %q{ ~~~~~~~~~~ expression (in_pattern.array_pattern) | ~ begin (in_pattern.array_pattern) | ~ end (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_var, :x), s(:match_rest, s(:match_var, :y)), s(:match_var, :z)), nil, s(:true)), %q{in [x, *y, z] then true}, %q{ ~~~~~~~~~~ expression (in_pattern.array_pattern) | ~ begin (in_pattern.array_pattern) | ~ end (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_var, :x), s(:match_rest), s(:match_var, :y)), nil, s(:true)), %q{in [x, *, y] then true}, %q{ ~~~~~~~~~ expression (in_pattern.array_pattern) | ~ begin (in_pattern.array_pattern) | ~ end (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_rest, s(:match_var, :x)), s(:match_var, :y)), nil, s(:true)), %q{in [*x, y] then true}, %q{ ~~~~~~~ expression (in_pattern.array_pattern) | ~ begin (in_pattern.array_pattern) | ~ end (in_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:array_pattern, s(:match_rest), s(:match_var, :x)), nil, s(:true)), %q{in [*, x] then true}, %q{ ~~~~~~ expression (in_pattern.array_pattern) | ~ begin (in_pattern.array_pattern) | ~ end (in_pattern.array_pattern)} ) end def test_pattern_matching_hash assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern), nil, s(:true)), %q{in {} then true}, %q{ ~~ expression (in_pattern.hash_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:pair, s(:sym, :a), s(:int, 1))), nil, s(:true)), %q{in a: 1 then true}, %q{ ~~~~ expression (in_pattern.hash_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:pair, s(:sym, :a), s(:int, 1))), nil, s(:true)), %q{in { a: 1 } then true}, %q{ ~~~~~~~~ expression (in_pattern.hash_pattern) | ~ begin (in_pattern.hash_pattern) | ~ end (in_pattern.hash_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_var, :a)), nil, s(:true)), %q{in a: then true}, %q{ ~~ expression (in_pattern.hash_pattern) | ~ name (in_pattern.hash_pattern.match_var) | ~~ expression (in_pattern.hash_pattern.match_var)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_rest, s(:match_var, :a))), nil, s(:true)), %q{in **a then true}, %q{ ~~~ expression (in_pattern.hash_pattern) | ~~~ expression (in_pattern.hash_pattern.match_rest) | ~~ operator (in_pattern.hash_pattern.match_rest) | ~ expression (in_pattern.hash_pattern.match_rest.match_var) | ~ name (in_pattern.hash_pattern.match_rest.match_var)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_rest)), nil, s(:true)), %q{in ** then true}, %q{ ~~ expression (in_pattern.hash_pattern) | ~~ expression (in_pattern.hash_pattern.match_rest) | ~~ operator (in_pattern.hash_pattern.match_rest)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:pair, s(:sym, :a), s(:int, 1)), s(:pair, s(:sym, :b), s(:int, 2))), nil, s(:true)), %q{in a: 1, b: 2 then true}, %q{ ~~~~~~~~~~ expression (in_pattern.hash_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_var, :a), s(:match_var, :b)), nil, s(:true)), %q{in a:, b: then true}, %q{ ~~~~~~ expression (in_pattern.hash_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:pair, s(:sym, :a), s(:int, 1)), s(:match_var, :_a), s(:match_rest)), nil, s(:true)), %q{in a: 1, _a:, ** then true}, %q{ ~~~~~~~~~~~~~ expression (in_pattern.hash_pattern)} ) end def test_pattern_matching_hash_with_string_keys # Match + assign assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_var, :a)), nil, s(:true)), %q{in "a": then true}, %q{ ~~~~ expression (in_pattern.hash_pattern.match_var) | ~ name (in_pattern.hash_pattern.match_var)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_var, :a)), nil, s(:true)), %q{in "#{ 'a' }": then true}, %q{ ~~~~~~~~~~~ expression (in_pattern.hash_pattern.match_var) | ~ name (in_pattern.hash_pattern.match_var)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_var, :a)), nil, s(:true)), %q{in "#{ %q{a} }": then true}, %q{ ~~~~~~~~~~~~~ expression (in_pattern.hash_pattern.match_var) | ~ name (in_pattern.hash_pattern.match_var)} ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_var, :a)), nil, s(:true)), %q{in "#{ %Q{a} }": then true}, %q{ ~~~~~~~~~~~~~ expression (in_pattern.hash_pattern.match_var) | ~ name (in_pattern.hash_pattern.match_var)} ) # Only match assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:pair, s(:sym, :a), s(:int, 1))), nil, s(:true)), %q{in "a": 1 then true}, ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:pair, s(:dsym, s(:begin, s(:str, "a"))), s(:int, 1))), nil, s(:true)), %q{in "#{ 'a' }": 1 then true}, ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:pair, s(:dsym, s(:begin, s(:str, "a"))), s(:int, 1))), nil, s(:true)), %q{in "#{ %q{a} }": 1 then true}, ) assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:pair, s(:dsym, s(:begin, s(:str, "a"))), s(:int, 1))), nil, s(:true)), %q{in "#{ %Q{a} }": 1 then true}, ) end def test_pattern_matching_hash_with_heredoc_keys # Ruby <3, the following case is acceptable by the MRI's grammar, # so it has to be reducable by parser. # We have a code for that in the builder.rb that reject it via # diagnostic error because of the wrong lvar name assert_diagnoses( [:error, :lvar_name, { name: "a\n" }], %Q{case nil; in "\#{ <<-HERE }":;\na\nHERE\nelse\nend}, %q{ ~~~~~~~ location}, SINCE_2_7 ) end def test_pattern_matching_keyword_variable assert_parses_pattern_match( s(:in_pattern, s(:self), nil, s(:true)), %q{in self then true} ) end def test_pattern_matching_lambda assert_parses_pattern_match( s(:in_pattern, s(:block, s(:lambda), s(:args), s(:int, 42)), nil, s(:true)), %q{in ->{ 42 } then true} ) end def test_pattern_matching_ranges assert_parses_pattern_match( s(:in_pattern, s(:irange, s(:int, 1), s(:int, 2)), nil, s(:true)), %q{in 1..2 then true} ) assert_parses_pattern_match( s(:in_pattern, s(:irange, s(:int, 1), nil), nil, s(:true)), %q{in 1.. then true} ) assert_parses_pattern_match( s(:in_pattern, s(:irange, nil, s(:int, 2)), nil, s(:true)), %q{in ..2 then true} ) assert_parses_pattern_match( s(:in_pattern, s(:erange, s(:int, 1), s(:int, 2)), nil, s(:true)), %q{in 1...2 then true} ) assert_parses_pattern_match( s(:in_pattern, s(:erange, s(:int, 1), nil), nil, s(:true)), %q{in 1... then true} ) assert_parses_pattern_match( s(:in_pattern, s(:erange, nil, s(:int, 2)), nil, s(:true)), %q{in ...2 then true} ) end def test_pattern_matching_expr_in_paren assert_parses_pattern_match( s(:in_pattern, s(:begin, s(:int, 1)), nil, s(:true)), %q{in (1) then true}, %q{ ~~~ expression (in_pattern.begin) | ~ begin (in_pattern.begin) | ~ end (in_pattern.begin)} ) end def test_pattern_matching_constants assert_parses_pattern_match( s(:in_pattern, s(:const, nil, :A), nil, s(:true)), %q{in A then true}, %q{ ~ expression (in_pattern.const) | ~ name (in_pattern.const)} ) assert_parses_pattern_match( s(:in_pattern, s(:const, s(:const, nil, :A), :B), nil, s(:true)), %q{in A::B then true}, %q{ ~~~~ expression (in_pattern.const) | ~~ double_colon (in_pattern.const) | ~ name (in_pattern.const)} ) assert_parses_pattern_match( s(:in_pattern, s(:const, s(:cbase), :A), nil, s(:true)), %q{in ::A then true}, %q{ ~~~ expression (in_pattern.const) | ~~ double_colon (in_pattern.const) | ~ name (in_pattern.const)} ) end def test_pattern_matching_const_pattern assert_parses_pattern_match( s(:in_pattern, s(:const_pattern, s(:const, nil, :A), s(:array_pattern, s(:int, 1), s(:int, 2))), nil, s(:true)), %q{in A(1, 2) then true}, %q{ ~~~~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) | ~~~~ expression (in_pattern.const_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:const_pattern, s(:const, nil, :A), s(:hash_pattern, s(:match_var, :x))), nil, s(:true)), %q{in A(x:) then true}, %q{ ~~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) | ~~ expression (in_pattern.const_pattern.hash_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:const_pattern, s(:const, nil, :A), nil), nil, s(:true)), %q{in A() then true}, %q{ ~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:const_pattern, s(:const, nil, :A), s(:array_pattern, s(:int, 1), s(:int, 2))), nil, s(:true)), %q{in A[1, 2] then true}, %q{ ~~~~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) | ~~~~ expression (in_pattern.const_pattern.array_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:const_pattern, s(:const, nil, :A), s(:hash_pattern, s(:match_var, :x))), nil, s(:true)), %q{in A[x:] then true}, %q{ ~~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) | ~~ expression (in_pattern.const_pattern.hash_pattern)} ) assert_parses_pattern_match( s(:in_pattern, s(:const_pattern, s(:const, nil, :A), nil), nil, s(:true)), %q{in A[] then true}, %q{ ~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern)} ) end def test_pattern_matching_match_alt assert_parses_pattern_match( s(:in_pattern, s(:match_alt, s(:int, 1), s(:int, 2)), nil, s(:true)), %q{in 1 | 2 then true}, %q{ ~~~~~ expression (in_pattern.match_alt) | ~ operator (in_pattern.match_alt)} ) end def test_pattern_matching_match_as assert_parses_pattern_match( s(:in_pattern, s(:match_as, s(:int, 1), s(:match_var, :a)), nil, s(:true)), %q{in 1 => a then true}, %q{ ~~~~~~ expression (in_pattern.match_as) | ~~ operator (in_pattern.match_as)} ) end def test_pattern_matching_else assert_parses( s(:case_match, s(:int, 1), s(:in_pattern, s(:int, 2), nil, s(:int, 3)), s(:int, 4)), %q{case 1; in 2; 3; else; 4; end}, %q{ ~~~~ else}, SINCE_2_7 ) end def assert_pattern_matching_defines_local_variables(match_code, lvar_names, versions = SINCE_2_7) code = "case 1; #{match_code}; then [#{lvar_names.join(', ')}]; end" with_versions(versions) do |version, parser| source_file = Parser::Source::Buffer.new('(assert_context)') source_file.source = code lvar_names.each do |lvar_name| refute parser.static_env.declared?(lvar_name), "(#{version}) local variable #{lvar_name.to_s.inspect} has to be undefined before asserting" end before = parser.static_env.instance_variable_get(:@variables).to_a begin parsed_ast = parser.parse(source_file) rescue Parser::SyntaxError => exc backtrace = exc.backtrace Exception.instance_method(:initialize).bind(exc). call("(#{version}) #{exc.message}") exc.set_backtrace(backtrace) raise end lvar_names.each do |lvar_name| assert parser.static_env.declared?(lvar_name), "(#{version}) expected local variable #{lvar_name.to_s.inspect} to be defined after parsing" end after = parser.static_env.instance_variable_get(:@variables).to_a extra = after - before - lvar_names assert extra.empty?, "(#{version}) expected only #{lvar_names.inspect} " \ "to be defined during parsing, but also got #{extra.inspect}" end end def test_pattern_matching_creates_locals assert_pattern_matching_defines_local_variables( %q{in a, *b, c}, [:a, :b, :c] ) assert_pattern_matching_defines_local_variables( %q{in d | e | f}, [:d, :e, :f] ) assert_pattern_matching_defines_local_variables( %q{in { g:, **h }}, [:g, :h] ) assert_pattern_matching_defines_local_variables( %q{in A(i, *j, k)}, [:i, :j, :k] ) assert_pattern_matching_defines_local_variables( %q{in 1 => l}, [:l] ) assert_pattern_matching_defines_local_variables( %q{in "m":}, [:m] ) end def test_pattern_matching__FILE__LINE_literals assert_parses( s(:case_match, s(:array, s(:str, "(assert_parses)"), s(:send, s(:int, 1), :+, s(:int, 1)), s(:__ENCODING__)), s(:in_pattern, s(:array_pattern, s(:str, "(assert_parses)"), s(:int, 2), s(:__ENCODING__)), nil, nil), nil), <<-RUBY, case [__FILE__, __LINE__ + 1, __ENCODING__] in [__FILE__, __LINE__, __ENCODING__] end RUBY %q{}, SINCE_2_7) end def test_pattern_matching_nil_pattern assert_parses_pattern_match( s(:in_pattern, s(:hash_pattern, s(:match_nil_pattern)), nil, s(:true)), %q{in **nil then true}, %q{ ~~~~~ expression (in_pattern.hash_pattern.match_nil_pattern) | ~~~ name (in_pattern.hash_pattern.match_nil_pattern)} ) end def test_pattern_matching_single_line assert_parses( s(:begin, s(:in_match, s(:int, 1), s(:array_pattern, s(:match_var, :a))), s(:lvar, :a)), %q{1 in [a]; a}, %q{~~~~~~~~ expression (in_match) | ~~ operator (in_match)}, SINCE_2_7) end def test_ruby_bug_pattern_matching_restore_in_kwarg_flag refute_diagnoses( "p(({} in {a:}), a:\n 1)", SINCE_2_7) end def test_pattern_matching_duplicate_variable_name assert_diagnoses( [:error, :duplicate_variable_name, { :name => 'a' }], %q{case 0; in a, a; end}, %q{ ^ location}, SINCE_2_7) refute_diagnoses( %q{case [0, 1, 2, 3]; in _, _, _a, _a; end}, SINCE_2_7) assert_diagnoses( [:error, :duplicate_variable_name, { :name => 'a' }], %q{case 0; in a, {a:}; end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :duplicate_variable_name, { :name => 'a' }], %q{case 0; in a, {"a":}; end}, %q{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :duplicate_variable_name, { :name => 'a' }], %q{0 in [a, a]}, %q{ ^ location}, SINCE_2_7) end def test_pattern_matching_duplicate_hash_keys assert_diagnoses( [:error, :duplicate_pattern_key, { :name => 'a' }], %q{ case 0; in a: 1, a: 2; end }, %q{ ^^ location}, SINCE_2_7) assert_diagnoses( [:error, :duplicate_pattern_key, { :name => 'a' }], %q{ case 0; in a: 1, "a": 2; end }, %q{ ^^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :duplicate_pattern_key, { :name => 'a' }], %q{ case 0; in "a": 1, "a": 2; end }, %q{ ^^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :duplicate_pattern_key, { :name => "a\0" }], %q{ case 0; in "a\x0":a1, "a\0":a2; end }, %q{ ^^^^^^ location}, SINCE_2_7) assert_diagnoses( [:error, :duplicate_pattern_key, { :name => "abc" }], %q{ case 0; in "abc":a1, "a#{"b"}c":a2; end }, %q{ ^^^^^^^^^^^ location}, SINCE_2_7) end def test_pattern_matching_required_parentheses_for_in_match assert_diagnoses( [:error, :unexpected_token, { :token => 'tCOMMA' }], %{1 in a, b}, %{ ^ location}, SINCE_2_7) assert_diagnoses( [:error, :unexpected_token, { :token => 'tLABEL' }], %{1 in a:}, %{ ^^ location}, SINCE_2_7) end def test_parser_bug_645 assert_parses( s(:block, s(:lambda), s(:args, s(:optarg, :arg, s(:hash))), nil), '-> (arg={}) {}', %{}, SINCE_1_9) end end parser-2.7.0.2/test/test_lexer.rb0000644000004100000410000032045613617025313016701 0ustar www-datawww-data# encoding: ascii-8bit # frozen_string_literal: true require 'helper' require 'complex' class TestLexer < Minitest::Test def setup_lexer(version) @lex = Parser::Lexer.new(version) @lex.comments = [] @lex.diagnostics = Parser::Diagnostic::Engine.new @lex.diagnostics.all_errors_are_fatal = true # @lex.diagnostics.consumer = lambda { |diag| $stderr.puts "", diag.render } end def setup setup_lexer 18 end # # Tools # def utf(str) str.dup.force_encoding(Encoding::UTF_8) end # # Additional matchers # def refute_scanned(s, *args) assert_raises Parser::SyntaxError do assert_scanned(s, *args) end end def assert_escape(expected, input) source_buffer = Parser::Source::Buffer.new('(assert_escape)') source_buffer.source = "\"\\#{input}\"".encode(input.encoding) @lex.reset @lex.source_buffer = source_buffer lex_token, (lex_value, *) = @lex.advance lex_value.force_encoding(Encoding::BINARY) assert_equal [:tSTRING, expected], [lex_token, lex_value], source_buffer.source end def refute_escape(input) err = assert_raises Parser::SyntaxError do @lex.state = :expr_beg assert_scanned "%Q[\\#{input}]" end assert_equal :fatal, err.diagnostic.level end def assert_lex_fname(name, type, range) begin_pos, end_pos = range assert_scanned("def #{name} ", :kDEF, 'def', [0, 3], type, name, [begin_pos + 4, end_pos + 4]) assert_equal :expr_endfn, @lex.state end def assert_scanned(input, *args) source_buffer = Parser::Source::Buffer.new('(assert_scanned)') source_buffer.source = input @lex.reset(false) @lex.source_buffer = source_buffer until args.empty? do token, value, (begin_pos, end_pos) = args.shift(3) lex_token, (lex_value, lex_range) = @lex.advance assert lex_token, 'no more tokens' assert_operator [lex_token, lex_value], :eql?, [token, value], input assert_equal begin_pos, lex_range.begin_pos assert_equal end_pos, lex_range.end_pos end lex_token, (lex_value, *) = @lex.advance refute lex_token, "must be empty, but had #{[lex_token, lex_value].inspect}" end # # Tests # def test_read_escape assert_escape "\\", "\\" assert_escape "\n", "n" assert_escape "\t", "t" assert_escape "\r", "r" assert_escape "\f", "f" assert_escape "\13", "v" assert_escape "\0", "0" assert_escape "\07", "a" assert_escape "\007", "a" assert_escape "\033", "e" assert_escape "\377", "377" assert_escape "\377", "xff" assert_escape "\010", "b" assert_escape " ", "s" assert_escape "q", "q" # plain vanilla escape end def test_read_escape_c assert_escape "\030", "C-x" assert_escape "\030", "cx" assert_escape "\230", 'C-\M-x' assert_escape "\230", 'c\M-x' assert_escape "\177", "C-?" assert_escape "\177", "c?" assert_escape "\r", "cM" end def test_read_escape_m assert_escape "\370", "M-x" assert_escape "\230", 'M-\C-x' assert_escape "\230", 'M-\cx' end def test_read_escape_errors refute_escape "" refute_escape "M" refute_escape "M-" refute_escape "Mx" refute_escape "Cx" refute_escape "C" refute_escape "C-" refute_escape "c" refute_escape "x" end def test_read_escape_unicode__19 assert_escape "\x09", 'u{9}' assert_escape "\x31", 'u{31}' assert_escape "\x09\x01", 'u{9 1}' assert_escape "\xc4\xa3", utf('u0123') assert_escape "\xc4\xa3\xc3\xb0\xeb\x84\xa3", utf('u{123 f0 B123}') end def test_read_escape_unicode_bad__19 refute_escape 'u123' refute_escape 'u{}' refute_escape 'u{123 f0h}' refute_escape 'u{123 f0' end def test_read_escape_whitespaces__27 setup_lexer 27 [ *(0..8), *(14..31) ].each do |code| @lex.reset refute_scanned "\"\\C-" + code.chr + "\"" @lex.reset refute_scanned "\"\\M-" + code.chr + "\"" @lex.reset refute_scanned "\"\\C-\\M-" + code.chr + "\"" @lex.reset refute_scanned "\"\\M-\\C-" + code.chr + "\"" end end def test_ambiguous_uminus assert_scanned("m -3", :tIDENTIFIER, "m", [0, 1], :tUNARY_NUM, "-", [2, 3], :tINTEGER, 3, [3, 4]) end def test_ambiguous_uplus assert_scanned("m +3", :tIDENTIFIER, "m", [0, 1], :tUNARY_NUM, "+", [2, 3], :tINTEGER, 3, [3, 4]) end def test_and assert_scanned "&", :tAMPER, "&", [0, 1] end def test_and2 @lex.state = :expr_end assert_scanned "&&", :tANDOP, "&&", [0, 2] end def test_and2_equals @lex.state = :expr_end assert_scanned "&&=", :tOP_ASGN, "&&", [0, 3] end def test_and_arg @lex.state = :expr_arg assert_scanned(" &y", :tAMPER, "&", [1, 2], :tIDENTIFIER, "y", [2, 3]) end def test_and_equals @lex.state = :expr_end assert_scanned "&=", :tOP_ASGN, "&", [0, 2] end def test_and_expr @lex.state = :expr_arg assert_scanned("x & y", :tIDENTIFIER, "x", [0, 1], :tAMPER2, "&", [2, 3], :tIDENTIFIER, "y", [4, 5]) end def test_and_meth assert_lex_fname "&", :tAMPER2, [0, 1] end def test_and_dot_arg @lex.state = :expr_arg assert_scanned "&.", :tANDDOT, "&.", [0, 2] end def test_and_dot_cmdarg @lex.state = :expr_cmdarg assert_scanned "&.", :tANDDOT, "&.", [0, 2] end def test_assoc assert_scanned "=>", :tASSOC, "=>", [0, 2] end def test_label__18 assert_scanned("{a:b", :tLBRACE, "{", [0, 1], :tIDENTIFIER, "a", [1, 2], :tSYMBOL, "b", [2, 4]) end def test_label_in_params__18 assert_scanned("foo(a:b", :tIDENTIFIER, "foo", [0, 3], :tLPAREN2, "(", [3, 4], :tIDENTIFIER, "a", [4, 5], :tSYMBOL, "b", [5, 7]) end def test_label__19 setup_lexer 19 assert_scanned("{a:b", :tLBRACE, "{", [0, 1], :tLABEL, "a", [1, 3], :tIDENTIFIER, "b", [3, 4]) end def test_label_in_params__19 setup_lexer 19 assert_scanned("foo(a:b", :tIDENTIFIER, "foo", [0, 3], :tLPAREN2, "(", [3, 4], :tLABEL, "a", [4, 6], :tIDENTIFIER, "b", [6, 7]) end def test_label_fid__19 setup_lexer 19 assert_scanned("{a?:true", :tLBRACE, '{', [0, 1], :tLABEL, 'a?', [1, 4], :kTRUE, 'true', [4, 8]) end def test_label__22 setup_lexer 22 assert_scanned("{'a':", :tLBRACE, '{', [0, 1], :tSTRING_BEG, "'", [1, 2], :tSTRING_CONTENT, 'a', [2, 3], :tLABEL_END, "'", [3, 5]) end def test_label_nested__22 setup_lexer 22 assert_scanned("{'a\":':", :tLBRACE, '{', [0, 1], :tSTRING_BEG, "'", [1, 2], :tSTRING_CONTENT, 'a":', [2, 5], :tLABEL_END, "'", [5, 7]) end def test_label_colon2__22 setup_lexer 22 assert_scanned("{'a'::", :tLBRACE, '{', [0, 1], :tSTRING, "a", [1, 4], :tCOLON2, '::', [4, 6]) end def test_pct_string_colon__22 setup_lexer 22 assert_scanned("{%'a':", :tLBRACE, '{', [0, 1], :tSTRING_BEG, "%'", [1, 3], :tSTRING_CONTENT, 'a', [3, 4], :tSTRING_END, "'", [4, 5], :tCOLON, ':', [5, 6]) end def test_command_start__19 setup_lexer 19 %w[case elsif for in until when while if unless and or].each do |keyword| token = "k#{keyword.upcase}".to_sym @lex.reset assert_scanned("#{keyword} a:b", token, keyword, [0, keyword.length], :tIDENTIFIER, "a", [keyword.length + 1, keyword.length + 2], :tSYMBOL, "b", [keyword.length + 2, keyword.length + 4]) end end def test_mod_not_command_start__19 setup_lexer 19 %w[if unless while until rescue].each do |keyword| token = "k#{keyword.upcase}_MOD".to_sym @lex.state = :expr_end assert_scanned("#{keyword} a:b", token, keyword, [0, keyword.length], :tLABEL, "a", [keyword.length + 1, keyword.length + 3], :tIDENTIFIER, "b", [keyword.length + 3, keyword.length + 4]) end end def test_back_ref assert_scanned("[$&, $`, $', $+]", :tLBRACK, "[", [0, 1], :tBACK_REF, "$&", [1, 3], :tCOMMA, ",", [3, 4], :tBACK_REF, "$`", [5, 7], :tCOMMA, ",", [7, 8], :tBACK_REF, "$'", [9, 11], :tCOMMA, ",", [11, 12], :tBACK_REF, "$+", [13, 15], :tRBRACK, "]", [15, 16]) end def test_backslash assert_scanned("1 \\\n+ 2", :tINTEGER, 1, [0, 1], :tPLUS, "+", [4, 5], :tINTEGER, 2, [6, 7]) end def test_backslash_bad refute_scanned("1 \\ + 2", :tINTEGER, 1, [0, 1]) end def test_backtick assert_scanned("`ls`", :tXSTRING_BEG, "`", [0, 1], :tSTRING_CONTENT, "ls", [1, 3], :tSTRING_END, "`", [3, 4]) end def test_backtick_cmdarg @lex.state = :expr_dot assert_scanned("\n`", :tBACK_REF2, "`", [1, 2]) # \n ensures expr_cmd assert_equal :expr_arg, @lex.state end def test_backtick_dot @lex.state = :expr_dot assert_scanned("a.`(3)", :tIDENTIFIER, "a", [0, 1], :tDOT, ".", [1, 2], :tBACK_REF2, "`", [2, 3], :tLPAREN2, "(", [3, 4], :tINTEGER, 3, [4, 5], :tRPAREN, ")", [5, 6]) end def test_backtick_method @lex.state = :expr_fname assert_scanned("`", :tBACK_REF2, "`", [0, 1]) assert_equal :expr_endfn, @lex.state end def test_bad_char refute_scanned(" \010 ") end def test_bang assert_scanned "!", :tBANG, "!", [0, 1] end def test_bang_equals assert_scanned "!=", :tNEQ, "!=", [0, 2] end def test_bang_tilde assert_scanned "!~", :tNMATCH, "!~", [0, 2] end def test_def_ubang setup_lexer(20) @lex.state = :expr_fname assert_scanned '!@', :tBANG, '!@', [0, 2] end def test_carat assert_scanned "^", :tCARET, "^", [0, 1] end def test_carat_equals assert_scanned "^=", :tOP_ASGN, "^", [0, 2] end def test_colon2 assert_scanned("A::B", :tCONSTANT, "A", [0, 1], :tCOLON2, "::", [1, 3], :tCONSTANT, "B", [3, 4]) @lex.state = :expr_arg assert_scanned("::Array", :tCOLON2, "::", [0, 2], :tCONSTANT, "Array", [2, 7]) end def test_colon3 assert_scanned("::Array", :tCOLON3, "::", [0, 2], :tCONSTANT, "Array", [2, 7]) @lex.state = :expr_arg assert_scanned(" ::Array", :tCOLON3, "::", [1, 3], :tCONSTANT, "Array", [3, 8]) end def test_comma assert_scanned ",", :tCOMMA, ",", [0, 1] end def test_comment [26, 27].each do |version| setup_lexer(version) assert_scanned("1 # one\n# two\n2", :tINTEGER, 1, [0, 1], :tNL, nil, [7, 8], :tINTEGER, 2, [14, 15]) assert_equal 2, @lex.comments.length assert_equal '# one', @lex.comments[0].text assert_equal '# two', @lex.comments[1].text end end def test_comment_expr_beg assert_scanned("{#1\n}", :tLBRACE, "{", [0, 1], :tRCURLY, "}", [4, 5]) end def test_comment_begin assert_scanned("=begin\nblah\nblah\n=end\n42", :tINTEGER, 42, [22, 24]) assert_equal 1, @lex.comments.length assert_equal "=begin\nblah\nblah\n=end\n", @lex.comments[0].text end def test_comment_begin_bad refute_scanned("=begin\nblah\nblah\n") end def test_comment_begin_not_comment assert_scanned("beginfoo = 5\np x \\\n=beginfoo", :tIDENTIFIER, "beginfoo", [0, 8], :tEQL, "=", [9, 10], :tINTEGER, 5, [11, 12], :tNL, nil, [12, 13], :tIDENTIFIER, "p", [13, 14], :tIDENTIFIER, "x", [15, 16], :tEQL, "=", [19, 20], :tIDENTIFIER, "beginfoo", [20, 28]) end def test_comment_begin_space assert_scanned("=begin blah\nblah\n=end\n") assert_equal 1, @lex.comments.length assert_equal "=begin blah\nblah\n=end\n", @lex.comments[0].text end def test_comment_end_space_and_text assert_scanned("=begin blah\nblah\n=end blab\n") assert_equal 1, @lex.comments.length assert_equal "=begin blah\nblah\n=end blab\n", @lex.comments[0].text end def test_comment_eos assert_scanned("# comment") end def test_constant assert_scanned("ArgumentError", :tCONSTANT, "ArgumentError", [0, 13]) end def test_constant_semi assert_scanned("ArgumentError;", :tCONSTANT, "ArgumentError", [0, 13], :tSEMI, ";", [13, 14]) end def test_cvar assert_scanned "@@blah", :tCVAR, "@@blah", [0, 6] end def test_cvar_bad refute_scanned "@@1" end def test_div assert_scanned("a / 2", :tIDENTIFIER, "a", [0, 1], :tDIVIDE, "/", [2, 3], :tINTEGER, 2, [4, 5]) end def test_div_equals assert_scanned("a /= 2", :tIDENTIFIER, "a", [0, 1], :tOP_ASGN, "/", [2, 4], :tINTEGER, 2, [5, 6]) end def test_do assert_scanned("x do 42 end", :tIDENTIFIER, "x", [0, 1], :kDO, "do", [2, 4], :tINTEGER, 42, [5, 7], :kEND, "end", [8, 11]) end def test_do_block @lex.state = :expr_endarg assert_scanned("do 42 end", :kDO_BLOCK, "do", [0, 2], :tINTEGER, 42, [3, 5], :kEND, "end", [6, 9]) end def test_do_cond @lex.cond.push true assert_scanned("x do 42 end", :tIDENTIFIER, "x", [0, 1], :kDO_COND, "do", [2, 4], :tINTEGER, 42, [5, 7], :kEND, "end", [8, 11]) end def test_dot assert_scanned ".", :tDOT, ".", [0, 1] end def test_dot2 assert_scanned "..", :tDOT2, "..", [0, 2] end def test_dot3 assert_scanned "...", :tDOT3, "...", [0, 3] end def test_equals assert_scanned "=", :tEQL, "=", [0, 1] end def test_equals2 assert_scanned "==", :tEQ, "==", [0, 2] end def test_equals3 assert_scanned "===", :tEQQ, "===", [0, 3] end def test_equals_tilde assert_scanned "=~", :tMATCH, "=~", [0, 2] end def test_float assert_scanned "1.0", :tFLOAT, 1.0, [0, 3] end def test_float_bad_no_underscores refute_scanned "1__0.0" end def test_float_bad_no_zero_leading refute_scanned ".0" end def test_float_bad_trailing_underscore refute_scanned "123_.0" end def test_float_call assert_scanned("1.0.to_s", :tFLOAT, 1.0, [0, 3], :tDOT, ".", [3, 4], :tIDENTIFIER, "to_s", [4, 8]) end def test_float_dot_E assert_scanned "1.0E10", :tFLOAT, 1.0e10, [0, 6] end def test_float_dot_E_neg assert_scanned("-1.0E10", :tUNARY_NUM, "-", [0, 1], :tFLOAT, 1.0e10, [1, 7]) end def test_float_dot_E_pos assert_scanned("+1.0E10", :tUNARY_NUM, "+", [0, 1], :tFLOAT, 1.0e10, [1, 7]) end def test_float_dot_e assert_scanned "1.0e10", :tFLOAT, 1.0e10, [0, 6] end def test_float_dot_e_neg assert_scanned("-1.0e10", :tUNARY_NUM, "-", [0, 1], :tFLOAT, 1.0e10, [1, 7]) end def test_float_dot_e_pos assert_scanned("+1.0e10", :tUNARY_NUM, "+", [0, 1], :tFLOAT, 1.0e10, [1, 7]) end def test_float_e assert_scanned "1e10", :tFLOAT, 1e10, [0, 4] end def test_float_e_bad_trailing_underscore refute_scanned "123_e10" end def test_float_e_minus assert_scanned "1e-10", :tFLOAT, 1e-10, [0, 5] end def test_float_e_neg assert_scanned("-1e10", :tUNARY_NUM, "-", [0, 1], :tFLOAT, 1e10, [1, 5]) end def test_float_e_neg_minus assert_scanned("-1e-10", :tUNARY_NUM, "-", [0, 1], :tFLOAT, 1e-10, [1, 6]) end def test_float_e_neg_plus assert_scanned("-1e+10", :tUNARY_NUM, "-", [0, 1], :tFLOAT, 1e10, [1, 6]) end def test_float_e_pos assert_scanned("+1e10", :tUNARY_NUM, "+", [0, 1], :tFLOAT, 1e10, [1, 5]) end def test_float_e_pos_minus assert_scanned("+1e-10", :tUNARY_NUM, "+", [0, 1], :tFLOAT, 1e-10, [1, 6]) end def test_float_e_pos_plus assert_scanned("+1e+10", :tUNARY_NUM, "+", [0, 1], :tFLOAT, 1e10, [1, 6]) end def test_float_e_plus assert_scanned "1e+10", :tFLOAT, 1e10, [0, 5] end def test_float_e_zero assert_scanned "0e0", :tFLOAT, 0e0, [0, 3] end def test_float_e_nothing [18, 19, 20].each do |version| setup_lexer version refute_scanned "1end" refute_scanned "1.1end" end setup_lexer 21 assert_scanned("1end", :tINTEGER, 1, [0, 1], :kEND, 'end', [1, 4]) assert_scanned("1.1end", :tFLOAT, 1.1, [0, 3], :kEND, 'end', [3, 6]) end def test_float_neg assert_scanned("-1.0", :tUNARY_NUM, "-", [0, 1], :tFLOAT, 1.0, [1, 4]) end def test_float_pos assert_scanned("+1.0", :tUNARY_NUM, "+", [0, 1], :tFLOAT, 1.0, [1, 4]) end def test_ge assert_scanned("a >= 2", :tIDENTIFIER, "a", [0, 1], :tGEQ, ">=", [2, 4], :tINTEGER, 2, [5, 6]) end def test_global assert_scanned("$blah", :tGVAR, "$blah", [0, 5]) end def test_global_backref assert_scanned("$`", :tBACK_REF, "$`", [0, 2]) end # This was removed in 2.1. # def test_global_dash_nothing # assert_scanned("$- ", :tGVAR, "$-") # end def test_global_dash_something assert_scanned("$-x", :tGVAR, "$-x", [0, 3]) end def test_global_number assert_scanned("$10", :tNTH_REF, 10, [0, 3]) end def test_global_other assert_scanned("[$~, $*, $$, $?, $!, $@, $/, $\\, $;, $,, $., $=, $:, $<, $>, $\"]", :tLBRACK, "[", [0, 1], :tGVAR, "$~", [1, 3], :tCOMMA, ",", [3, 4], :tGVAR, "$*", [5, 7], :tCOMMA, ",", [7, 8], :tGVAR, "$$", [9, 11], :tCOMMA, ",", [11, 12], :tGVAR, "$\?", [13, 15], :tCOMMA, ",", [15, 16], :tGVAR, "$!", [17, 19], :tCOMMA, ",", [19, 20], :tGVAR, "$@", [21, 23], :tCOMMA, ",", [23, 24], :tGVAR, "$/", [25, 27], :tCOMMA, ",", [27, 28], :tGVAR, "$\\", [29, 31], :tCOMMA, ",", [31, 32], :tGVAR, "$;", [33, 35], :tCOMMA, ",", [35, 36], :tGVAR, "$,", [37, 39], :tCOMMA, ",", [39, 40], :tGVAR, "$.", [41, 43], :tCOMMA, ",", [43, 44], :tGVAR, "$=", [45, 47], :tCOMMA, ",", [47, 48], :tGVAR, "$:", [49, 51], :tCOMMA, ",", [51, 52], :tGVAR, "$<", [53, 55], :tCOMMA, ",", [55, 56], :tGVAR, "$>", [57, 59], :tCOMMA, ",", [59, 60], :tGVAR, "$\"", [61, 63], :tRBRACK, "]", [63, 64]) end def test_global_underscore assert_scanned("$_", :tGVAR, "$_", [0, 2]) end def test_global_weird assert_scanned("$__blah", :tGVAR, "$__blah", [0, 7]) end def test_global_zero assert_scanned("$0", :tGVAR, "$0", [0, 2]) end def test_gt assert_scanned("a > 2", :tIDENTIFIER, "a", [0, 1], :tGT, ">", [2, 3], :tINTEGER, 2, [4, 5]) end def test_heredoc_backtick assert_scanned("a = <<`EOF`\n blah blah\nEOF\n", :tIDENTIFIER, "a", [0, 1], :tEQL, "=", [2, 3], :tXSTRING_BEG, "<<`", [4, 11], :tSTRING_CONTENT, " blah blah\n", [12, 24], :tSTRING_END, "EOF", [24, 27], :tNL, nil, [11, 12]) end def test_heredoc_double assert_scanned("a = <<\"EOF\"\n blah blah\nEOF\n", :tIDENTIFIER, "a", [0, 1], :tEQL, "=", [2, 3], :tSTRING_BEG, "<<\"", [4, 11], :tSTRING_CONTENT, " blah blah\n", [12, 24], :tSTRING_END, "EOF", [24, 27], :tNL, nil, [11, 12]) end def test_heredoc_double_dash assert_scanned("a = <<-\"EOF\"\n blah blah\n EOF\n", :tIDENTIFIER, "a", [0, 1], :tEQL, "=", [2, 3], :tSTRING_BEG, "<<\"", [4, 12], :tSTRING_CONTENT, " blah blah\n", [13, 25], :tSTRING_END, "EOF", [25, 30], :tNL, nil, [12, 13]) end def test_heredoc_double_eos refute_scanned("a = <<\"EOF\"\nblah", :tIDENTIFIER, "a", [0, 1], :tEQL, "=", [2, 3], :tSTRING_BEG, "<<\"", [4, 7]) end def test_heredoc_double_eos_nl refute_scanned("a = <<\"EOF\"\nblah\n", :tIDENTIFIER, "a", [0, 1], :tEQL, "=", [2, 3], :tSTRING_BEG, "<<\"", [4, 7]) end def test_heredoc_double_interp assert_scanned("a = <<\"EOF\"\n#x a \#@a b \#$b c \#{3} \nEOF\n", :tIDENTIFIER, "a", [0, 1], :tEQL, "=", [2, 3], :tSTRING_BEG, "<<\"", [4, 11], :tSTRING_CONTENT, "#x a ", [12, 17], :tSTRING_DVAR, nil, [17, 18], :tIVAR, "@a", [18, 20], :tSTRING_CONTENT, " b ", [20, 23], :tSTRING_DVAR, nil, [23, 24], :tGVAR, "$b", [24, 26], :tSTRING_CONTENT, " c ", [26, 29], :tSTRING_DBEG, '#{', [29, 31], :tINTEGER, 3, [31, 32], :tRCURLY, "}", [32, 33], :tSTRING_CONTENT, " \n", [33, 35], :tSTRING_END, "EOF", [35, 38], :tNL, nil, [11, 12]) end def test_heredoc_empty assert_scanned("<<\"\"\n\#{x}\nblah2\n\n", :tSTRING_BEG, "<<\"", [0, 4], :tSTRING_DBEG, "\#{", [5, 7], :tIDENTIFIER, "x", [7, 8], :tRCURLY, "}", [8, 9], :tSTRING_CONTENT, "\n", [9, 10], :tSTRING_CONTENT, "blah2\n", [10, 16], :tSTRING_END, "", [16, 16], :tNL, nil, [4, 5]) end def test_heredoc_none assert_scanned("a = <", :tCMP, [0, 3] end def test_identifier_def assert_lex_fname "identifier", :tIDENTIFIER, [0, 10] end def test_identifier_equals_arrow assert_scanned(":blah==>", :tSYMBOL, "blah=", [0, 6], :tASSOC, "=>", [6, 8]) end def test_identifier_equals3 assert_scanned(":a===b", :tSYMBOL, "a", [0, 2], :tEQQ, "===", [2, 5], :tIDENTIFIER, "b", [5, 6]) end def test_identifier_equals_equals_arrow assert_scanned(":a==>b", :tSYMBOL, "a=", [0, 3], :tASSOC, "=>", [3, 5], :tIDENTIFIER, "b", [5, 6]) end def test_identifier_equals_caret assert_lex_fname "^", :tCARET, [0, 1] end def test_identifier_equals_def assert_lex_fname "identifier=", :tIDENTIFIER, [0, 11] end def test_identifier_equals_def2 assert_lex_fname "==", :tEQ, [0, 2] end def test_identifier_equals_expr @lex.state = :expr_dot assert_scanned("y = arg", :tIDENTIFIER, "y", [0, 1], :tEQL, "=", [2, 3], :tIDENTIFIER, "arg", [4, 7]) assert_equal :expr_arg, @lex.state end def test_identifier_equals_or assert_lex_fname "|", :tPIPE, [0, 1] end def test_identifier_equals_slash assert_lex_fname "/", :tDIVIDE, [0, 1] end def test_identifier_equals_tilde @lex.state = :expr_fname assert_scanned("identifier=~", :tIDENTIFIER, "identifier=", [0, 11], :tTILDE, "~", [11, 12]) end def test_identifier_gt assert_lex_fname ">", :tGT, [0, 1] end def test_identifier_le assert_lex_fname "<=", :tLEQ, [0, 2] end def test_identifier_lt assert_lex_fname "<", :tLT, [0, 1] end def test_identifier_tilde assert_lex_fname "~", :tTILDE, [0, 1] end def test_identifier_defined? assert_lex_fname "defined?", :kDEFINED, [0, 8] end def test_index assert_lex_fname "[]", :tAREF, [0, 2] end def test_index_equals assert_lex_fname "[]=", :tASET, [0, 3] end def test_integer assert_scanned "42", :tINTEGER, 42, [0, 2] end def test_integer_bin assert_scanned "0b101010", :tINTEGER, 42, [0, 8] end def test_integer_bin_bad_none refute_scanned "0b " end def test_integer_bin_bad_underscores refute_scanned "0b10__01" end def test_integer_dec assert_scanned "42", :tINTEGER, 42, [0, 2] end def test_integer_dec_bad_underscores refute_scanned "42__24" end def test_integer_dec_d assert_scanned "0d42", :tINTEGER, 42, [0, 4] end def test_integer_dec_d_bad_none refute_scanned "0d" end def test_integer_dec_d_bad_underscores refute_scanned "0d42__24" end def test_question_eh_a__18 setup_lexer 18 assert_scanned "?a", :tINTEGER, 97, [0, 2] end def test_question_eh_a__19 setup_lexer 19 assert_scanned '?a', :tCHARACTER, "a", [0, 2] end def test_question_eh_escape_M_escape_C__18 setup_lexer 18 assert_scanned '?\M-\C-a', :tINTEGER, 129, [0, 8] end def test_question_eh_escape_M_escape_C__19 setup_lexer 19 assert_scanned '?\M-\C-a', :tCHARACTER, "\M-\C-a", [0, 8] end def test_question_eh_escape_u_1_digit setup_lexer 19 refute_scanned '?\\u1' end def test_question_eh_escape_u_2_digits setup_lexer 19 refute_scanned '?\\u12' end def test_question_eh_escape_u_3_digits setup_lexer 19 refute_scanned '?\\u123' end def test_question_eh_escape_u_4_digits setup_lexer 19 assert_scanned '?\\u0001', :tCHARACTER, "\u0001", [0, 7] end def test_question_eh_single_unicode_point setup_lexer 19 assert_scanned '?\\u{123}', :tCHARACTER, "\u0123", [0, 8] setup_lexer 19 assert_scanned '?\\u{a}', :tCHARACTER, "\n", [0, 6] end def test_question_eh_multiple_unicode_points setup_lexer 19 refute_scanned '?\\u{1 2 3}' setup_lexer 19 refute_scanned '?\\u{a b}' end def test_question_eh_escape_u_unclosed_bracket setup_lexer 19 refute_scanned '?\\u{123' end def test_question_eh_escape_space_around_unicode_point__19 setup_lexer 19 refute_scanned '"\\u{1 }"' setup_lexer 19 refute_scanned '"\\u{ 1}"' setup_lexer 19 refute_scanned '"\\u{ 1 }"' setup_lexer 19 refute_scanned '"\\u{1 2 }"' setup_lexer 19 refute_scanned '"\\u{ 1 2}"' setup_lexer 19 refute_scanned '"\\u{1 2}"' end def test_question_eh_escape_space_around_unicode_point__24 setup_lexer 24 assert_scanned '"\\u{ 1}"', :tSTRING, "\u0001", [0, 8] setup_lexer 24 assert_scanned '"\\u{1 }"', :tSTRING, "\u0001", [0, 8] setup_lexer 24 assert_scanned '"\\u{ 1 }"', :tSTRING, "\u0001", [0, 9] setup_lexer 24 assert_scanned '"\\u{1 2 }"', :tSTRING, "\u0001\u0002", [0, 10] setup_lexer 24 assert_scanned '"\\u{ 1 2}"', :tSTRING, "\u0001\u0002", [0, 10] setup_lexer 24 assert_scanned '"\\u{1 2}"', :tSTRING, "\u0001\u0002", [0, 10] end def test_integer_hex assert_scanned "0x2a", :tINTEGER, 42, [0, 4] end def test_integer_hex_bad_none refute_scanned "0x " end def test_integer_hex_bad_underscores refute_scanned "0xab__cd" end def test_integer_oct assert_scanned "052", :tINTEGER, 42, [0, 3] end def test_integer_oct_bad_range refute_scanned "08" end def test_integer_oct_bad_underscores refute_scanned "01__23" end def test_integer_oct_O assert_scanned "0O52", :tINTEGER, 42, [0, 4] end def test_integer_oct_O_bad_range refute_scanned "0O1238" end def test_integer_oct_O_bad_underscores refute_scanned "0O1__23" end def test_integer_oct_O_not_bad_none assert_scanned "0O ", :tINTEGER, 0, [0, 2] end def test_integer_oct_o assert_scanned "0o52", :tINTEGER, 42, [0, 4] end def test_integer_oct_o_bad_range refute_scanned "0o1283" end def test_integer_oct_o_bad_underscores refute_scanned "0o1__23" end def test_integer_oct_o_not_bad_none assert_scanned "0o ", :tINTEGER, 0, [0, 2] end def test_integer_trailing assert_scanned("1.to_s", :tINTEGER, 1, [0, 1], :tDOT, '.', [1, 2], :tIDENTIFIER, 'to_s', [2, 6]) end def test_integer_underscore assert_scanned "4_2", :tINTEGER, 42, [0, 3] end def test_integer_underscore_bad refute_scanned "4__2" end def test_integer_zero assert_scanned "0", :tINTEGER, 0, [0, 1] end def test_ivar assert_scanned "@blah", :tIVAR, "@blah", [0, 5] end def test_ivar_bad refute_scanned "@1" end def test_ivar_bad_0_length refute_scanned "1+@\n", :tINTEGER, 1, [0, 1], :tPLUS, "+", [1, 2] end def test_keyword_expr @lex.state = :expr_endarg assert_scanned "if", :kIF_MOD, "if", [0, 2] assert_equal :expr_beg, @lex.state end def test_lt assert_scanned "<", :tLT, "<", [0, 1] end def test_lt2 assert_scanned("a <\< b", :tIDENTIFIER, "a", [0, 1], :tLSHFT, "<\<", [2, 4], :tIDENTIFIER, "b", [5, 6]) end def test_lt2_equals assert_scanned("a <\<= b", :tIDENTIFIER, "a", [0, 1], :tOP_ASGN, "<\<", [2, 5], :tIDENTIFIER, "b", [6, 7]) end def test_lt_equals assert_scanned "<=", :tLEQ, "<=", [0, 2] end def test_minus assert_scanned("1 - 2", :tINTEGER, 1, [0, 1], :tMINUS, "-", [2, 3], :tINTEGER, 2, [4, 5]) end def test_minus_equals @lex.state = :expr_end assert_scanned "-=", :tOP_ASGN, "-", [0, 2] end def test_minus_method @lex.state = :expr_fname assert_scanned "-", :tMINUS, "-", [0, 1] end def test_minus_unary_method @lex.state = :expr_fname assert_scanned "-@", :tUMINUS, "-@", [0, 2] end def test_minus_unary_number assert_scanned("-42", :tUNARY_NUM, "-", [0, 1], :tINTEGER, 42, [1, 3]) end def test_minus_unary_whitespace_number assert_scanned("- 42", :tUNARY_NUM, "-", [0, 1], :tINTEGER, 42, [2, 4]) end def test_nth_ref assert_scanned('[$1, $2, $3]', :tLBRACK, "[", [0, 1], :tNTH_REF, 1, [1, 3], :tCOMMA, ",", [3, 4], :tNTH_REF, 2, [5, 7], :tCOMMA, ",", [7, 8], :tNTH_REF, 3, [9, 11], :tRBRACK, "]", [11, 12]) end def test_open_bracket assert_scanned("(", :tLPAREN, "(", [0, 1]) end def test_open_bracket_cmdarg assert_scanned("m (", :tIDENTIFIER, "m", [0, 1], :tLPAREN_ARG, "(", [2, 3]) end def test_open_bracket_exprarg assert_scanned("m(", :tIDENTIFIER, "m", [0, 1], :tLPAREN2, "(", [1, 2]) end def test_open_curly_bracket assert_scanned("{", :tLBRACE, "{", [0, 1]) end def test_open_curly_bracket_arg assert_scanned("m { 3 }", :tIDENTIFIER, "m", [0, 1], :tLCURLY, "{", [2, 3], :tINTEGER, 3, [4, 5], :tRCURLY, "}", [6, 7]) end def test_open_curly_bracket_block @lex.state = :expr_endarg # seen m(3) assert_scanned("{ 4 }", :tLBRACE_ARG, "{", [0, 1], :tINTEGER, 4, [2, 3], :tRCURLY, "}", [4, 5]) end def test_open_square_bracket_arg assert_scanned("m [ 3 ]", :tIDENTIFIER, "m", [0, 1], :tLBRACK, "[", [2, 3], :tINTEGER, 3, [4, 5], :tRBRACK, "]", [6, 7]) end def test_open_square_bracket_ary assert_scanned("[1, 2, 3]", :tLBRACK, "[", [0, 1], :tINTEGER, 1, [1, 2], :tCOMMA, ",", [2, 3], :tINTEGER, 2, [4, 5], :tCOMMA, ",", [5, 6], :tINTEGER, 3, [7, 8], :tRBRACK, "]", [8, 9]) end def test_open_square_bracket_meth assert_scanned("m[3]", :tIDENTIFIER, "m", [0, 1], :tLBRACK2, "[", [1, 2], :tINTEGER, 3, [2, 3], :tRBRACK, "]", [3, 4]) end def test_or assert_scanned "|", :tPIPE, "|", [0, 1] end def test_or2 assert_scanned "||", :tOROP, "||", [0, 2] end def test_or2__after_27 setup_lexer(27) assert_scanned("||", :tPIPE, "|", [0, 1], :tPIPE, "|", [1, 2]) end def test_or2_equals assert_scanned "||=", :tOP_ASGN, "||", [0, 3] end def test_or_equals assert_scanned "|=", :tOP_ASGN, "|", [0, 2] end def test_percent assert_scanned("a % 2", :tIDENTIFIER, "a", [0, 1], :tPERCENT, "%", [2, 3], :tINTEGER, 2, [4, 5]) end def test_percent_equals assert_scanned("a %= 2", :tIDENTIFIER, "a", [0, 1], :tOP_ASGN, "%", [2, 4], :tINTEGER, 2, [5, 6]) end def test_plus assert_scanned("1 + 1", :tINTEGER, 1, [0, 1], :tPLUS, "+", [2, 3], :tINTEGER, 1, [4, 5]) end def test_plus_equals @lex.state = :expr_end assert_scanned "+=", :tOP_ASGN, "+", [0, 2] end def test_plus_method @lex.state = :expr_fname assert_scanned "+", :tPLUS, "+", [0, 1] end def test_plus_unary_method @lex.state = :expr_fname assert_scanned "+@", :tUPLUS, "+@", [0, 2] end def test_plus_unary_number assert_scanned("+42", :tUNARY_NUM, "+", [0, 1], :tINTEGER, 42, [1, 3]) end def test_plus_unary_whitespace_number assert_scanned("+ 42", :tUNARY_NUM, "+", [0, 1], :tINTEGER, 42, [2, 4]) end def test_numbers assert_scanned "0b10", :tINTEGER, 2, [0, 4] assert_scanned "0B10", :tINTEGER, 2, [0, 4] assert_scanned "0d10", :tINTEGER, 10, [0, 4] assert_scanned "0D10", :tINTEGER, 10, [0, 4] assert_scanned "0x10", :tINTEGER, 16, [0, 4] assert_scanned "0X10", :tINTEGER, 16, [0, 4] assert_scanned "0o10", :tINTEGER, 8, [0, 4] assert_scanned "0O10", :tINTEGER, 8, [0, 4] assert_scanned "0o", :tINTEGER, 0, [0, 2] assert_scanned "0O", :tINTEGER, 0, [0, 2] assert_scanned "0o", :tINTEGER, 0, [0, 2] assert_scanned "0O", :tINTEGER, 0, [0, 2] assert_scanned "0777_333", :tINTEGER, 261851, [0, 8] assert_scanned "0", :tINTEGER, 0, [0, 1] refute_scanned "0x" refute_scanned "0X" refute_scanned "0b" refute_scanned "0B" refute_scanned "0d" refute_scanned "0D" refute_scanned "08" refute_scanned "09" refute_scanned "0o8" refute_scanned "0o9" refute_scanned "0O8" refute_scanned "0O9" refute_scanned "1_e1" refute_scanned "1_.1" refute_scanned "1__1" refute_scanned "1end" refute_scanned "1.1end" end def test_question__18 setup_lexer 18 assert_scanned "?*", :tINTEGER, 42, [0, 2] end def test_question__19 setup_lexer 19 assert_scanned "?*", :tCHARACTER, "*", [0, 2] end def test_question_bad_eos refute_scanned "?" end def test_question_bad_ws assert_scanned "? ", :tEH, "?", [0, 1] assert_scanned "?\n", :tEH, "?", [0, 1] assert_scanned "?\t", :tEH, "?", [0, 1] assert_scanned "?\v", :tEH, "?", [0, 1] assert_scanned "?\r", :tEH, "?", [0, 1] assert_scanned "?\f", :tEH, "?", [0, 1] end def test_question_ws_backslashed__18 setup_lexer 18 @lex.state = :expr_beg assert_scanned "?\\ ", :tINTEGER, 32, [0, 3] @lex.state = :expr_beg assert_scanned "?\\n", :tINTEGER, 10, [0, 3] @lex.state = :expr_beg assert_scanned "?\\t", :tINTEGER, 9, [0, 3] @lex.state = :expr_beg assert_scanned "?\\v", :tINTEGER, 11, [0, 3] @lex.state = :expr_beg assert_scanned "?\\r", :tINTEGER, 13, [0, 3] @lex.state = :expr_beg assert_scanned "?\\f", :tINTEGER, 12, [0, 3] end def test_question_ws_backslashed__19 setup_lexer 19 @lex.state = :expr_beg assert_scanned "?\\ ", :tCHARACTER, " ", [0, 3] @lex.state = :expr_beg assert_scanned "?\\n", :tCHARACTER, "\n", [0, 3] @lex.state = :expr_beg assert_scanned "?\\t", :tCHARACTER, "\t", [0, 3] @lex.state = :expr_beg assert_scanned "?\\v", :tCHARACTER, "\v", [0, 3] @lex.state = :expr_beg assert_scanned "?\\r", :tCHARACTER, "\r", [0, 3] @lex.state = :expr_beg assert_scanned "?\\f", :tCHARACTER, "\f", [0, 3] end def test_rbracket assert_scanned "]", :tRBRACK, "]", [0, 1] end def test_rcurly assert_scanned "}", :tRCURLY, "}", [0, 1] end def test_regexp assert_scanned("/regexp/", :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regexp", [1, 7], :tSTRING_END, "/", [7, 8], :tREGEXP_OPT, "", [8, 8]) end def test_regexp_ambiguous assert_scanned("method /regexp/", :tIDENTIFIER, "method", [0, 6], :tREGEXP_BEG, "/", [7, 8], :tSTRING_CONTENT, "regexp", [8, 14], :tSTRING_END, "/", [14, 15], :tREGEXP_OPT, "", [15, 15]) end def test_regexp_bad refute_scanned("/.*/xyz", :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, ".*", [1, 3], :tSTRING_END, "/", [3, 4]) end def test_regexp_escape_C assert_scanned('/regex\\C-x/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\C-x", [1, 10], :tSTRING_END, "/", [10, 11], :tREGEXP_OPT, "", [11, 11]) end def test_regexp_escape_C_M assert_scanned('/regex\\C-\\M-x/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\C-\\M-x", [1, 13], :tSTRING_END, "/", [13, 14], :tREGEXP_OPT, "", [14, 14]) end def test_regexp_escape_C_M_craaaazy assert_scanned("/regex\\C-\\\n\\M-x/", :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\C-\\M-x", [1, 15], :tSTRING_END, "/", [15, 16], :tREGEXP_OPT, "", [16, 16]) end def test_regexp_escape_C_bad_dash refute_scanned '/regex\\Cx/', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_C_bad_dash_eos refute_scanned '/regex\\C-/', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_C_bad_dash_eos2 refute_scanned '/regex\\C-', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_C_bad_eos refute_scanned '/regex\\C/', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_C_bad_eos2 refute_scanned '/regex\\c', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_M assert_scanned('/regex\\M-x/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\M-x", [1, 10], :tSTRING_END, "/", [10, 11], :tREGEXP_OPT, "", [11, 11]) end def test_regexp_escape_M_C assert_scanned('/regex\\M-\\C-x/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\M-\\C-x", [1, 13], :tSTRING_END, "/", [13, 14], :tREGEXP_OPT, "", [14, 14]) end def test_regexp_escape_M_bad_dash refute_scanned '/regex\\Mx/', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_M_bad_dash_eos refute_scanned '/regex\\M-/', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_M_bad_dash_eos2 refute_scanned '/regex\\M-', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_M_bad_eos refute_scanned '/regex\\M/', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_backslash_slash assert_scanned('/\\//', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, '/', [1, 3], :tSTRING_END, "/", [3, 4], :tREGEXP_OPT, "", [4, 4]) end def test_regexp_escape_backslash_terminator assert_scanned('%r%blah\\%blah%', :tREGEXP_BEG, "%r%", [0, 3], :tSTRING_CONTENT, "blah%blah", [3, 13], :tSTRING_END, "%", [13, 14], :tREGEXP_OPT, "", [14, 14]) end def test_regexp_escape_backslash_terminator_meta1 assert_scanned('%r{blah\\}blah}', :tREGEXP_BEG, "%r{", [0, 3], :tSTRING_CONTENT, "blah\\}blah", [3, 13], :tSTRING_END, "}", [13, 14], :tREGEXP_OPT, "", [14, 14]) end def test_regexp_escape_backslash_terminator_meta2 assert_scanned('%r/blah\\/blah/', :tREGEXP_BEG, "%r/", [0, 3], :tSTRING_CONTENT, "blah/blah", [3, 13], :tSTRING_END, "/", [13, 14], :tREGEXP_OPT, "", [14, 14]) end def test_regexp_escape_backslash_terminator_meta3 assert_scanned('%r/blah\\%blah/', :tREGEXP_BEG, "%r/", [0, 3], :tSTRING_CONTENT, "blah\\%blah", [3, 13], :tSTRING_END, "/", [13, 14], :tREGEXP_OPT, "", [14, 14]) end def test_regexp_escape_bad_eos refute_scanned '/regex\\', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_bs assert_scanned('/regex\\\\regex/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\\\regex", [1, 13], :tSTRING_END, "/", [13, 14], :tREGEXP_OPT, "", [14, 14]) end def test_regexp_escape_c assert_scanned('/regex\\cxxx/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\cxxx", [1, 11], :tSTRING_END, "/", [11, 12], :tREGEXP_OPT, "", [12, 12]) end def test_regexp_escape_c_backslash assert_scanned('/regex\\c\\n/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\c\\n", [1, 10], :tSTRING_END, "/", [10, 11], :tREGEXP_OPT, "", [11, 11]) end def test_regexp_escape_chars assert_scanned('/re\\tge\\nxp/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "re\\tge\\nxp", [1, 11], :tSTRING_END, "/", [11, 12], :tREGEXP_OPT, "", [12, 12]) end def test_regexp_escape_double_backslash assert_scanned('/[\\/\\\\]$/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT,'[/\\\\]$', [1, 8], :tSTRING_END, "/", [8, 9], :tREGEXP_OPT, "", [9, 9]) end def test_regexp_escape_hex assert_scanned('/regex\\x61xp/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\x61xp", [1, 12], :tSTRING_END, "/", [12, 13], :tREGEXP_OPT, "", [13, 13]) end def test_regexp_escape_hex_bad refute_scanned '/regex\\xzxp/', :tREGEXP_BEG, "/", [0, 1] end def test_regexp_escape_hex_one assert_scanned('/^[\\xd\\xa]{2}/on', :tREGEXP_BEG, '/', [0, 1], :tSTRING_CONTENT, '^[\\xd\\xa]{2}', [1, 13], :tSTRING_END, "/", [13, 14], :tREGEXP_OPT, 'on', [14, 16]) end def test_regexp_escape_oct1 assert_scanned('/regex\\0xp/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\0xp", [1, 10], :tSTRING_END, "/", [10, 11], :tREGEXP_OPT, "", [11, 11]) end def test_regexp_escape_oct2 assert_scanned('/regex\\07xp/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\07xp", [1, 11], :tSTRING_END, "/", [11, 12], :tREGEXP_OPT, "", [12, 12]) end def test_regexp_escape_oct3 assert_scanned('/regex\\10142/', :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regex\\10142", [1, 12], :tSTRING_END, "/", [12, 13], :tREGEXP_OPT, "", [13, 13]) end def test_regexp_escape_return assert_scanned("/regex\\\nregex/", :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "regexregex", [1, 13], :tSTRING_END, "/", [13, 14], :tREGEXP_OPT, "", [14, 14]) end def test_regexp_escape_delimiter_meta assert_scanned("%r(\\))", :tREGEXP_BEG, "%r(", [0, 3], :tSTRING_CONTENT, "\\)", [3, 5], :tSTRING_END, ")", [5, 6], :tREGEXP_OPT, "", [6, 6]) end def test_regexp_escape_delimiter_nonmeta assert_scanned("%r'\\''", :tREGEXP_BEG, "%r'", [0, 3], :tSTRING_CONTENT, "'", [3, 5], :tSTRING_END, "'", [5, 6], :tREGEXP_OPT, "", [6, 6]) end def test_regexp_escape_other_meta assert_scanned("/\\.\\$\\*\\+\\.\\?\\|/", :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, "\\.\\$\\*\\+\\.\\?\\|", [1, 15], :tSTRING_END, "/", [15, 16], :tREGEXP_OPT, "", [16, 16]) end def test_regexp_nm assert_scanned("/.*/nm", :tREGEXP_BEG, "/", [0, 1], :tSTRING_CONTENT, ".*", [1, 3], :tSTRING_END, "/", [3, 4], :tREGEXP_OPT, "nm", [4, 6]) end def test_rparen assert_scanned ")", :tRPAREN, ")", [0, 1] end def test_rshft assert_scanned("a >> 2", :tIDENTIFIER, "a", [0, 1], :tRSHFT, ">>", [2, 4], :tINTEGER, 2, [5, 6]) end def test_rshft_equals assert_scanned("a >>= 2", :tIDENTIFIER, "a", [0, 1], :tOP_ASGN, ">>", [2, 5], :tINTEGER, 2, [6, 7]) end def test_star assert_scanned("a * ", :tIDENTIFIER, "a", [0, 1], :tSTAR2, "*", [2, 3]) assert_equal :expr_value, @lex.state end def test_star2 assert_scanned("a ** ", :tIDENTIFIER, "a", [0, 1], :tPOW, "**", [2, 4]) assert_equal :expr_value, @lex.state end def test_star2_equals assert_scanned("a **= ", :tIDENTIFIER, "a", [0, 1], :tOP_ASGN, "**", [2, 5]) assert_equal :expr_beg, @lex.state end def test_star2_beg assert_scanned("** ", :tDSTAR, "**", [0, 2]) assert_equal :expr_beg, @lex.state end def test_star_arg @lex.state = :expr_arg assert_scanned(" *a", :tSTAR, "*", [1, 2], :tIDENTIFIER, "a", [2, 3]) assert_equal :expr_arg, @lex.state end def test_star_arg_beg @lex.state = :expr_beg assert_scanned("*a", :tSTAR, "*", [0, 1], :tIDENTIFIER, "a", [1, 2]) assert_equal :expr_arg, @lex.state end def test_star_arg_beg_fname @lex.state = :expr_fname assert_scanned("*a", :tSTAR2, "*", [0, 1], :tIDENTIFIER, "a", [1, 2]) assert_equal :expr_arg, @lex.state end def test_star_equals assert_scanned("a *= ", :tIDENTIFIER, "a", [0, 1], :tOP_ASGN, "*", [2, 4]) assert_equal :expr_beg, @lex.state end def test_string_bad_eos refute_scanned('%', :tSTRING_BEG, '%', [0, 1]) end def test_string_bad_eos_quote refute_scanned('%{nest', :tSTRING_BEG, '%}', [0, 2]) end def test_string_double assert_scanned('"string"', :tSTRING, "string", [0, 8]) end def test_string_double_escape_C assert_scanned('"\\C-a"', :tSTRING, "\001", [0, 6]) end def test_string_double_escape_C_backslash assert_scanned('"\\C-\\\\"', :tSTRING, "\034", [0, 7]) end def test_string_double_escape_C_escape assert_scanned('"\\C-\\M-a"', :tSTRING, "\201", [0, 9]) end def test_string_double_escape_C_question assert_scanned('"\\C-?"', :tSTRING, "\177", [0, 6]) end def test_string_double_escape_M assert_scanned('"\\M-a"', :tSTRING, "\341", [0, 6]) end def test_string_double_escape_M_backslash assert_scanned('"\\M-\\\\"', :tSTRING, "\334", [0, 7]) end def test_string_double_escape_M_escape assert_scanned('"\\M-\\C-a"', :tSTRING, "\201", [0, 9]) end def test_string_double_escape_bs1 assert_scanned('"a\\a\\a"', :tSTRING, "a\a\a", [0, 7]) end def test_string_double_escape_bs2 assert_scanned('"a\\\\a"', :tSTRING, "a\\a", [0, 6]) end def test_string_double_escape_c assert_scanned('"\\ca"', :tSTRING, "\001", [0, 5]) end def test_string_double_escape_c_escape assert_scanned('"\\c\\M-a"', :tSTRING, "\201", [0, 8]) end def test_string_double_escape_c_question assert_scanned('"\\c?"', :tSTRING, "\177", [0, 5]) end def test_string_double_escape_chars assert_scanned('"s\\tri\\ng"', :tSTRING, "s\tri\ng", [0, 10]) end def test_string_double_escape_hex assert_scanned('"n = \\x61\\x62\\x63"', :tSTRING, "n = abc", [0, 18]) end def test_string_double_escape_octal assert_scanned('"n = \\101\\102\\103"', :tSTRING, "n = ABC", [0, 18]) end def test_string_double_escape_octal_wrap assert_scanned('"\\753"', :tSTRING, "\xEB", [0, 6]) end def test_string_double_interp assert_scanned("\"blah #x a \#@a b \#$b c \#{3} # \"", :tSTRING_BEG, "\"", [0, 1], :tSTRING_CONTENT, "blah #x a ", [1, 11], :tSTRING_DVAR, nil, [11, 12], :tIVAR, "@a", [12, 14], :tSTRING_CONTENT, " b ", [14, 17], :tSTRING_DVAR, nil, [17, 18], :tGVAR, "$b", [18, 20], :tSTRING_CONTENT, " c ", [20, 23], :tSTRING_DBEG, '#{', [23, 25], :tINTEGER, 3, [25, 26], :tRCURLY, "}", [26, 27], :tSTRING_CONTENT, " # ", [27, 30], :tSTRING_END, "\"", [30, 31]) end def test_string_double_interp_label assert_scanned('"#{foo:bar}"', :tSTRING_BEG, '"', [0, 1], :tSTRING_DBEG, '#{', [1, 3], :tIDENTIFIER, 'foo', [3, 6], :tSYMBOL, 'bar', [6, 10], :tRCURLY, '}', [10, 11], :tSTRING_END, '"', [11, 12]) end def test_string_double_nested_curlies assert_scanned('%{nest{one{two}one}nest}', :tSTRING_BEG, '%{', [0, 2], :tSTRING_CONTENT, "nest{one{two}one}nest", [2, 23], :tSTRING_END, '}', [23, 24]) end def test_string_double_no_interp assert_scanned("\"# blah\"", # pound first :tSTRING, "# blah", [0, 8]) assert_scanned("\"blah # blah\"", # pound not first :tSTRING, "blah # blah", [0, 13]) end def test_string_escape_x_single assert_scanned('"\\x0"', :tSTRING, "\000", [0, 5]) end def test_string_pct_Q assert_scanned("%Q[s1 s2]", :tSTRING_BEG, '%Q[', [0, 3], :tSTRING_CONTENT, "s1 s2", [3, 8], :tSTRING_END, ']', [8, 9]) end def test_string_pct_W assert_scanned("%W[s1 s2\ns3]", :tWORDS_BEG, "%W[", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6], :tSTRING_CONTENT, "s2", [6, 8], :tSPACE, nil, [8, 9], :tSTRING_CONTENT, "s3", [9, 11], :tSPACE, nil, [11, 11], :tSTRING_END, ']', [11, 12]) end def test_string_pct_W_bs_nl assert_scanned("%W[s1 \\\ns2]", :tWORDS_BEG, "%W[", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6], :tSTRING_CONTENT, "\ns2", [6, 10], :tSPACE, nil, [10, 10], :tSTRING_END, ']', [10, 11]) end def test_string_pct_W_interp assert_scanned('%W[#{1}#{2} #@a]', :tWORDS_BEG, '%W[', [0, 3], :tSTRING_DBEG, '#{', [3, 5], :tINTEGER, 1, [5, 6], :tRCURLY, '}', [6, 7], :tSTRING_DBEG, '#{', [7, 9], :tINTEGER, 2, [9, 10], :tRCURLY, '}', [10, 11], :tSPACE, nil, [11, 12], :tSTRING_DVAR, nil, [12, 13], :tIVAR, '@a', [13, 15], :tSPACE, nil, [15, 15], :tSTRING_END, ']', [15, 16]) end def test_string_pct_I assert_scanned("%I(s1 s2)", :tSYMBOLS_BEG, "%I(", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6], :tSTRING_CONTENT, "s2", [6, 8], :tSPACE, nil, [8, 8], :tSTRING_END, ')', [8, 9]) end def test_string_pct_angle assert_scanned("%", :tSTRING_BEG, '%<', [0, 2], :tSTRING_CONTENT, "blah", [2, 6], :tSTRING_END, '>', [6, 7]) end def test_string_pct_pct assert_scanned("%%blah%", :tSTRING_BEG, '%%', [0, 2], :tSTRING_CONTENT, "blah", [2, 6], :tSTRING_END, '%', [6, 7]) end def test_string_pct_w assert_scanned("%w[s1 s2 ]", :tQWORDS_BEG, "%w[", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6], :tSTRING_CONTENT, "s2", [6, 8], :tSPACE, nil, [8, 9], :tSTRING_END, "]", [9, 10]) end def test_string_pct_w_incomplete refute_scanned("%w[s1 ", :tQWORDS_BEG, "%w[", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6]) end def test_string_pct_w_bs_nl assert_scanned("%w[s1 \\\ns2]", :tQWORDS_BEG, "%w[", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6], :tSTRING_CONTENT, "\ns2", [6, 10], :tSPACE, nil, [10, 10], :tSTRING_END, ']', [10, 11]) end def test_string_pct_w_bs_sp assert_scanned("%w[s\\ 1 s\\ 2]", :tQWORDS_BEG, "%w[", [0, 3], :tSTRING_CONTENT, "s 1", [3, 7], :tSPACE, nil, [7, 8], :tSTRING_CONTENT, "s 2", [8, 12], :tSPACE, nil, [12, 12], :tSTRING_END, ']', [12, 13]) end def test_string_pct_w_tab assert_scanned("%w[abc\tdef]", :tQWORDS_BEG, "%w[", [0, 3], :tSTRING_CONTENT, "abc", [3, 6], :tSPACE, nil, [6, 7], :tSTRING_CONTENT, "def", [7, 10], :tSPACE, nil, [10, 10], :tSTRING_END, ']', [10, 11]) end def test_string_pct_i assert_scanned("%i(s1 s2)", :tQSYMBOLS_BEG, "%i(", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6], :tSTRING_CONTENT, "s2", [6, 8], :tSPACE, nil, [8, 8], :tSTRING_END, ')', [8, 9]) end def test_string_pct_backslash assert_scanned("%\\a\\", :tSTRING_BEG, "%\\", [0, 2], :tSTRING_CONTENT, "a", [2, 3], :tSTRING_END, "\\", [3, 4]) end def test_string_pct_w_backslash assert_scanned("%w\\s1 s2 \\", :tQWORDS_BEG, "%w\\", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6], :tSTRING_CONTENT, "s2", [6, 8], :tSPACE, nil, [8, 9], :tSTRING_END, "\\", [9, 10]) end def test_string_pct_w_backslash_nl assert_scanned("%w\\s1 s2 \\\n", :tQWORDS_BEG, "%w\\", [0, 3], :tSTRING_CONTENT, "s1", [3, 5], :tSPACE, nil, [5, 6], :tSTRING_CONTENT, "s2", [6, 8], :tSPACE, nil, [8, 9], :tSTRING_END, "\\", [9, 10], :tNL, nil, [10, 11]) end def test_string_pct_w_backslash_interp_nl assert_scanned("%W\\blah #x a \#@a b \#$b c \#{3} # \\", :tWORDS_BEG, "%W\\", [0, 3], :tSTRING_CONTENT, "blah", [3, 7], :tSPACE, nil, [7, 8], :tSTRING_CONTENT, "#x", [8, 10], :tSPACE, nil, [10, 11], :tSTRING_CONTENT, "a", [11, 12], :tSPACE, nil, [12, 13], :tSTRING_DVAR, nil, [13, 14], :tIVAR, "@a", [14, 16], :tSPACE, nil, [16, 17], :tSTRING_CONTENT, "b", [17, 18], :tSPACE, nil, [18, 19], :tSTRING_DVAR, nil, [19, 20], :tGVAR, "$b", [20, 22], :tSPACE, nil, [22, 23], :tSTRING_CONTENT, "c", [23, 24], :tSPACE, nil, [24, 25], :tSTRING_DBEG, '#{', [25, 27], :tINTEGER, 3, [27, 28], :tRCURLY, "}", [28, 29], :tSPACE, nil, [29, 30], :tSTRING_CONTENT, "#", [30, 31], :tSPACE, nil, [31, 32], :tSTRING_END, "\\", [32, 33]) end def test_string_pct_backslash_with_bad_escape # No escapes are allowed in a backslash-delimited string refute_scanned("%\\a\\n\\", :tSTRING_BEG, "%\\", [0, 2], :tSTRING_CONTENT, "a", [2, 3], :tSTRING_END, "\\", [3, 4], :tIDENTIFIER, "n", [4, 5]) end def test_string_pct_intertwined_with_heredoc assert_scanned("<<-foo + %\\a\nbar\nfoo\nb\\", :tSTRING_BEG, "<<\"", [0, 6], :tSTRING_CONTENT, "bar\n", [13, 17], :tSTRING_END, "foo", [17, 20], :tPLUS, "+", [7, 8], :tSTRING_BEG, "%\\", [9, 11], :tSTRING_CONTENT, "a\n", [11, 13], :tSTRING_CONTENT, "b", [21, 22], :tSTRING_END, "\\", [22, 23]) end def test_string_pct_q_backslash assert_scanned("%q\\a\\", :tSTRING_BEG, "%q\\", [0, 3], :tSTRING_CONTENT, "a", [3, 4], :tSTRING_END, "\\", [4, 5]) end def test_string_pct_Q_backslash assert_scanned("%Q\\a\\", :tSTRING_BEG, "%Q\\", [0, 3], :tSTRING_CONTENT, "a", [3, 4], :tSTRING_END, "\\", [4, 5]) end def test_string_single assert_scanned("'string'", :tSTRING, "string", [0, 8]) end def test_string_single_escape_chars assert_scanned("'s\\tri\\ng'", :tSTRING, "s\\tri\\ng", [0, 10]) end def test_string_single_nl assert_scanned("'blah\\\nblah'", :tSTRING_BEG, "'", [0, 1], :tSTRING_CONTENT, "blah\\\n", [1, 7], :tSTRING_CONTENT, "blah", [7, 11], :tSTRING_END, "'", [11, 12]) end def test_symbol assert_scanned(":symbol", :tSYMBOL, "symbol", [0, 7]) end def test_symbol_double assert_scanned(":\"symbol\"", :tSYMBEG, ":\"", [0, 2], :tSTRING_CONTENT, "symbol", [2, 8], :tSTRING_END, "\"", [8, 9]) end def test_symbol_single assert_scanned(":'symbol'", :tSYMBEG, ":'", [0, 2], :tSTRING_CONTENT, "symbol", [2, 8], :tSTRING_END, "'", [8, 9]) end def test_ternary assert_scanned("a ? b : c", :tIDENTIFIER, "a", [0, 1], :tEH, "?", [2, 3], :tIDENTIFIER, "b", [4, 5], :tCOLON, ":", [6, 7], :tIDENTIFIER, "c", [8, 9]) assert_scanned("a ?b : c", :tIDENTIFIER, "a", [0, 1], :tINTEGER, 98, [2, 4], :tCOLON, ":", [5, 6], :tIDENTIFIER, "c", [7, 8]) assert_scanned("a ?bb : c", # GAH! MATZ!!! :tIDENTIFIER, "a", [0, 1], :tEH, "?", [2, 3], :tIDENTIFIER, "bb", [3, 5], :tCOLON, ":", [6, 7], :tIDENTIFIER, "c", [8, 9]) assert_scanned("42 ?", # 42 forces expr_end :tINTEGER, 42, [0, 2], :tEH, "?", [3, 4]) end def test_tilde assert_scanned "~", :tTILDE, "~", [0, 1] end def test_tilde_unary @lex.state = :expr_fname assert_scanned "~@", :tTILDE, "~@", [0, 2] end def test_uminus assert_scanned("-blah", :tUMINUS, "-", [0, 1], :tIDENTIFIER, "blah", [1, 5]) end def test_underscore assert_scanned("_var", :tIDENTIFIER, "_var", [0, 4]) end def test_underscore_end assert_scanned("__END__\n") assert_scanned("__END__") assert_scanned("__END__ foo", :tIDENTIFIER, '__END__', [0, 7], :tIDENTIFIER, 'foo', [8, 11]) assert_scanned("__END__\rfoo", :tIDENTIFIER, '__END__', [0, 7], :tIDENTIFIER, 'foo', [8, 11]) end def test_uplus assert_scanned("+blah", :tUPLUS, "+", [0, 1], :tIDENTIFIER, "blah", [1, 5]) end def test_if_unless_mod assert_scanned("return if true unless false", :kRETURN, "return", [0, 6], :kIF_MOD, "if", [7, 9], :kTRUE, "true", [10, 14], :kUNLESS_MOD, "unless", [15, 21], :kFALSE, "false", [22, 27]) end def test_if_stmt assert_scanned("if true\n return end", :kIF, "if", [0, 2], :kTRUE, "true", [3, 7], :tNL, nil, [7, 8], :kRETURN, "return", [9, 15], :kEND, "end", [16, 19]) end def test_sclass_label setup_lexer 20 assert_scanned("class << a:b", :kCLASS, 'class', [0, 5], :tLSHFT, '<<', [6, 8], :tIDENTIFIER, 'a', [9, 10], :tSYMBOL, 'b', [10, 12]) end def test_fname_pct_s__22 setup_lexer 22 @lex.state = :expr_fname assert_scanned("%s(a)", :tPERCENT, '%', [0, 1], :tIDENTIFIER, 's', [1, 2], :tLPAREN2, '(', [2, 3], :tIDENTIFIER, 'a', [3, 4], :tRPAREN, ')', [4, 5]) end def test_fname_pct_s__23 setup_lexer 23 @lex.state = :expr_fname assert_scanned("%s(a)", :tSYMBEG, '%s(', [0, 3], :tSTRING_CONTENT, 'a', [3, 4], :tSTRING_END, ')', [4, 5]) end def test_static_env env = Parser::StaticEnvironment.new env.declare "a" @lex.static_env = env assert_scanned("a [42]", :tIDENTIFIER, "a", [0, 1], :tLBRACK2, "[", [2, 3], :tINTEGER, 42, [3, 5], :tRBRACK, "]", [5, 6]) end def test_int_suffix [18, 19, 20].each do |version| setup_lexer version assert_scanned("42r", :tINTEGER, 42, [0, 2], :tIDENTIFIER, 'r', [2, 3]) assert_scanned("42if", :tINTEGER, 42, [0, 2], :kIF_MOD, 'if', [2, 4]) end setup_lexer 21 assert_scanned("42r", :tRATIONAL, Rational(42), [0, 3]) assert_scanned("42i", :tIMAGINARY, Complex(0, 42), [0, 3]) assert_scanned("42ri", :tIMAGINARY, Complex(0, Rational(42)), [0, 4]) end def test_float_suffix [18, 19, 20].each do |version| setup_lexer version assert_scanned("42.1r", :tFLOAT, 42.1, [0, 4], :tIDENTIFIER, 'r', [4, 5]) assert_scanned("42.1if", :tFLOAT, 42.1, [0, 4], :kIF_MOD, 'if', [4, 6]) assert_scanned("1e1r", :tFLOAT, 1e1, [0, 3], :tIDENTIFIER, 'r', [3, 4]) end begin # Feature-check. Rational("10") setup_lexer 21 assert_scanned("42.1r", :tRATIONAL, Rational(421, 10), [0, 5]) assert_scanned("42.1i", :tIMAGINARY, Complex(0, 42.1), [0, 5]) assert_scanned("42.1ri", :tIMAGINARY, Complex(0, Rational(421, 10)), [0, 6]) assert_scanned("42.1ir", :tIMAGINARY, Complex(0, 42.1), [0, 5], :tIDENTIFIER, 'r', [5, 6]) assert_scanned("1e1i", :tIMAGINARY, Complex(0, 1e1), [0, 4]) assert_scanned("1e1r", :tFLOAT, 1e1, [0, 3], :tIDENTIFIER, 'r', [3, 4]) assert_scanned("1e1ri", :tFLOAT, 1e1, [0, 3], :tIDENTIFIER, 'ri', [3, 5]) assert_scanned("1e1ir", :tIMAGINARY, Complex(0, 1e1), [0, 4], :tIDENTIFIER, 'r', [4, 5]) rescue NoMethodError # Ruby not modern enough end end def test_eof assert_scanned("self", :kSELF, "self", [0, 4]) assert_equal([false, ["$eof", Parser::Source::Range.new(@lex.source_buffer, 4, 4)]], @lex.advance) end # # Test for 'fluent interface' # def test_fluent_dot assert_scanned("x\n.y", :tIDENTIFIER, 'x', [0, 1], :tDOT, '.', [2, 3], :tIDENTIFIER, 'y', [3, 4]) assert_scanned("x\n .y", :tIDENTIFIER, 'x', [0, 1], :tDOT, '.', [4, 5], :tIDENTIFIER, 'y', [5, 6]) assert_scanned("x # comment\n .y", :tIDENTIFIER, 'x', [0, 1], :tDOT, '.', [14, 15], :tIDENTIFIER, 'y', [15, 16]) end def test_fluent_and_dot assert_scanned("x\n&.y", :tIDENTIFIER, 'x', [0, 1], :tANDDOT, '&.', [2, 4], :tIDENTIFIER, 'y', [4, 5]) end # # Tests for whitespace. # def test_whitespace_fname @lex.state = :expr_fname assert_scanned('class', :kCLASS, 'class', [0, 5]) @lex.state = :expr_fname assert_scanned(' class', :kCLASS, 'class', [1, 6]) @lex.state = :expr_fname assert_scanned("\nclass", :kCLASS, 'class', [1, 6]) @lex.state = :expr_fname assert_scanned("\\\nclass", :kCLASS, 'class', [2, 7]) @lex.state = :expr_fname assert_scanned("#foo\nclass", :kCLASS, 'class', [5, 10]) end def test_whitespace_endfn setup_lexer(21) @lex.state = :expr_endfn assert_scanned('foo:', :tLABEL, 'foo', [0, 4]) @lex.state = :expr_endfn assert_scanned(' foo:', :tLABEL, 'foo', [1, 5]) @lex.state = :expr_endfn assert_scanned("\nfoo:", :tNL, nil, [0, 1], :tIDENTIFIER, 'foo', [1, 4], :tCOLON, ':', [4, 5]) @lex.state = :expr_endfn assert_scanned("\nfoo: ", :tNL, nil, [0, 1], :tIDENTIFIER, 'foo', [1, 4], :tCOLON, ':', [4, 5]) @lex.state = :expr_endfn assert_scanned("\\\nfoo:", :tLABEL, 'foo', [2, 6]) @lex.state = :expr_endfn assert_scanned("#foo\nfoo:", :tNL, nil, [4, 5], :tIDENTIFIER, 'foo', [5, 8], :tCOLON, ':', [8, 9]) @lex.state = :expr_endfn assert_scanned("#foo\nfoo: ", :tNL, nil, [4, 5], :tIDENTIFIER, 'foo', [5, 8], :tCOLON, ':', [8, 9]) end def test_whitespace_dot @lex.state = :expr_dot assert_scanned('class', :tIDENTIFIER, 'class', [0, 5]) @lex.state = :expr_dot assert_scanned(' class', :tIDENTIFIER, 'class', [1, 6]) @lex.state = :expr_dot assert_scanned("\nclass", :tIDENTIFIER, 'class', [1, 6]) @lex.state = :expr_dot assert_scanned("\\\nclass", :tIDENTIFIER, 'class', [2, 7]) @lex.state = :expr_dot assert_scanned("#foo\nclass", :tIDENTIFIER, 'class', [5, 10]) end def test_whitespace_arg @lex.state = :expr_arg assert_scanned('+', :tPLUS, '+', [0, 1]) @lex.state = :expr_arg assert_scanned(' +', :tUPLUS, '+', [1, 2]) @lex.state = :expr_arg assert_scanned("\n+", :tNL, nil, [0, 1], :tUPLUS, '+', [1, 2]) @lex.state = :expr_arg assert_scanned("\\\n+", :tUPLUS, '+', [2, 3]) @lex.state = :expr_arg assert_scanned("\\\n +", :tUPLUS, '+', [3, 4]) @lex.state = :expr_arg assert_scanned("#foo\n+", :tNL, nil, [4, 5], :tUPLUS, '+', [5, 6]) end def test_whitespace_endarg @lex.state = :expr_endarg assert_scanned('{', :tLBRACE_ARG, '{', [0, 1]) @lex.state = :expr_endarg assert_scanned(' {', :tLBRACE_ARG, '{', [1, 2]) @lex.state = :expr_endarg assert_scanned("\n{", :tNL, nil, [0, 1], :tLBRACE, '{', [1, 2]) @lex.state = :expr_endarg assert_scanned("\\\n{", :tLBRACE_ARG, '{', [2, 3]) @lex.state = :expr_endarg assert_scanned("#foo\n{", :tNL, nil, [4, 5], :tLBRACE, '{', [5, 6]) end def test_whitespace_mid @lex.state = :expr_mid assert_scanned('+', :tUPLUS, '+', [0, 1]) @lex.state = :expr_mid assert_scanned(' +', :tUPLUS, '+', [1, 2]) @lex.state = :expr_mid assert_scanned("\n+", :tNL, nil, [0, 1], :tUPLUS, '+', [1, 2]) @lex.state = :expr_mid assert_scanned("\\\n+", :tUPLUS, '+', [2, 3]) @lex.state = :expr_mid assert_scanned("#foo\n+", :tNL, nil, [4, 5], :tUPLUS, '+', [5, 6]) end def test_whitespace_beg @lex.state = :expr_beg assert_scanned('+', :tUPLUS, '+', [0, 1]) @lex.state = :expr_beg assert_scanned(' +', :tUPLUS, '+', [1, 2]) @lex.state = :expr_beg assert_scanned("\n+", :tUPLUS, '+', [1, 2]) @lex.state = :expr_beg assert_scanned("\\\n+", :tUPLUS, '+', [2, 3]) @lex.state = :expr_beg assert_scanned("#foo\n+", :tUPLUS, '+', [5, 6]) end def test_whitespace_value setup_lexer(20) @lex.state = :expr_value assert_scanned('a:b', :tIDENTIFIER, 'a', [0, 1], :tSYMBOL, 'b', [1, 3]) @lex.state = :expr_value assert_scanned(' a:b', :tIDENTIFIER, 'a', [1, 2], :tSYMBOL, 'b', [2, 4]) @lex.state = :expr_value assert_scanned("\na:b", :tIDENTIFIER, 'a', [1, 2], :tSYMBOL, 'b', [2, 4]) @lex.state = :expr_value assert_scanned("\\\na:b", :tIDENTIFIER, 'a', [2, 3], :tSYMBOL, 'b', [3, 5]) @lex.state = :expr_value assert_scanned("#foo\na:b", :tIDENTIFIER, 'a', [5, 6], :tSYMBOL, 'b', [6, 8]) end def test_whitespace_end @lex.state = :expr_end assert_scanned('+ 1', :tPLUS, '+', [0, 1], :tINTEGER, 1, [2, 3]) @lex.state = :expr_end assert_scanned(' + 1', :tPLUS, '+', [1, 2], :tINTEGER, 1, [3, 4]) @lex.state = :expr_end assert_scanned("\n+ 1", :tNL, nil, [0, 1], :tUNARY_NUM, '+', [1, 2], :tINTEGER, 1, [3, 4]) @lex.state = :expr_end assert_scanned("\\\n+ 1", :tPLUS, '+', [2, 3], :tINTEGER, 1, [4, 5]) @lex.state = :expr_end assert_scanned("#foo\n+ 1", :tNL, nil, [4, 5], :tUNARY_NUM, '+', [5, 6], :tINTEGER, 1, [7, 8]) end def test_whitespace_cr setup_lexer(20) assert_scanned("<", :kRESCUE, 'rescue', [0, 6], :tASSOC, '=>', [6, 8]) end def test_bug_expr_arg_percent @lex.state = :expr_arg assert_scanned("%[", :tPERCENT, "%", [0, 1], :tLBRACK, "[", [1, 2]) @lex.state = :expr_arg assert_scanned("%=1", :tOP_ASGN, "%", [0, 2], :tINTEGER, 1, [2, 3]) @lex.state = :expr_arg assert_scanned(" %[1]", :tSTRING_BEG, "%[", [1, 3], :tSTRING_CONTENT, '1', [3, 4], :tSTRING_END, ']', [4, 5]) @lex.state = :expr_arg assert_scanned(" %=1=", :tOP_ASGN, "%", [1, 3], :tINTEGER, 1, [3, 4], :tEQL, "=", [4, 5]) @lex.state = :expr_arg assert_scanned(" %\n", :tPERCENT, '%', [1, 2]) end def test_bug_expr_arg_lt_lt @lex.state = :expr_arg assert_scanned("<, # @expression=#> p Parser::CurrentRuby.parse("2 + 2").loc.selector.source # "+" Traverse the AST: see the documentation for [gem ast](https://whitequark.github.io/ast/). Parse a chunk of code and display all diagnostics: parser = Parser::CurrentRuby.new parser.diagnostics.consumer = lambda do |diag| puts diag.render end buffer = Parser::Source::Buffer.new('(string)') buffer.source = "foo *bar" p parser.parse(buffer) # (string):1:5: warning: `*' interpreted as argument prefix # foo *bar # ^ # (send nil :foo # (splat # (send nil :bar))) If you reuse the same parser object for multiple `#parse` runs, you need to `#reset` it. You can also use the `ruby-parse` utility (it's bundled with the gem) to play with Parser: $ ruby-parse -L -e "2+2" (send (int 2) :+ (int 2)) 2+2 ~ selector ~~~ expression (int 2) 2+2 ~ expression (int 2) 2+2 $ ruby-parse -E -e "2+2" 2+2 ^ tINTEGER 2 expr_end [0 <= cond] [0 <= cmdarg] 2+2 ^ tPLUS "+" expr_beg [0 <= cond] [0 <= cmdarg] 2+2 ^ tINTEGER 2 expr_end [0 <= cond] [0 <= cmdarg] 2+2 ^ false "$eof" expr_end [0 <= cond] [0 <= cmdarg] (send (int 2) :+ (int 2)) ## Features * Precise source location reporting. * [Documented](doc/AST_FORMAT.md) AST format which is convenient to work with. * A simple interface and a powerful, tweakable one. * Parses 1.8, 1.9, 2.0, 2.1, 2.2 and 2.3 syntax with backwards-compatible AST formats. * Parses MacRuby and RubyMotion syntax extensions. * [Rewriting][rewriting] support. * Parsing error recovery. * Improved [clang-like][] diagnostic messages with location information. * Written in pure Ruby, runs on MRI >=2.0.0, JRuby and Rubinius (and historically, all versions of Ruby since 1.8) * Only one runtime dependency: the [ast][] gem. * [Insane][insane-lexer] Ruby lexer rewritten from scratch in Ragel. * 100% test coverage for Bison grammars (except error recovery). * Readable, commented source code. [clang-like]: http://clang.llvm.org/diagnostics.html [ast]: https://rubygems.org/gems/ast [insane-lexer]: http://whitequark.org/blog/2013/04/01/ruby-hacking-guide-ch-11-finite-state-lexer/ [rewriting]: http://whitequark.org/blog/2013/04/26/lets-play-with-ruby-code/ ## Documentation Documentation for Parser is available [online](https://whitequark.github.io/parser/). ### Node names Several Parser nodes seem to be confusing enough to warrant a dedicated README section. #### (block) The `(block)` node passes a Ruby block, that is, a closure, to a method call represented by its first child, a `(send)`, `(super)` or `(zsuper)` node. To demonstrate: ``` $ ruby-parse -e 'foo { |x| x + 2 }' (block (send nil :foo) (args (arg :x)) (send (lvar :x) :+ (int 2))) ``` #### (begin) and (kwbegin) **TL;DR: Unless you perform rewriting, treat `(begin)` and `(kwbegin)` as the same node type.** Both `(begin)` and `(kwbegin)` nodes represent compound statements, that is, several expressions which are executed sequentally and the value of the last one is the value of entire compound statement. They may take several forms in the source code: * `foo; bar`: without delimiters * `(foo; bar)`: parenthesized * `begin foo; bar; end`: grouped with `begin` keyword * `def x; foo; bar; end`: grouped inside a method definition and so on. ``` $ ruby-parse -e '(foo; bar)' (begin (send nil :foo) (send nil :bar)) $ ruby-parse -e 'def x; foo; bar end' (def :x (args) (begin (send nil :foo) (send nil :bar))) ``` Note that, despite its name, `kwbegin` node only has tangential relation to the `begin` keyword. Normally, Parser AST is semantic, that is, if two constructs look differently but behave identically, they get parsed to the same node. However, there exists a peculiar construct called post-loop in Ruby: ``` begin body end while condition ``` This specific syntactic construct, that is, keyword `begin..end` block followed by a postfix `while`, [behaves][postloop] very unlike other similar constructs, e.g. `(body) while condition`. While the body itself is wrapped into a `while-post` node, Parser also supports rewriting, and in that context it is important to not accidentally convert one kind of loop into another. [postloop]: http://rosettacode.org/wiki/Loops/Do-while#Ruby ``` $ ruby-parse -e 'begin foo end while cond' (while-post (send nil :cond) (kwbegin (send nil :foo))) $ ruby-parse -e 'foo while cond' (while (send nil :cond) (send nil :foo)) $ ruby-parse -e '(foo) while cond' (while (send nil :cond) (begin (send nil :foo))) ``` (Parser also needs the `(kwbegin)` node type internally, and it is highly problematic to map it back to `(begin)`.) ## Backwards compatibility Parser does _not_ use semantic versioning. Parser versions are structured as `x.y.z.t`, where `x.y.z` indicates the most recent supported Ruby release (support for every Ruby release that is chronologically earlier is implied), and `t` is a monotonically increasing number. The public API of Parser as well as the AST format (as listed in the documentation) are considered stable forever, although support for old Ruby versions may be removed at some point. Sometimes it is necessary to modify the format of AST nodes that are already being emitted in a way that would break existing applications. To avoid such breakage, applications must opt-in to these modifications; without explicit opt-in, Parser will continue to emit the old AST node format. The most recent set of opt-ins is specified in the [usage section](#usage) of this README. ## Compatibility with Ruby MRI Unfortunately, Ruby MRI often changes syntax in patchlevel versions. This has happened, at least, for every release since 1.9; for example, commits [c5013452](https://github.com/ruby/ruby/commit/c501345218dc5fb0fae90d56a0c6fd19d38df5bb) and [04bb9d6b](https://github.com/ruby/ruby/commit/04bb9d6b75a55d4000700769eead5a5cb942c25b) were backported all the way from HEAD to 1.9. Moreover, there is no simple way to track these changes. This policy makes it all but impossible to make Parser precisely compatible with the Ruby MRI parser. Indeed, at September 2014, it would be necessary to maintain and update ten different parsers together with their lexer quirks in order to be able to emulate any given released Ruby MRI version. As a result, Parser chooses a different path: the `parser/rubyXY` parsers recognize the syntax of the latest minor version of Ruby MRI X.Y at the time of the gem release. ## Compatibility with MacRuby and RubyMotion Parser implements the MacRuby 0.12 and RubyMotion mid-2015 parsers precisely. However, the lexers of these have been forked off Ruby MRI and independently maintained for some time, and because of that, Parser may accept some code that these upstream implementations are unable to parse. ## Known issues Adding support for the following Ruby MRI features in Parser would needlessly complicate it, and as they all are very specific and rarely occuring corner cases, this is not done. Parser has been extensively tested; in particular, it parses almost entire [Rubygems][rg] corpus. For every issue, a breakdown of affected gems is offered. [rg]: https://rubygems.org ### Void value expressions Ruby MRI prohibits so-called "void value expressions". For a description of what a void value expression is, see [this gist](https://gist.github.com/JoshCheek/5625007) and [this Parser issue](https://github.com/whitequark/parser/issues/72). It is unknown whether any gems are affected by this issue. ### Invalid characters inside comments and literals Ruby MRI permits arbitrary non-7-bit byte sequences to appear in comments, as well as in string or symbol literals in form of escape sequences, regardless of source encoding. Parser requires all source code, including the expanded escape sequences, to consist of valid byte sequences in the source encoding that are convertible to UTF-8. As of 2013-07-25, there are about 180 affected gems. ### \u escape in 1.8 mode Ruby MRI 1.8 permits to specify a bare `\u` escape sequence in a string; it treats it like `u`. Ruby MRI 1.9 and later treat `\u` as a prefix for Unicode escape sequence and do not allow it to appear bare. Parser follows 1.9+ behavior. As of 2013-07-25, affected gems are: activerdf, activerdf_net7, fastreader, gkellog-reddy. ### Dollar-dash (This one is so obscure I couldn't even think of a saner name for this issue.) Pre-2.1 Ruby allows to specify a global variable named `$-`. Ruby 2.1 and later treat it as a syntax error. Parser follows 2.1 behavior. No known code is affected by this issue. ### EOF characters after embedded documents before 2.7 Code like `"=begin\n""=end\0"` is invalid for all versions of Ruby before 2.7. Ruby 2.7 and later parses it normally. Parser follows 2.7 behavior. It is unknown whether any gems are affected by this issue. ## Contributors * [whitequark][] * Markus Schirp ([mbj][]) * Yorick Peterse ([yorickpeterse][]) * Magnus Holm ([judofyr][]) * Bozhidar Batsov ([bbatsov][]) [whitequark]: https://github.com/whitequark [mbj]: https://github.com/mbj [yorickpeterse]: https://github.com/yorickpeterse [judofyr]: https://github.com/judofyr [bbatsov]: https://github.com/bbatsov ## Acknowledgements The lexer testsuite is derived from [ruby\_parser](https://github.com/seattlerb/ruby_parser). The Bison parser rules are derived from [Ruby MRI](https://github.com/ruby/ruby) parse.y. ## Contributing 1. Make sure you have [Ragel ~> 6.7](http://www.complang.org/ragel/) installed 2. Fork it 3. Create your feature branch (`git checkout -b my-new-feature`) 4. Commit your changes (`git commit -am 'Add some feature'`) 5. Push to the branch (`git push origin my-new-feature`) 6. Create new Pull Request parser-2.7.0.2/bin/0000755000004100000410000000000013617025313013755 5ustar www-datawww-dataparser-2.7.0.2/bin/ruby-parse0000755000004100000410000000026713617025313016001 0ustar www-datawww-data#! /usr/bin/env ruby # frozen_string_literal: true $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) require 'parser/runner/ruby_parse' Parser::Runner::RubyParse.go(ARGV) parser-2.7.0.2/bin/ruby-rewrite0000755000004100000410000000027313617025313016345 0ustar www-datawww-data#! /usr/bin/env ruby # frozen_string_literal: true $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) require 'parser/runner/ruby_rewrite' Parser::Runner::RubyRewrite.go(ARGV) parser-2.7.0.2/CHANGELOG.md0000644000004100000410000011647613617025313015035 0ustar www-datawww-dataChangelog ========= Not released (2020-01-08) ------------------------- Bugs fixed: * lexer.rl: fix paren_nest for curly braces (#646) (Ilya Bylich) v2.7.0.1 (2019-12-30) --------------------- Bugs fixed: * dedenter.rb: prevent `ArgumentError` when processing binary en… (#642) (Koichi ITO) v2.7.0.0 (2019-12-26) --------------------- API modifications: * README.md: documented compatibility issue with EOF chars after… (#637) (Ilya Bylich) * ruby27.y: refactor logic around 'circular argument reference'(#628) (Ilya Bylich) Features implemented: * ruby27.y: added pattern matching (#574) (Ilya Bylich) * lexer.rl: parse embedded ivars/cvars starting with digit as str (#639) (Ilya Bylich) * lexer.rl: warn on `...` at EOL. (#636) (Ilya Bylich) * ruby27.y: removed opt_block_args_tail: tOROP rule. (#635) (Ilya Bylich) * ruby27.y: reverted method reference operator (added in #634) (Ilya Bylich) * ruby27.y: treat numparams as locals outside numblock. (#633) (Ilya Bylich) Bugs fixed: * dedenter.rb: fixed over-dedenting of squiggly heredocs (#641) (Ilya Bylich) * ruby27.y: added "arguments forwarding" (#625) (Ilya Bylich) * ruby27.y: reject circular argument reference. (#622) (Ilya Bylich) * ruby27.y: changed prefix of numparams to "_" (#620) (Ilya Bylich) v2.6.5.0 (2019-10-03) --------------------- API modifications: * Bump ruby versions to 2.4.9, 2.5.7 and 2.6.5. (#619) (Ilya Bylich) Features implemented: * lexer.rl: changed max numparam to `@9` (#617) (Ilya Bylich) * lexer.rl: support comments before leading dot in 27 mode. (#613) (Ilya Bylich) Bugs fixed: * lexer.rl: emit tMETHREF as tDOT+tCOLON for rubies \< 27. (#614) (Ilya Bylich) v2.6.4.1 (2019-09-12) --------------------- Bugs fixed: * lexer.rl: fix parsing of 'm a + b do end' (#605) (Ilya Bylich) v2.6.4.0 (2019-08-30) --------------------- API modifications: * Added specs for heredocs with mixed encoding. (#581) (Ilya Bylich) Features implemented: * ruby27.y: Revert "pipeline operator" (#601) (Koichi ITO) * ruby27.y: Fix parsing of mutiple assignment with rescue modifier (#600) (Koichi ITO) * ruby27.y: hoisted out f_rest_marg. (#594) (Ilya Bylich) * ruby27.y: added pipeline operator. (#592) (Ilya Bylich) * ruby27.y: reject safe navigator in LHS of mass-assignment. (#586) (Ilya Bylich) * lexer.rl: reject whitespaces in meta and control chars. (#585) (Ilya Bylich) * lexer.rl: Reject numparams as symbol literals. (#582) (Ilya Bylich) * ruby27.y: Added numbered parameters support. (#565) (Ilya Bylich) * lexer.rl: Reject \n and \r in heredoc identifiers starting from 2.7. (#575) (Ilya Bylich) Bugs fixed: * ruby-parse: print empty string when --emit-json and empty input are given. (#590) (Ilya Bylich) * AST_FORMAT: fixed documentation of the string with interpolation. (#589) (Ilya Bylich) * builder.rb, processor.rb: Changed format of the procarg0 node. (#587) (Ilya Bylich) v2.6.3.0 (2019-04-28) --------------------- Features implemented: * ruby27.y: Added beginless ranges support. (#570) (Ilya Bylich) v2.6.2.1 (2019-04-05) --------------------- API modifications: * Bump 2.4 branch to 2.4.6. (#569) (Ilya Bylich) * Lexer should know about current parsing context. (#566) (Ilya Bylich) v2.6.2.0 (2019-03-21) --------------------- API modifications: * Bump ruby versions to 2.5.5 and 2.6.2. (#563) (Ilya Bylich) * Bump Ruby version to 2.6.1. (#554) (Ilya Bylich) Features implemented: * ruby27.y: dsym should be treated as string. (#560) (Ilya Bylich) * ruby27.y: Refactored symbol rules. (#557) (Ilya Bylich) * ruby27.y: Added method reference operator. (#556) (Ilya Bylich) * ruby27.y: branch parser. (#546) (Ilya Bylich) v2.6.0.0 (2019-01-16) --------------------- API modifications: * 2.6.0 was released, unmark is as -dev. (#538) (Ilya Bylich) Bugs fixed: * Fix parsing of "\\\n" escaped sequences in various literals. (#539) (Ilya Bylich) v2.5.3.0 (2018-10-29) --------------------- Bugs fixed: * lexer.rl: Fix parsing of 'm :key => m do; m() do end; end'. (#526) (Ilya Bylich) * lexer.rl: Fix parsing of ambiguous 1re. (#523) (Ilya Bylich) v2.5.1.2 (2018-07-10) --------------------- Bugs fixed: * lexer.rl: Partially revert 5ba072d and properly handle 'm = -> *args do end'. (Ilya Bylich) v2.5.1.1 (2018-07-10) --------------------- Features implemented: * ruby26.y: Endless ranges support. (Ilya Bylich) Bugs fixed: * lexer.rl: Fix parsing of 'm = -> *args do end'. (Ilya Bylich) * AST::Processor: Properly recurse into "kwsplat" nodes (Nelson Elhage) * ruby24, ruby25, ruby26: Fix cmdargs after command_args followed by tLBRACE_ARG. This commit tracks upstream commit ruby/ruby@f168dbd. (Ilya Bylich) * lexer.rl: Fix parsing of `let (:a) { m do; end }`. (Ilya Bylich) v2.5.1.0 (2018-04-12) --------------------- API modifications: * Parser::Current: bump latest 2.2 branch to 2.2.10. (Ilya Bylich) Features implemented: * ruby26.y: Raise a syntax error on 'else' without 'rescue'. This commit tracks upstream commit ruby/ruby@140512d. (Ilya Bylich) Bugs fixed: * lexer.rl, Dedenter: Treat slash in heredocs as a line continuation. (Ilya Bylich) * lexer.rl: Fix parsing of `a ? b + '': nil`. (Ilya Bylich) * lexer.rl: Reject `m a: {} {}` and `m [] {}` since 25. (Ilya Bylich) * builders/default: allow class/module/dynamic constant definition in the method body if there's a sclass between them. (bug #490) (Ilya Bylich) * lexer.rl: Emit :!@ as :!, :~@ as :~. (Ilya Bylich) * parse{23,24,25}.y: use only CMDARG/COND _PUSH/POP for cmdarg/cond management. (bug #481) (Ilya Bylich) * lexer.rl: emit tSTRING_BEG and tSTRING_DBEG one by one to allow parser to properly manipulate cmdarg stack. (bug #480) (Ilya Bylich) v2.5.0.4 (2018-03-13) --------------------- Bugs fixed: * AST::Processor: handle on_index, on_indexasgn, on_lambda. (Ilya Bylich) v2.5.0.3 (2018-03-06) --------------------- Bugs fixed: * Accept `BEGIN` and `END` as correct method name (#463) (Masataka Pocke Kuwabara) * Parser::Source::Buffer: Fixed parsing of encoding comment when the file contains only shebang. (Ilya Bylich) v2.5.0.2 (2018-02-22) --------------------- Bugs fixed: * ruby24.y, ruby25.y: Replicate cmdargs handling from MRI. (#453) (Ilya Bylich) v2.5.0.1 (2018-02-21) --------------------- Features implemented: * builders/default: __ENCODING__: emit as s(:__ENCODING__) via AST opt-in. (whitequark) * ruby25.y: Extract expr_value_do rule. This commit tracks upstream commit ruby/ruby@508533f. (Ilya Bylich) * ruby25.y: Extract begin_block rule. This commit tracks upstream commit ruby/ruby@762d23c. (Ilya Bylich) * ruby25.y: Allow class and method definition in the while condition. (#432) (Ilya Bylich) * ruby25: Allow `-> do rescue; end`. (#431) (Ilya Bylich) Bugs fixed: * parser/current: latest released Ruby series is 2.5.x. (whitequark) * builders/default: x[], x[]=1: emit as s(:index), s(:indexasgn) via AST opt-in. (whitequark) * lexer.rl: "#{-> foo {}}": fix parsing of interpolated lambda with open args. (Ilya Bylich) v2.5.0.0 (2018-02-16) --------------------- API modifications: * Parser::Current: bump to 2.2.9 and 2.3.6. (Stan Hu) * Deprecate Parser::Rewriter (Marc-Andre Lafortune) * Deprecate Parser::Source::Rewriter (Marc-Andre Lafortune) * Change relative order of insert_after_multi and insert_before_multi for non-empty ranges (#399). (Marc-Andre Lafortune) Features implemented: * parse.y: Reject brace after literal arg. This commit tracks upstream commits ruby/ruby@9987109 and ruby/ruby@7d6965f. (Ilya Bylich) * ruby-parse: add an option for emitting AST as JSON. (Alex Rattray) * Add Parser::TreeRewriter (Marc-Andre Lafortune) * Add Parser::Rewriter#wrap to ease compatibility (Marc-Andre Lafortune) * Add Parser::Source::TreeRewriter (Marc-Andre Lafortune) * Add Range#\<=> and include Comparable (Marc-Andre Lafortune) * parse.y: disable tLPAREN_ARG state after local variable. (Ilya Bylich) * SourceBuffer#source_range (Marc-Andre Lafortune) * Range#adjust (Marc-Andre Lafortune) * Range#contains?, contained?, crossing? (Marc-Andre Lafortune) * Add Range#with. (Marc-André Lafortune) * lexer.rl: Relax restriction spaces inside "\u{...}". This commit tracks upstream commit ruby/ruby@7e8b910. (Ilya Bylich) * lexer.rl: Allow newlines in heredoc identifiers. This commit tracks upstream commit ruby/ruby@d25faa4. (Ilya Bylich) * lexer.rl: allow do after cmdarg in paren. This commit tracks upstream commit ruby/ruby@046c943. (Ilya Bylich) Bugs fixed: * Fixed magic encoding comment parsing when encoding comment is on the first line but not in the beginning. (Ilya Bylich) * lexer.rl: Parse '1if' as '1 if', '1rescue' as '1 rescue'. (Ilya Bylich) * lexer.rl: Save state before entering a block comment to enter it after =end. (Ilya Bylich) * parse.y: Prohibit return in class/module body except for singleton class. Replaced @def_level/in_def? in favor of context.indirectly_in_def?. This commit tracks upstream commit ruby/ruby@8c15f40ac. (Ilya Bylich) * lexer.rl: Emit :&& as tSYMBEG + tANDOP, :|| as tSYMBEG + tOROP. (Ilya Bylich) * ruby{24,25}.y: preserve cmdarg stack around do/end block [Bug #13073]. (Mateusz Lenik) * Parser::Lexer::State: Fixed #lexpop to match MRI behavior. (Ilya Bylich) v2.4.0.2 (2017-11-13) --------------------- API modifications: * parser/current: update for 2.3.5 release. (whitequark) v2.4.0.1 (2017-11-13) --------------------- API modifications: * parser/current: update for 2.3.4 release. (whitequark) * parser/current: update for Ruby 2.1.10 and 2.2.7. (Koichi ITO) Features implemented: * Allow rescue/else/ensure inside do/end blocks. [Feature #12906] (Ilya Bylich) * ruby25.y: branch parser. (Ilya Bylich) Bugs fixed: * Source::Comment::Associator: skip -*- magic comments -*-. (Denis Defreyne) * lexer.rl: "- 5": allow whitespace after tUNARY_NUM. (whitequark) * *ruby*.y, Builders::Default: "+5": don't lose location of the "+". (whitequark) * ruby-rewrite: allow passing paths to --load. (whitequark) * builders/default: "def x; else; end": don't crash. (whitequark) v2.4.0.0 (2017-02-07) --------------------- API modifications: * parser/current: update for the 2.4 release. (whitequark) * rubymotion.y: "a&.b": implement safe navigation operator in RubyMotion. (Mark Villacampa) Bugs fixed: * lexer.rl: "a &. b": accept &. in EXPR_ARG also. (whitequark) v2.3.3.1 (2016-12-02) --------------------- API modifications: * parser/current: update 2.2 warning to 2.2.6 (Jordan Moncharmont) v2.3.3.0 (2016-11-28) --------------------- API modifications: * parser/current: update 2.3 branch to 2.3.3. (Philip Arndt) Bugs fixed: * ruby24.y: "a += b += raise :x": fix errors with chained op-assignments. (whitequark) * ruby24.y: "p p{p(p);p p}, tap do end": preserve cmdarg stack. (whitequark) * ruby24.y: "a b{c d}, :e do end": go to EXPR_ENDARG after literal. (whitequark) v2.3.2.0 (2016-11-20) --------------------- API modifications: * parser/current: update 2.3 branch to 2.3.2. (whitequark) * Introduce (procarg0) node for a single required block argument. (Ilya Bylich) Bugs fixed: * {macruby,ruby{19,20,21,22,23,24}}.y: "x::A += m x": treat as constant assignment. (whitequark) * ruby24.y: "x += raise y rescue nil": bind rescue tighter than tOP_ASGN. (whitequark) * ruby24.y: "x = raise y rescue nil": bind rescue tighter than =. (whitequark) * Builders::Default: "begin; else; 1; end": fix a crash. (whitequark) v2.3.1.3 (2016-09-17) --------------------- API modifications: * parser/current: latest 2.3 release is 2.3.2. (Chris Riddoch) Features implemented: * ruby24.y: "f (g rescue nil)": allow stmt after tLPAREN_ARG. (whitequark) Bugs fixed: * ruby{18,19,20,21,22,23,24}.y: parse trailing commas as mlhs for block args "a.b{ |c,| d }" (fixes #312) (John Backus) * Builders::Default: "begin; 1; else; 2; end": do not drop else. (whitequark) * Builders::Default: "a&.b &&= c": fix safe navigation in lhs of op-assignment. (Ilya Bylich) * AST::Processor: handle "csend" as "send". (#301) (Ilya Bylich) * Parser::AST::Processor: do not spuriously modify ASTs. (Ilya Bylich) * lexer.rl: "%w\a b\": lex backslash-delimited words literals. (Masataka Kuwabara) v2.3.1.2 (2016-06-02) --------------------- API modifications: * parser/current: update 2.2 warning to 2.2.5 (#295) (Kohei Suzuki) Bugs fixed: * AST_FORMAT: Fix `kwarg` example (#294) (Magnus Holm) v2.3.1.1 (2016-06-01) --------------------- Bugs fixed: * ruby{^18}.y: "lambda{|;a|a}": treat shadowarg as local inside block. (Ilya Bylich) * Builders::Default: "foo&.bar{}": emit csend in block properly. (whitequark) * runner.rb: re-add --23 (cremno) * runner.rb: make --24 actually use the 2.4 parser (cremno) v2.3.1.0 (2016-04-27) --------------------- Features implemented: * Parser::Current: update for Ruby 2.3.1. (whitequark) * Builders::Default: allow masgn in conditional context on >=Ruby 2.4. (whitequark) * ruby24.y: branch parser. (whitequark) Bugs fixed: * lexer.rl: "def x y; y A::B, ''; end": reject X:: in EXPR_ENDFN (fixes #285). (whitequark) v2.3.0.7 (2016-03-25) --------------------- API modifications: * Source::Diagnostic: handle ranges pointing to newlines (#273). (whitequark) Features implemented: * Parser::Base#tokenize: allow recovery from syntax errors. (whitequark) * lexer.rl: "a=1; a b: 1": allow label after command clashing with local. (whitequark) * lexer.rl: "undef %s(x)": emit %s literals in expr_fname in 2.3 mode. (whitequark) Bugs fixed: * Builders::Default: reject non-UTF-8 compatible literals. (whitequark) v2.3.0.6 (2016-02-14) --------------------- Bugs fixed: * lexer.rl: fix EOF location (closes #273). (whitequark) v2.3.0.5 (2016-02-12) --------------------- Bugs fixed: * lexer.rl: "%Q{\あ}": fix encoding of UTF-8 noop escapes. (whitequark) v2.3.0.3 (2016-02-06) --------------------- API modifications: * lexer.rl: "a?=b": lex via tCHARACTER (closes #255). (whitequark) v2.3.0.2 (2016-01-24) --------------------- Bugs fixed: * Add :csend to Parser::Meta::NODE_TYPES (Markus Schirp) * lexer/dedenter: "\<\ a: {}": state after -> is ENDFN, not END (fixes #203). (whitequark) * ruby{21,22}.y: "p -> { :hello }, a: 1 do end": lexpop cmdarg. (whitequark) v2.2.2.6 (2015-06-30) --------------------- API modifications: * parser/current: link to README from syntax deviation warning. (whitequark) v2.3.0.pre.2 (2015-06-15) ------------------------- Bugs fixed: * {macruby,rubymotion}.rb: add to gemspec. (whitequark) v2.3.0.pre.1 (2015-06-13) ------------------------- API modifications: * ruby20.y: revert 7f7f2a45. (whitequark) Features implemented: * Add RubyMotion support. (whitequark) * Add MacRuby support. (whitequark) Bugs fixed: * lexer.rl: "[/()\\1/, ?#]": fixes #198. (whitequark) v2.2.2.5 (2015-05-25) --------------------- API modifications: * Source::Comment::Associator: rework entirely; fixes #194 (Oleg Zubchenko) Features implemented: * Source::Map: add last_line, last_column delegation (Oleg Zubchenko) * Source::Range: add last_line, last_column methods (Oleg Zubchenko) Bugs fixed: * AST::Processor: add missing on_block_pass (fixes #196) (whitequark) v2.2.2.3 (2015-05-17) --------------------- API modifications: * lexer.rl: "a?? 1 : 0": squelch "invalid character syntax" warning. (whitequark) * parser/current: bump warnings to 2.0.1, 2.1.7, 2.2.3. (whitequark) Bugs fixed: * Source::Map: do not include :node in to_hash. (whitequark) * ruby{20,21,22}.y: "p ->() do a() do end end": save cmdarg. (whitequark) v2.2.2.2 (2015-04-28) --------------------- Bugs fixed: * lexer.rl: "%r.\..", "%r'\''": leave regexp metacharacters escaped (fixes #192). (whitequark) v2.2.2.1 (2015-04-18) --------------------- Bugs fixed: * builders/default: don't falsely diagnose multiline regexps (fixes #190). (whitequark) v2.2.0.4 (2015-04-15) --------------------- Features implemented: * Add Parser::Source::Map#node. (whitequark) * Add Parser::Source::Comment.associate_locations. (kubicle) v2.2.0.1 (2014-12-27) --------------------- Bugs fixed: * lexer.rl, lexer/literal: "{'a'::": don't parse as quoted label. (Peter Zotov) * Update syntax deviation warning to reflect 2.2 release. (Peter Zotov) v2.2.0 (2014-12-25) ------------------- Bugs fixed: * lexer.rl: "{'x':1,'y':{}}": fix lex_state after tLABEL_END. (Peter Zotov) v2.2.0.pre.8 (2014-11-19) ------------------------- API modifications: * parser/current: update 2.1 to 2.1.5 (fixes #174). (Peter Zotov) v2.2.0.pre.7 (2014-11-03) ------------------------- Bugs fixed: * parser/meta: add missing nodes (fixes #171). (Peter Zotov) v2.2.0.pre.6 (2014-10-28) ------------------------- API modifications: * parser/current: latest stable 2.1.x is 2.1.4, update warning. (hirocaster) v2.2.0.pre.5 (2014-10-03) ------------------------- Features implemented: * parser/current: add syntax deviation warning for 2.1.2. (Peter Zotov) * lexer.rl, ruby22.y: "{'x':1}": add tLABEL_END. (Peter Zotov) Bugs fixed: * lexer.rl, ruby{21,22}.y: "def a b:\nreturn": fix #164. (Peter Zotov) * Fix for `ruby-rewrite` not rewriting files if any rewriter was loaded, due to it getting confused about the filename. (Jon Frisby) v2.2.0.pre.4 (2014-08-09) ------------------------- Bugs fixed: * builders/default: "not(x)": fix source map (fixes #158). (Peter Zotov) v2.2.0.pre.3 (2014-07-02) ------------------------- Features implemented: * Raise EncodingError when source includes invalid byte sequence (Yuji Nakayama) Bugs fixed: * ruby{19,20,21}.y: "x def y; z do end end": save cmdarg stack to isolate command argument state from outer scope. (Peter Zotov) * ruby{19,20,21}.y: "tap (proc do end)": allow parenthesed do-block in cmdarg. (Peter Zotov) v2.2.0.pre.2 (2014-06-14) ------------------------- Bugs fixed: * ruby22.rb: include in gemspec. (Peter Zotov) v2.2.0.pre.1 (2014-06-12) ------------------------- Features implemented: * Add Source::Rewriter#transaction for atomic rewrite actions (Yuji Nakayama) * Raise Parser::ClobberingError for clobbering rewrite error (Yuji Nakayama) Bugs fixed: * parser/current: fix the fallback case (refs #146). (Peter Zotov) * ruby22.y: "tap (proc do end)": allow parenthesed do-block in cmdarg. (Peter Zotov) v2.1.9 (2014-04-21) ------------------- API modifications: * Extend ast dependency to >= 1.1 \< 3.0. (Peter Zotov) * parser/current: fallback to latest released Ruby instead of raising (fixes #140). (Peter Zotov) Features implemented: * ruby-rewrite: add a --modify switch for rewriters that modify AST (fixes #143). (Peter Zotov) Bugs fixed: * lexer.rl: don't fail to parse string literals in huge files (fixes #142). (Peter Zotov) v2.1.7 (2014-03-05) ------------------- Bugs fixed: * lexer.rl: make sure all invalid escapes lead to fatal errors (fixes #136). (Peter Zotov) v2.1.6 (2014-03-04) ------------------- Features implemented: * Add the list of all node types within Parser::Meta. (Markus Schirp) v2.1.5 (2014-02-24) ------------------- Bugs fixed: * Parser::Base, ruby18.y: don't try to lookup Encoding on 1.8 (fixes #133). (Peter Zotov) v2.1.4 (2014-01-11) ------------------- Features implemented: * ruby22.y: "x def y; z do end end": save cmdarg stack to isolate command argument state from outer scope. (Peter Zotov) * Add Ruby 2.2 syntax. (Peter Zotov) Bugs fixed: * Builders::Default: "super do end": super and zsuper are like send (fixes #131). (Peter Zotov) v2.1.3 (2014-01-10) ------------------- Bugs fixed: * lexer.rl: "/\//": don't include escaped delimiter in AST in its escaped form (fixes #125). (Peter Zotov) * Builders::Default: "return x y do end": correctly build AST for keywords followed by command (closes #129). (Peter Zotov) * Fix a bug where "ambiguous first argument" diagnostic was not emitted (Yuji Nakayama) * Source::Comment::Associator: don't die while associating with "__ENCODING__". (Peter Zotov) * ruby-parse: don't die when invoked with -L -e "__ENCODING__". (Peter Zotov) * Add missing source map for match-current-line (Yuji Nakayama) v2.1.2 (2014-01-05) ------------------- Bugs fixed: * lexer.rl: in "foo!= x", foo is tIDENTIFIER, not tFID (closes #126). (Peter Zotov) v2.1.1 (2013-12-25) ------------------- API modifications: * ruby21.y: Ruby 2.1 is released already. (Peter Zotov) v2.1.0 (2013-12-25) ------------------- API modifications: * Parser::Diagnostic: expose reason symbolically (closes #115, #116). (Ian MacLeod) * lexer.rl: coerce literals to UTF-8 in ASCII-encoded files if they contain \uXXXX (Peter Zotov) Bugs fixed: * builders/default: represent heredocs with dedicated map (fixes #100). (Peter Zotov) v2.1.0.pre1 (2013-11-12) ------------------------ API modifications: * lexer.rl: correctly handle __END__ with non-whitespace after it (Peter Zotov) * lexer.rl: handle \r in middle of a line as mere whitespace (Peter Zotov) * ruby{18,19,20,21}.y, builders/default: precisely point to tUMINUS_NUM. (Peter Zotov) Features implemented: * lexer.rl, ruby21.y, builders/default: rational/complex literals. (Peter Zotov) v2.0.0 (2013-10-06) ------------------- API modifications: * Source::Rewriter: raise an exception if updates clobber each other. (Peter Zotov) * Source::Range#inspect: use full class name. (Peter Zotov) * lexer.rl: make EOF tokens actually pointing at EOF and zero-length. (Peter Zotov) * Source::Range#column_range: raise RangeError if range spans >1 line. (Peter Zotov) * Source::Comment::Associator: fix argument order. (Peter Zotov) Features implemented: * Source::Comment: implement #inspect. (Peter Zotov) * Backport Array#bsearch from Ruby 2.0. (Peter Zotov) v2.0.0.pre8 (2013-09-15) ------------------------ API modifications: * lexer.rl: make lexing faster and improve parsing speed by ~60%. (Peter Zotov) v2.0.0.pre7 (2013-09-10) ------------------------ Features implemented: * Parser::Base: add #parse_with_comments, #parse_file_with_comments. (Trent Ogren) * lexer.rl (Ruby 2.1): "1end": lex non-exponent `e' separate from number. (Peter Zotov) Bugs fixed: * lexer.rl: "->*{}": tLAMBEG at expr_beg (fixes #103). (Peter Zotov) * Source::Rewriter: apply actions in the insertion order. (Josh Cheek) v2.0.0.pre5 (2013-07-31) ------------------------ Bugs fixed: * Remove a forgotten require. (Peter Zotov) v2.0.0.pre4 (2013-07-31) ------------------------ API modifications: * source/comment: make #loc/#location return Source::Map for consistency (fixes #96). (Peter Zotov) Features implemented: * source/comment/associator: skip shebang and encoding line by default (fixes #95). (Peter Zotov) Bugs fixed: * ruby{19,20,21}.y, lexer.rl, builders/default: correct begin for ?a (fixes #92). (Peter Zotov) * ruby{18,19,20,21}.y, builders/default: don't add spurious begin/end for string parts (refs #92). (Peter Zotov) * Activate `diagnostics.all_errors_are_fatal` on non-MRI Rubies as a workaround (closes #93). (Peter Zotov) v2.0.0.pre3 (2013-07-26) ------------------------ API modifications: * lexer.rl: add simple explicit output encoding for strings. (Peter Zotov) Features implemented: * Source::Buffer: support for -(dos|unix|mac) and utf8-mac encodings. (Peter Zotov) * Source::Range#resize. (Peter Zotov) * Significantly improve speed for large (>100k) and very large (>1M) files. (Peter Zotov) Bugs fixed: * ruby21.y: fix typos. (Peter Zotov) * builders/default: respect regexp encoding. (Peter Zotov) * lexer.rl: literal EOF (\0, \x04, \x1a) inside literals and comments. (Peter Zotov) * lexer.rl: "meth (lambda do end)" (1.8), "f x: -> do meth do end end": expr_cmdarg. (Peter Zotov) * lexer.rl: "\<\(scope){}; scope :foo": lambda identifier leakage. (Peter Zotov) * lexer.rl: "eh ?\r\n": don't eat tEH if followed by CRLF. (Peter Zotov) * lexer.rl: "f \<\<-TABLE\ndo |a,b|\nTABLE\nend": leave FSM after lexing heredoc. (Peter Zotov) * lexer.rl: "foo %\n bar": don't % at expr_arg as tSTRING_BEG. (Peter Zotov) * lexer.rl, lexer/literal: use lexer encoding for literal buffer. (Peter Zotov) * lexer.rl: "\u{9}": one-digit braced unicode escapes. (Peter Zotov) * Source::Buffer: don't chew \r from source lines. (Peter Zotov) * builders/default: don't die in eh_keyword_map if else branch is empty. (Peter Zotov) * lexer.rl: "0777_333": octal literals with internal underscores. (Peter Zotov) * lexer.rl: "let [] {}": goto tLBRACE_ARG after any closing braces. (Peter Zotov) * lexer.rl: "while not (1) do end": emit proper kDO* when in cond/cmdarg state. (Peter Zotov) * lexer.rl: "rescue=>": correctly handle rescue+assoc at expr_beg. (Peter Zotov) * lexer.rl: "puts 123do end": only trailing `_' and `e' in number are errors. (Peter Zotov) * lexer.rl: "begin; rescue rescue1; end": accept barewords at expr_mid. (Peter Zotov) * lexer.rl: "f.x!if 1": correct modifier handling in expr_arg. (Peter Zotov) * lexer.rl: "=begin\n#=end\n=end": only recognize =end at bol. (Peter Zotov) * builders/default: don't check for duplicate arguments in 1.8 mode. (Peter Zotov) * Don't attempt to parse magic encoding comment in 1.8 mode. (Peter Zotov) * lexer.rl: "\777": octal literals overflow. (Peter Zotov) * lexer.rl: "foo;\n__END__", "\na:b": whitespace in expr_value. (Peter Zotov) * lexer.rl: "\xE2\x80\x99": concatenation of byte escape sequences. (Peter Zotov) * lexer.rl: "E10", "E4U": don't conflate floats and identifiers. (Peter Zotov) * lexer.rl: "foo.bar= {1=>2}": return fid, = as separate tokens in expr_dot. (Peter Zotov) * lexer.rl: "def defined?": properly return defined? in expr_fname. (Peter Zotov) * lexer.rl: "Rainbows! do end", "foo.S?": allow bareword fid in expr_beg/dot. (Peter Zotov) v2.0.0.pre2 (2013-07-11) ------------------------ Features implemented: * Allow to differentiate between __FILE__/__LINE__ and literals (closes #89). (Peter Zotov) * Add attribute `diagnostic' to Parser::SyntaxError (closes #88). (Peter Zotov) Bugs fixed: * Don't treat byte order mark as an identifier (closes #91). (Peter Zotov) v2.0.0.beta10 (2013-07-02) -------------------------- Bugs fixed: * ruby-parse, ruby-rewrite: fix require of removed compatibility shim. (Peter Zotov) * lexer.rl: "def !@; end" unary bang. (Peter Zotov) v2.0.0.beta9 (2013-06-28) ------------------------- API modifications: * ruby{18,19,20,21}.y: removed obsolete warnings and linting. (Peter Zotov) Features implemented: * builders/default: add keyword source range for BEGIN/END (fixes #85). (Peter Zotov) Bugs fixed: * lexer.rl: "t=1;(a)?t:T" context sensitivity in expr_value (fixes #87). (Peter Zotov) * lexer.rl: keywords as labels, e.g. "unless:" (fixes #83, #84). (Peter Zotov) * lexer.rl: rectify usage of c_space/c_space_nl (fixes #81). (Peter Zotov) * ruby{18,19,20,21}.y: fix warnings for class/module in method body. (Peter Zotov) * lexer.rl: fix warning for ?\s. (Peter Zotov) * lexer.rl: expr_fname emits expr_beg-like keywords (fixes #82). (Peter Zotov) * lexer.rl: get rid of harmful nondeterminism in w_space (fixes #80). (Peter Zotov) * lexer/explanation: 1.8, 1.9 compatibility (fixes #76). (Peter Zotov) v2.0.0.beta8 (2013-06-24) ------------------------- Bugs fixed: * ast/processor: add missing node handlers (Yuji Nakayama) * ast/processor: rename some obsolete node handlers (Yuji Nakayama) v2.0.0.beta7 (2013-06-22) ------------------------- API modifications: * Implement a much more sane encoding model (closes #60). (Peter Zotov) Features implemented: * builders/default: (while-post) and (until-post); (kwbegin) (fixes #70). (Peter Zotov) Bugs fixed: * builders/default: don't swallow (begin) in "if (foo); end" (fixes #75). (Peter Zotov) v2.0.0.beta6 (2013-06-17) ------------------------- API modifications: * Get rid of "synthesized (nil)". If it's not in source, it's not in AST (fixes #71). (Peter Zotov) * lexer.rl, ruby{18,19,20,21}.y: source maps for interpolation (fixes #27). (Peter Zotov) Features implemented: * ruby{18,19,20,21}.y, builders/default: lvar-injecting match (closes #69). (Peter Zotov) * builders/default: implicit matches (refs #69). (Peter Zotov) * builders/default: flip-flops (refs #69). (Peter Zotov) Bugs fixed: * lexer.rl: fix an off-by-1 error in heredoc parsing. (Peter Zotov) * lexer.rl: don't fail on "alias $a $b\n# comment\nalias $c $d". (Peter Zotov) * builders/default: fix treatment of masgn in &&/|| (refs #69). (Peter Zotov) * ruby-parse: make -L command line option work again. (Peter Zotov) * ruby{18,19,20,21}.y: begin source map for "if foo\nthen bar end" (fixes #68). (Peter Zotov) * Source::Comment::Associator: gracefully terminate when out of comments (fixes #67). (Peter Zotov) v2.0.0.beta5 (2013-06-08) ------------------------- Bugs fixed: * Source::Buffer: better magic encoding comment recognition (fixes #65). (Peter Zotov) * lexer.rl: "{success?: true}" (fixes #66). (Peter Zotov) * Source::Buffer: if in doubt, treat data as UTF-8 (closes #60). (Peter Zotov) v2.0.0.beta4 (2013-06-05) ------------------------- Bugs fixed: * lexer.rl: fix heredoc parsing with CRLF line endings (closes #61). (Peter Zotov) * lexer.rl: fix premature ending of heredoc "\<\=1.9), _.* args (>1.9) (fixes #5). (Peter Zotov) * builders/default: detect duplicate argument names (refs #5). (Peter Zotov) * lexer.rl: "def foo bar: 1; end" (for ruby 2.1) (fixes #15). (Peter Zotov) * ruby21.y: required keyword arguments. (Peter Zotov) Bugs fixed: * ruby20.y, ruby21.y: "foo::A += 1" and friends (scoped constant op-asgn). (Peter Zotov) v1.0.1 (2013-04-18) ------------------- Bugs fixed: * builders/default: %Q{#{1}} and friends (fixes #14). (Peter Zotov) v1.0.0 (2013-04-17) ------------------- Features implemented: * ruby20.y: "meth 1 do end.fun(bar) {}" and friends. (Peter Zotov) * ruby20.y: keyword arguments. (Peter Zotov) * ruby20.y: { **kwsplat }. (Peter Zotov) v0.9.2 (2013-04-16) ------------------- Features implemented: * lexer.rl: "-> (a) {}". (Peter Zotov) * builders/default: treat &&/|| lhs/rhs as conditional context. (Peter Zotov) * ruby20.y: "class Foo \< a:b; end". (Peter Zotov) * lexer.rl: "class \<\< a:b". (Peter Zotov) * ruby19.y, ruby20.y: "f { || a:b }". (Peter Zotov) * ruby19.y, ruby20.y: "def foo() a:b end", "def foo\n a:b end". (Peter Zotov) * lexer.rl: %i/%I. (Peter Zotov) * lexer.rl: warn at "foo **bar". (Peter Zotov) * lexer.rl: ** at expr_beg is tDSTAR. (Peter Zotov) * ruby20.y: "f {|;\nvar\n|}". (Peter Zotov) * ruby20.y: "p () {}". (Peter Zotov) * ruby20.y: "p begin 1.times do 1 end end". (Peter Zotov) * ruby20.y: better error message for BEGIN{} in a method body. (Peter Zotov) Bugs fixed: * lexer.rl, ruby18.y, ruby19.y, ruby20.y: "%W[#{a}#@b foo #{c}]". (Peter Zotov) * lexer.rl: parse "foo=1; foo / bar #/" as method call on 1.8, division on 1.9. (Peter Zotov) * ruby18.y, ruby19.y: BEGIN{} does not introduce a scope. (Peter Zotov) * lexer.rl: improve whitespace handling. (Peter Zotov) v0.9.0 (2013-04-15) ------------------- API modifications: * runtime compatibility with 1.8.7. (Peter Zotov) Features implemented: * builders/default: check for multiple assignment in conditions (fixes #4). (Peter Zotov) * builders/default: check if actual block and blockarg are passed (fixes #6). (Peter Zotov) * ruby19.y: "foo::A += m foo". (Peter Zotov) * ruby18.y, ruby19.y: "rescue without else is useless" warning. (Peter Zotov) * ruby19.y: 99.16% coverage, 100% sans error recovery. (Peter Zotov) * ruby19.y: mlhs arguments "def foo((a, *, p)) end". (Peter Zotov) * ruby19.y: "fun (1) {}" and friends. (Peter Zotov) * ruby19.y: mlhs post variables "a, *b, c = ...". (Peter Zotov) * builders/default: @@a |= 1; def f; @@a |= 1; end. (Peter Zotov) * ruby18.y: fun (&foo). (Peter Zotov) * ruby18.y: block formal arguments. 99.33% coverage. (Peter Zotov) * ruby18.y: fun(meth 1 do end); fun(1, meth 1 do end). (Peter Zotov) * ruby18.y: "meth 1 do end.fun(bar)" and friends. (Peter Zotov) * ruby18.y: foo () {}; a.foo () {}; a::foo () {}. (Peter Zotov) * ruby18.y: various call argument combinations. (Peter Zotov) * ruby18.y: foo (1, 2); foo (). (Peter Zotov) * ruby18.y: foo (1).to_i. (Peter Zotov) * ruby18.y: fun{}; fun(){}; fun(1){}; fun do end. (Peter Zotov) * ruby18.y: foo.fun bar. (Peter Zotov) * lexer.rl, ruby18.y: add support for cond/cmdarg stack states. (Peter Zotov) * ruby18.y: rescue. (Peter Zotov) * ruby18.y: begin end while|until (tests only). (Peter Zotov) * ruby18.y: case. (Peter Zotov) * ruby18.y: foo[m bar]. (Peter Zotov) * ruby18.y: for..in. (Peter Zotov) Bugs fixed: * lexer.rl: handle : at expr_beg as a symbol, at expr_end as tCOLON. (Peter Zotov) * lexer.rl: handle "rescue #foo\nbar". (Peter Zotov) * lexer.rl: handle "foo.#bar\nbaz". (Peter Zotov) * lexer.rl: fix location info for symbols. (Peter Zotov) * lexer.rl: handle \\ at expr_beg. (Peter Zotov) * lexer.rl: emit tCONSTANT/tIDENTIFIER/tFID in expr_dot. (Peter Zotov) * lexer.rl: correctly disambiguate "x ::Foo" as tIDENT, tCOLON3, ... (Peter Zotov) * lexer.rl: correctly disambiguate ident!= as tIDENTIFIER, tNEQ. (Peter Zotov) * lexer.rl: correctly report the %r%% tREGEXP_BEG value as %r%. (Peter Zotov) * ruby19.y: emit correct error on "nil = 1" and friends. (Peter Zotov) * ruby19.y: 1.9 permits empty symbol literals. (Peter Zotov) * ruby18.y: foo(&bar). (Peter Zotov) * lexer.rl: don't lookahead two tokens on "func %{str} do". (Peter Zotov) * lexer.rl: fix lexing of non-interp heredoc with trailing backslash. (Peter Zotov) * lexer.rl: fix erroneous number and =begin lookahead in expr_beg. (Peter Zotov) * lexer.rl: fix stack corruption. (Peter Zotov) * lexer.rl: /= at expr_beg. (Peter Zotov) * lexer.rl: class\<\ [:test] Rake::TestTask.new do |t| t.libs = %w(test/ lib/) t.test_files = FileList["test/**/test_*.rb"] t.warning = false end task :test_cov do ENV['COVERAGE'] = '1' Rake::Task['test'].invoke end task :build => [:generate_release, :changelog] GENERATED_FILES = %w(lib/parser/lexer.rb lib/parser/ruby18.rb lib/parser/ruby19.rb lib/parser/ruby20.rb lib/parser/ruby21.rb lib/parser/ruby22.rb lib/parser/ruby23.rb lib/parser/ruby24.rb lib/parser/ruby25.rb lib/parser/ruby26.rb lib/parser/ruby27.rb lib/parser/macruby.rb lib/parser/rubymotion.rb) CLEAN.include(GENERATED_FILES) ENCODING_COMMENT = "# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*-\n" desc 'Generate the Ragel lexer and Racc parser.' task :generate => GENERATED_FILES do Rake::Task[:ragel_check].invoke GENERATED_FILES.each do |filename| content = File.read(filename) content = ENCODING_COMMENT + content unless content.start_with?(ENCODING_COMMENT) File.open(filename, 'w') do |io| io.write content end end end task :regenerate => [:clean, :generate] desc 'Generate the Ragel lexer and Racc parser in release mode.' task :generate_release => [:clean_env, :regenerate] task :clean_env do ENV.delete 'RACC_DEBUG' end task :ragel_check do require 'cliver' Cliver.assert('ragel', '~> 6.7') end desc 'Generate YARD documentation' task :yard => :generate do sh('yard doc') end PAGES_REPO = 'git@github.com:whitequark/parser' desc "Build and deploy documentation to GitHub pages" task :pages do system "git clone #{PAGES_REPO} gh-temp/ -b gh-pages; rm gh-temp/* -rf; touch gh-temp/.nojekyll" or abort system "yardoc -o gh-temp/;" or abort system "cd gh-temp/; git add -A; git commit -m 'Updated pages.'; git push -f origin gh-pages" or abort FileUtils.rm_rf 'gh-temp' end desc 'Generate Changelog' task :changelog do fs = "\u{fffd}" format = "%d#{fs}%s#{fs}%an#{fs}%ai" # Format: version => { commit-class => changes } changelog = Hash.new do |hash, version| hash[version] = Hash.new do |hash, klass| hash[klass] = [] end end branch = `git describe HEAD --all`.strip.gsub(/.+\/([^\/]+)$/, '\1') IO.popen("git log --pretty='#{format}' " \ "remotes/origin/2.0 remotes/origin/2.1 remotes/origin/2.2 #{branch}", 'r') do |io| current_version = nil io.each_line do |line| version, message, author, date = line. match(/^(?: \((.*)\))?#{fs}(.*)#{fs}(.*)#{fs}(.*)$/o).captures date = Date.parse(date) current_version = "#{$1} (#{date})" if version =~ /(v[\d\w.]+)/ current_version = "Not released (#{date})" \ if version =~ /(^| |\/)#{Regexp.escape branch}$/ && !branch.start_with?('v') next if current_version.nil? changelog[current_version] # add a hash next if message !~ /^[+*-]/ changelog[current_version][message[0]] << "#{message[1..-1]} (#{author})" end end commit_classes = { '*' => 'API modifications:', '+' => 'Features implemented:', '-' => 'Bugs fixed:', } File.open('CHANGELOG.md', 'w') do |io| io.puts 'Changelog' io.puts '=========' io.puts changelog.each do |version, commits| next if commits.empty? io.puts version io.puts '-' * version.length io.puts commit_classes.each do |sigil, description| next unless commits[sigil].any? io.puts description commits[sigil].uniq.each do |commit| io.puts " * #{commit.gsub('<', '\<').lstrip}" end io.puts end end end sh('git commit CHANGELOG.md -m "Update changelog." || true') end rule '.rb' => '.rl' do |t| sh "ragel -F1 -R #{t.source} -o #{t.name}" end rule '.rb' => '.y' do |t| opts = [ "--superclass=Parser::Base", t.source, "-o", t.name ] opts << "--no-line-convert" unless ENV['RACC_DEBUG'] opts << "--debug" if ENV['RACC_DEBUG'] sh "racc", *opts end task :test => [:generate] parser-2.7.0.2/lib/0000755000004100000410000000000013617025313013753 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/0000755000004100000410000000000013617025313015247 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/ruby22.y0000644000004100000410000024360313617025313016576 0ustar www-datawww-dataclass Parser::Ruby22 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 tUPLUS tUMINUS tUNARY_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 tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER tRATIONAL tIMAGINARY tLABEL_END prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { result = @builder.preexe(val[0], val[1], val[2], val[3]) } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt_or_begin { result = [ val[0] ] } | stmts terms stmt_or_begin { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt_or_begin: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { diagnostic :error, :begin_in_method, nil, val[0] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_call { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_call { @builder.op_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL mrhs_arg { result = @builder.multi_assign(val[0], val[1], val[2]) } | expr command_asgn: lhs tEQL command_call { result = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL command_asgn { result = @builder.assign(val[0], val[1], val[2]) } expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } fcall: operation command: fcall command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | fcall command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tDOT operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tDOT operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 | tDSTAR | 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 = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) } | var_lhs tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | tCOLON3 tCONSTANT tOP_ASGN arg { const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) } | backref tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM simple_numeric tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) } call_args { @lexer.cmdarg = val[0] result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs_arg: mrhs { result = @builder.array(nil, val[0], nil) } | arg_value mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } bodystmt kEND { @lexer.cmdarg = val[1] result = @builder.begin_keyword(val[0], val[2], val[3]) } | tLPAREN_ARG { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } expr { @lexer.state = :expr_endarg } opt_nl tRPAREN { @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) } | tLPAREN_ARG { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], nil, val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | fcall brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.push_cmdarg @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.push_cmdarg } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { result = val[0]. push(@builder.restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { result = [ @builder.restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { result = [ @builder.restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.restarg(val[0]), *val[2] ] } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_block_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_block_args_tail: tCOMMA block_args_tail { result = val[1] } | # nothing { result = [] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_block_args_tail { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | block_args_tail opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: opt_nl { result = [] } | opt_nl tSEMI bv_decls opt_nl { result = val[2] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } lambda_body { @lexer.cmdarg = val[2] @lexer.cmdarg.lexpop result = [ val[1], val[3] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call dot_or_colon operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call dot_or_colon operation2 opt_paren_args brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | block_call dot_or_colon operation2 command_args do_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } method_call: fcall paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value tDOT paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } | kDO { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = @builder.string_compose(val[0], val[1], val[2]) } | tSTRING { result = @builder.string(val[0]) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = @builder.xstring_compose(val[0], val[1], val[2]) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } symbols: tSYMBOLS_BEG symbol_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } symbol_list: # nothing { result = [] } | symbol_list word tSPACE { result = val[0] << @builder.word(val[1]) } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } qsym_list: # nothing { result = [] } | qsym_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.symbol_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cond.push(false) @lexer.cmdarg.push(false) } compstmt tSTRING_DEND { @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: simple_numeric { result = val[0] } | tUNARY_NUM simple_numeric =tLOWEST { if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end } simple_numeric: tINTEGER { result = @builder.integer(val[0]) } | tFLOAT { result = @builder.float(val[0]) } | tRATIONAL { result = @builder.rational(val[0]) } | tIMAGINARY { result = @builder.complex(val[0]) } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: term { result = nil } | tLT { @lexer.state = :expr_value } expr_value term { result = [ val[0], val[2] ] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | { result = @lexer.in_kwarg @lexer.in_kwarg = true } f_args term { @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_args_tail: tCOMMA args_tail { result = val[1] } | # nothing { result = [] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | args_tail { result = val[0] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] result = val[0] } f_arg_asgn: f_norm_arg { result = val[0] } f_arg_item: f_arg_asgn { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_label: tLABEL { check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] } f_kw: f_label arg_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kw: f_label primary_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kwarg: f_block_kw { result = [ val[0] ] } | f_block_kwarg tCOMMA f_block_kw { result = val[0] << val[2] } f_kwarg: f_kw { result = [ val[0] ] } | f_kwarg tCOMMA f_kw { result = val[0] << val[2] } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.kwrestarg(val[0]) ] } f_opt: f_arg_asgn tEQL arg_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: f_arg_asgn tEQL primary_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } | tSTRING_BEG string_contents tLABEL_END arg_value { result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) } | tDSTAR arg_value { result = @builder.kwsplat(val[0], val[1]) } 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 { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 22 end def default_encoding Encoding::UTF_8 end parser-2.7.0.2/lib/parser/messages.rb0000644000004100000410000001265313617025313017412 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # Diagnostic messages (errors, warnings and notices) that can be generated. # # @see Diagnostic # # @api public # MESSAGES = { # Lexer errors :unicode_point_too_large => 'invalid Unicode codepoint (too large)', :invalid_escape => 'invalid escape character syntax', :incomplete_escape => 'incomplete character syntax', :invalid_hex_escape => 'invalid hex escape', :invalid_unicode_escape => 'invalid Unicode escape', :unterminated_unicode => 'unterminated Unicode escape', :escape_eof => 'escape sequence meets end of file', :string_eof => 'unterminated string meets end of file', :regexp_options => 'unknown regexp options: %{options}', :cvar_name => "`%{name}' is not allowed as a class variable name", :ivar_name => "`%{name}' is not allowed as an instance variable name", :trailing_in_number => "trailing `%{character}' in number", :empty_numeric => 'numeric literal without digits', :invalid_octal => 'invalid octal digit', :no_dot_digit_literal => 'no . floating literal anymore; put 0 before dot', :bare_backslash => 'bare backslash only allowed before newline', :unexpected => "unexpected `%{character}'", :embedded_document => 'embedded document meets end of file (and they embark on a romantic journey)', :heredoc_id_has_newline => 'here document identifier across newlines, never match', :heredoc_id_ends_with_nl => 'here document identifier ends with a newline', :unterminated_heredoc_id => 'unterminated heredoc id', # Lexer warnings :invalid_escape_use => 'invalid character syntax; use ?%{escape}', :ambiguous_literal => 'ambiguous first argument; put parentheses or a space even after the operator', :ambiguous_prefix => "`%{prefix}' interpreted as argument prefix", :triple_dot_at_eol => '... at EOL, should be parenthesized', # Parser errors :nth_ref_alias => 'cannot define an alias for a back-reference variable', :begin_in_method => 'BEGIN in method', :backref_assignment => 'cannot assign to a back-reference variable', :invalid_assignment => 'cannot assign to a keyword', :module_name_const => 'class or module name must be a constant literal', :unexpected_token => 'unexpected token %{token}', :argument_const => 'formal argument cannot be a constant', :argument_ivar => 'formal argument cannot be an instance variable', :argument_gvar => 'formal argument cannot be a global variable', :argument_cvar => 'formal argument cannot be a class variable', :duplicate_argument => 'duplicate argument name', :empty_symbol => 'empty symbol literal', :odd_hash => 'odd number of entries for a hash', :singleton_literal => 'cannot define a singleton method for a literal', :dynamic_const => 'dynamic constant assignment', :const_reassignment => 'constant re-assignment', :module_in_def => 'module definition in method body', :class_in_def => 'class definition in method body', :unexpected_percent_str => '%{type}: unknown type of percent-literal', :block_and_blockarg => 'both block argument and literal block are passed', :masgn_as_condition => 'multiple assignment in conditional context', :block_given_to_yield => 'block given to yield', :invalid_regexp => '%{message}', :invalid_return => 'Invalid return in class/module body', :csend_in_lhs_of_masgn => '&. inside multiple assignment destination', :cant_assign_to_numparam => 'cannot assign to numbered parameter %{name}', :ordinary_param_defined => 'ordinary parameter is defined', :numparam_used_in_outer_scope => 'numbered parameter is already used in an outer scope', :circular_argument_reference => 'circular argument reference %{var_name}', :pm_interp_in_var_name => 'symbol literal with interpolation is not allowed', :lvar_name => "`%{name}' is not allowed as a local variable name", :duplicate_variable_name => 'duplicate variable name %{name}', :duplicate_pattern_key => 'duplicate hash pattern key %{name}', # Parser warnings :useless_else => 'else without rescue is useless', # Parser errors that are not Ruby errors :invalid_encoding => 'literal contains escape sequences incompatible with UTF-8', # Rewriter diagnostics :invalid_action => 'cannot %{action}', :clobbered => 'clobbered by: %{action}', # Rewriter diagnostics :different_replacements => 'different replacements: %{replacement} vs %{other_replacement}', :swallowed_insertions => 'this replacement:', :swallowed_insertions_conflict => 'swallows some inner rewriting actions:', :crossing_deletions => 'the deletion of:', :crossing_deletions_conflict => 'is crossing:', :crossing_insertions => 'the rewriting action on:', :crossing_insertions_conflict => 'is crossing that on:', }.freeze end parser-2.7.0.2/lib/parser/ruby23.y0000644000004100000410000024442413617025313016601 0ustar www-datawww-dataclass Parser::Ruby23 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 tUPLUS tUMINUS tUNARY_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 tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER tRATIONAL tIMAGINARY tLABEL_END tANDDOT prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { result = @builder.preexe(val[0], val[1], val[2], val[3]) } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt_or_begin { result = [ val[0] ] } | stmts terms stmt_or_begin { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt_or_begin: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { diagnostic :error, :begin_in_method, nil, val[0] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_call { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_call { @builder.op_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL mrhs_arg { result = @builder.multi_assign(val[0], val[1], val[2]) } | expr command_asgn: lhs tEQL command_call { result = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL command_asgn { result = @builder.assign(val[0], val[1], val[2]) } expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } fcall: operation command: fcall command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | fcall command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value call_op operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value call_op operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 | tDSTAR | 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 = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) } | var_lhs tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | tCOLON3 tCONSTANT tOP_ASGN arg { const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) } | backref tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM simple_numeric tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) } call_args { @lexer.cmdarg = val[0] result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs_arg: mrhs { result = @builder.array(nil, val[0], nil) } | arg_value mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } bodystmt kEND { @lexer.cmdarg = val[1] result = @builder.begin_keyword(val[0], val[2], val[3]) } | tLPAREN_ARG { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } expr { @lexer.state = :expr_endarg } opt_nl tRPAREN { @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) } | tLPAREN_ARG { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], nil, val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | fcall brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.push_cmdarg @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.push_cmdarg } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { result = val[0]. push(@builder.restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { result = [ @builder.restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { result = [ @builder.restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.restarg(val[0]), *val[2] ] } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_block_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_block_args_tail: tCOMMA block_args_tail { result = val[1] } | # nothing { result = [] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_block_args_tail { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | block_args_tail opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: opt_nl { result = [] } | opt_nl tSEMI bv_decls opt_nl { result = val[2] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } lambda_body { @lexer.cmdarg = val[2] @lexer.cmdarg.lexpop result = [ val[1], val[3] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call dot_or_colon operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call dot_or_colon operation2 opt_paren_args brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | block_call dot_or_colon operation2 command_args do_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } method_call: fcall paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value call_op operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value call_op paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } | kDO { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tSTRING { string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } symbols: tSYMBOLS_BEG symbol_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } symbol_list: # nothing { result = [] } | symbol_list word tSPACE { result = val[0] << @builder.word(val[1]) } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } qsym_list: # nothing { result = [] } | qsym_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.symbol_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cond.push(false) @lexer.cmdarg.push(false) } compstmt tSTRING_DEND { @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: simple_numeric { result = val[0] } | tUNARY_NUM simple_numeric =tLOWEST { if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end } simple_numeric: tINTEGER { result = @builder.integer(val[0]) } | tFLOAT { result = @builder.float(val[0]) } | tRATIONAL { result = @builder.rational(val[0]) } | tIMAGINARY { result = @builder.complex(val[0]) } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: tLT { @lexer.state = :expr_value } expr_value term { result = [ val[0], val[2] ] } | # nothing { result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | { result = @lexer.in_kwarg @lexer.in_kwarg = true } f_args term { @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_args_tail: tCOMMA args_tail { result = val[1] } | # nothing { result = [] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | args_tail { result = val[0] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] result = val[0] } f_arg_asgn: f_norm_arg { result = val[0] } f_arg_item: f_arg_asgn { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_label: tLABEL { check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] } f_kw: f_label arg_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kw: f_label primary_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kwarg: f_block_kw { result = [ val[0] ] } | f_block_kwarg tCOMMA f_block_kw { result = val[0] << val[2] } f_kwarg: f_kw { result = [ val[0] ] } | f_kwarg tCOMMA f_kw { result = val[0] << val[2] } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.kwrestarg(val[0]) ] } f_opt: f_arg_asgn tEQL arg_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: f_arg_asgn tEQL primary_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } | tSTRING_BEG string_contents tLABEL_END arg_value { result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) } | tDSTAR arg_value { result = @builder.kwsplat(val[0], val[1]) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: call_op | tCOLON2 call_op: tDOT { result = [:dot, val[0][1]] } | tANDDOT { result = [:anddot, val[0][1]] } opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 23 end def default_encoding Encoding::UTF_8 end parser-2.7.0.2/lib/parser/ruby22.rb0000644000004100000410000076434413617025313016743 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby22 < Parser::Base def version 22 end def default_encoding Encoding::UTF_8 end ##### State transition tables begin ### clist = [ '-578,568,568,-101,860,-104,625,-578,-578,-578,893,568,-578,-578,-578', '217,-578,589,218,-98,647,979,214,215,-83,-578,-578,-578,-578,-100,-103', '-99,-101,-69,895,-99,-578,-578,568,-578,-578,-578,-578,-578,610,444', '-105,-102,-100,113,715,568,612,-91,112,646,218,897,-97,-102,-99,770', '-100,214,215,899,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578', '-578,-578,-578,-574,-93,-578,-578,-578,715,772,-578,715,815,-578,214', '215,-578,-578,-575,-578,-574,-578,268,-578,-105,-578,-578,268,-578,-578', '-578,-578,-578,609,-578,-578,-578,-95,-91,218,-100,611,113,113,-101', '842,588,112,112,-101,-578,-89,113,-578,-578,-578,-578,112,-578,-476', '-578,-91,-94,-90,-92,-101,-476,-476,-476,113,-93,-476,-476,-476,112', '-476,-99,113,-96,113,218,-99,112,-476,112,-476,-476,-476,-102,-100,-88', '-93,113,-102,-100,-476,-476,112,-476,-476,-476,-476,-476,899,-91,647', '214,215,218,267,-93,268,113,-93,267,113,806,112,574,268,112,814,-93', '597,218,-476,-476,-476,-476,-476,-476,-476,-476,-476,-476,-476,-476', '-476,-476,-286,646,-476,-476,-476,-91,-476,-476,-91,905,-476,580,597', '-476,-476,581,-476,-91,-476,-412,-476,-571,-476,-476,907,-476,-476,-476', '-476,-476,909,-476,-491,-476,771,548,263,545,544,543,-286,546,91,92', '263,597,-491,-476,599,598,-476,-476,-476,-476,490,-476,-578,-476,747', '267,212,113,-476,-578,-578,-578,112,267,238,-578,-578,-412,-578,-476', '488,-487,599,598,-412,-89,-476,-578,-487,486,-578,-571,749,-412,-98', '-476,-102,515,-578,-578,260,-578,-578,-578,-578,-578,235,261,-98,477', '237,236,-412,-96,-571,599,598,602,527,217,-490,526,-105,833,91,92,93', '94,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578', '-578,-578,647,-578,-578,-578,647,631,-578,-483,915,-578,-104,-574,-578', '597,-483,-578,446,-578,918,-578,515,-578,-578,-572,-578,-578,-578,-578', '-578,-479,-578,-578,-578,-97,-578,646,-479,-479,-479,646,-482,-479,-479', '-479,218,-479,-578,-482,238,-578,-578,79,-92,-479,-578,-479,-479,-479', '922,93,94,-101,-578,80,-264,-479,-479,-95,-479,-479,-479,-479,-479,81', '-481,-479,-104,599,598,595,235,-481,-479,445,237,236,548,-572,545,544', '543,-479,546,443,662,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479', '-479,-479,-479,-479,399,-572,-479,-479,-479,-578,-479,-479,975,-490', '-479,597,-578,-479,-479,597,-479,-574,-479,597,-479,-578,-479,-479,597', '-479,-479,-479,-479,-479,-289,-479,975,-479,-484,756,218,-289,-289,-289', '-578,-484,-290,-289,-289,527,-289,-479,529,-290,-479,-479,-479,-479', '260,-479,-88,-479,-290,956,597,261,-479,626,932,-97,-289,-289,939,-289', '-289,-289,-289,-289,940,599,598,604,386,599,598,608,-90,599,598,600', '-485,-486,599,598,613,-99,527,-485,-486,529,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,-289,-289,-93,584,-289,-289,-289', '-488,630,218,938,-102,-289,317,-488,-289,599,598,595,585,-289,113,-289', '-488,-289,-289,112,-289,-289,-289,-289,-289,-289,-289,121,-289,-479', '553,316,-289,-289,-289,958,-479,-289,-289,-289,556,-289,-289,214,215', '-289,-289,-489,-94,-476,-289,-289,-289,-289,-489,113,-476,-103,214,215', '112,-289,-289,-489,-289,-289,-289,-289,-289,984,113,960,-279,564,563', '112,985,961,557,-279,548,966,545,544,543,983,546,527,-279,736,529,-289', '-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,113', '553,-289,-289,-289,112,773,-289,210,692,-289,556,701,-289,-289,211,-289', '969,-289,971,-289,704,-289,-289,209,-289,-289,-289,-289,-289,973,-289', '548,-289,545,544,543,548,546,545,544,543,975,546,564,563,975,-289,257', '557,-289,-289,-289,-289,584,-289,986,-289,564,563,987,583,-103,290,69', '70,71,9,57,701,585,113,63,64,701,988,112,67,904,65,66,68,30,31,72,73', '116,117,118,119,120,29,28,27,101,100,102,103,396,989,19,214,215,398', '397,635,8,45,292,10,105,104,106,95,56,97,96,98,899,99,107,108,899,91', '92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,-289,231,232', '-332,899,252,253,-289,40,994,-332,33,-575,958,58,59,-289,213,60,-332', '35,235,899,241,44,237,236,958,233,234,245,243,239,20,240,837,806,975', '89,79,82,83,-279,84,86,85,87,837,806,-279,-575,80,88,-574,256,682,-238', '208,-279,62,207,81,93,94,290,69,70,71,9,57,206,109,576,63,64,677,520', '218,67,577,65,66,68,30,31,72,73,666,575,-83,682,683,29,28,27,101,100', '102,103,741,742,19,685,743,107,108,635,8,45,292,10,105,104,106,95,56', '97,96,98,218,99,107,108,958,91,92,42,43,41,238,242,247,248,249,244,246', '254,255,250,251,-290,231,232,584,689,252,253,-290,40,692,938,33,693', '695,58,59,-290,699,60,585,35,235,697,241,44,237,236,218,233,234,245', '243,239,20,240,707,708,709,89,79,82,83,507,84,86,85,87,711,218,508,574', '80,88,718,256,736,746,750,506,62,751,81,93,94,290,69,70,71,9,57,-262', '757,-489,63,64,238,238,238,67,-489,65,66,68,30,31,72,73,238,-489,477', '477,637,29,28,27,101,100,102,103,634,263,19,624,218,623,775,620,8,45', '292,10,105,104,106,95,56,97,96,98,218,99,107,108,619,91,92,42,43,41', '238,242,247,248,249,244,246,254,255,250,251,-289,231,232,-488,257,252', '253,-289,40,-261,-488,33,-575,617,58,59,-289,614,60,-488,35,235,488', '241,44,237,236,490,233,234,245,243,239,20,240,799,677,218,89,79,82,83', '-290,84,86,85,87,263,263,-290,677,80,88,238,256,806,218,218,-290,62', '1013,81,93,94,290,69,70,71,9,57,1014,831,517,63,64,579,218,806,67,518', '65,66,68,30,31,72,73,841,442,578,218,388,29,28,27,101,100,102,103,574', '935,19,545,544,543,490,546,8,45,292,10,105,104,106,95,56,97,96,98,218', '99,107,108,531,91,92,42,43,41,238,242,247,248,249,244,246,254,255,250', '251,-289,231,232,440,850,252,253,-289,40,530,441,33,-575,1015,58,59', '-289,975,60,442,35,235,-263,241,44,237,236,218,233,234,245,243,239,20', '240,238,859,516,89,79,82,83,512,84,86,85,87,263,218,272,509,80,88,502', '256,862,692,865,867,62,869,81,93,94,290,69,70,71,9,57,871,218,873,63', '64,874,501,877,67,218,65,66,68,30,31,72,73,116,117,118,119,120,29,28', '27,101,100,102,103,879,935,19,545,544,543,880,546,8,45,292,10,105,104', '106,95,56,97,96,98,677,99,107,108,-68,91,92,42,43,41,238,242,247,248', '249,244,246,254,255,250,251,882,231,232,498,-261,252,253,886,40,888', '891,33,692,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239', '20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,290', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,116,117,118,119,120', '29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246,254,255', '250,251,,231,232,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237', '236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',256,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244', '246,254,255,250,251,,231,232,,,252,253,,40,,,33,,,58,59,,,60,,35,235', ',241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,256,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247', '248,249,244,246,254,255,250,251,,231,232,,,252,253,,40,,,33,,,58,59', ',,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,290,69,70,71,9,57,,', ',63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19', ',,,,,8,45,292,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,238,242,247,248,249,244,246,254,255,250,251,,231,232,,,252,253,,40', ',,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,290,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,292,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,,231,232,,,252', '253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239', '20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,290', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,292,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,,231', '232,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234', '245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,218,256,,,', ',62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246,254', '255,250,251,,231,232,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44', '237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,,256,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249', '244,246,254,255,250,251,,231,232,,,252,253,,40,,,33,,,58,59,,,60,,35', '235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,256,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45', '292,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242', '247,248,249,244,246,254,255,250,251,,231,232,,,252,253,,40,,,294,,,58', '59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,5,69,70,71,9,57,', ',,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,', '19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,238,242,247,248,249,244,246,254,255,250,251,,231,232,,,252,253,,40', ',,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,290,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,292,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,,231,232,,,252', '253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239', '20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,290', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,292,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,,231', '232,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234', '245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62', ',81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,101,100,102,103,238,548,19,545,544,543,,546,8,45,292,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,,235,,,,237,236', '701,233,234,,,,,,,704,,40,,,33,,,58,59,,,60,,35,235,,,44,237,236,,233', '234,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,548,,545,544,543,62', '546,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,701,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246', '254,255,250,251,,-597,-597,,,252,253,,40,,,294,,,58,59,,,60,,35,235', ',241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,548,,545,544,543,62,546,81,93,94,290,69,70,71,9,57,,,', '63,64,,,,67,,65,66,68,30,31,72,73,,,,,701,29,28,27,101,100,102,103,', '548,19,545,544,543,,546,8,45,292,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,238,-597,-597,-597,-597,244,246,,701,-597,-597,', ',,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245', '243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,548,,545,544,543', '62,546,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,701,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,-597,-597,-597,-597,244', '246,,,-597,-597,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237', '236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,5,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246', '254,255,250,251,,-597,-597,,,252,253,,40,,,33,,,58,59,,,60,,35,235,', '241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,,,,,,,,,', ',,,,,,252,253,,40,,,294,,,58,59,,,60,,35,235,,241,44,237,236,,233,234', ',,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94', '5,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,238,,,,,,,,,,,,,,,,252,253,,40,,,33,,,58,59,,,60,,35', '235,,241,44,237,236,,233,234,,,239,20,240,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,-597,-597,-597', '-597,244,246,,,-597,-597,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235', ',241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248', '249,244,246,254,,250,251,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235', ',241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292,10', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,-597,-597', '-597,-597,244,246,,,-597,-597,,,,,,252,253,,40,,,33,,,58,59,,,60,,35', '235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,,,,,,', ',,,,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233', '234,,,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81', '93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246,,,250,251', ',,,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234', '245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81', '93,94,290,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,19,,,,,,8,45,292,10,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,238,,,,,,,,,,,,,,,,252,253,,40,,,33,', ',58,59,,,60,,35,235,,241,44,237,236,,233,234,,,239,20,240,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,290,69,70,71,9,57,,,,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,8,45,292,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', '238,-597,-597,-597,-597,244,246,,,-597,-597,,,,,,252,253,,40,,,33,,', '58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,-597,-597', '-597,-597,244,246,,,-597,-597,,,,,,252,253,,223,,,229,,,58,59,,,60,', ',235,,241,44,237,236,,233,234,245,243,239,228,240,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,,,,,,,,,,,,,', ',,252,253,,223,,,229,,,58,59,,,60,,,235,,241,44,237,236,,233,234,,,', '228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,238,,,,,,,,,,,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241', '44,237,236,,233,234,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,', '69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28', '27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,284,99', '107,108,,91,92,42,43,41,238,,,,,,,,,,,,,,,,252,253,,223,,,229,,,58,59', ',,60,,281,235,279,,44,237,236,285,233,234,,,,228,,,,,89,282,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,', '229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97', '96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,', '58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89,282,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56', '97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89,282,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,', '229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89,282,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309', '310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,307,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,,,313,,,,,,,,,,,,,,,,,,,,303,', ',299,,,58,59,,,60,,298,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73', ',,,,,305,306,312,101,100,102,103,,,230,,,,,,,307,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,,,313,,,,,,,,,,,,,,,,,,,,303,,,229,,,58', '59,,,60,,,548,,545,544,543,553,546,,,,,,,,,556,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,315,,551,62,,81,93,94,69,70,71,,57,564,563,,63,64,557', ',,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230', ',,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,', ',,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,307,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,313,,,,,,,,,,,,,,,,', ',,,946,,,229,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72', '73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,', '229,,,58,59,,,60,,281,,,,44,,,285,,,,,,228,,,,,89,282,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310', '72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106', '95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,285,,,,,,228,,,,,89,282,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,', '58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,', ',,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,113,,,,,112,62,,81,93,94,69,70', '71,,57,,,,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100', '102,103,,,230,,,,,,,307,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,,,313,,,,,,,,,,,,,,,,,,,,348,,,33,,,58,59,,,60,,35,,,,,,,,,,,,,,', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,', '230,,,,,,,307,,,105,104,106,353,56,97,96,354,,99,107,108,,91,92,,,313', ',,,,,,,,,,,,,,,,360,,,355,,,229,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,', ',307,,,105,104,106,353,56,97,96,354,,99,107,108,,91,92,,,313,,,,,,,', ',,,,,,,,,,,,355,,,229,,,58,59,,,60,,,548,,545,544,543,553,546,,,,,,', ',,556,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,551,62,,81,93,94,69,70', '71,9,57,564,563,,63,64,557,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44', ',,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,388,62,,81,93', '94,69,70,71,,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,', '91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,', ',,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,', ',,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,', ',,,305,306,312,101,100,102,103,,,230,,,,,,,307,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,,,313,,,,,,,,,,,,,,,,,,,,876,,,229,,,58,59', ',,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,404,,,,44', ',,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,', ',,,,,45,,,105,104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228', ',,,,89,282,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,', '230,,,,,,,307,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,313', ',,,,,,,,,,,,,,,,,,,303,,,299,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,404,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,', '229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59', ',,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,', ',,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,218,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,', ',,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,279,,44,,,285,,,,,,228,', ',,,89,282,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309', '310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72', '73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,', ',,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58', '59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305', '306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312', '101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44', ',,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100', '102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,', ',,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102', '103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309', '310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72', '73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,', ',,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58', '59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305', '306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312', '101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44', ',,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100', '102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,', ',,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102', '103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89,282', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,', ',105,104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,', ',,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89', '282,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,', '45,,,105,104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,', ',,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,', ',,89,282,82,83,,84,86,85,87,,,,,80,88,218,,,69,70,71,62,57,81,93,94', '63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103', ',,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,659,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,', ',,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,', ',,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72', '73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,307,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,,,313,,,,,,,,,,,,,,,,,,,,876,,,229,,', '58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,', '69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305', '306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312', '101,100,102,103,,,230,,,,,,,307,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,,,313,,,,,,,,,,,,,,,,,,,,303,,,229,,,58,59,,,60,,,548,,545', '544,543,553,546,,,,,,,,,556,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,504', ',551,62,,81,93,94,69,70,71,,57,564,563,,63,64,557,,,67,,65,66,68,309', '310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72', '73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,', ',,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58', '59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305', '306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312', '101,100,102,103,,,230,,,,,,,307,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,58,59,,,60,,,,,,,,,', ',,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,', ',230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230', ',,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,', ',,,,,,,,,,,,,,,,,223,,,229,520,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,', ',29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,', ',,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72', '73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,404,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73', ',,,,,305,306,312,101,100,102,103,,,230,,,,,,,307,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,58', '59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306', '312,101,100,102,103,,,230,,,,,,,307,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,58,59,,,60,,,,,', ',,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102', '103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106', '95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89,282,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309', '310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72', '73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309,310,72,73,,', ',,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58', '59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,', ',,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,', ',,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,', ',230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,', ',,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,', ',,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309', '310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,', ',223,,,229,,,58,59,,,60,,,,279,,44,,,285,,,,,,228,,,,,89,282,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,223,,,229,,,58,59,,,60,,659,,279,,44,,,285,,,,,,228,,,,,89,282', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,754,,,,44,,,,,,,,,228,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,', ',223,,,229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89,282,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,', ',223,,,229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89,282,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,281,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309', '310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,', ',223,,,229,,,58,59,,,60,,659,,279,,44,,,285,,,,,,228,,,,,89,282,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,223,,,229,,,58,59,,,60,,,,279,,44,,,285,,,,,,228,,,,,89,282,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,292', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,', ',,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,,,388,62,,81,93,94,69,70,71,,57,,,,63,64,,', ',67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,', ',,,,,45,,,105,104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,285,,,,,,228,,,', ',89,282,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230', ',,,,,,45,,,105,104,106,95,56,97,96,98,284,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,659,,,,44,,,285,,,,,,228', ',,,,89,282,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,309,310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,307', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,313,,,,,,,,,,,,,,', ',,,,,303,,,299,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,284,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,', '229,,,58,59,,,60,,281,,279,,44,,,285,,,,,,228,,,,,89,282,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,309', '310,72,73,,,,,,305,306,312,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,,-579,,62,,81,93,94,-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,-579,,-579,-579,-579,-579,-579,,-579,-579,-579,,,', ',,,,,,,,,,-579,,,-579,-579,-579,-579,-280,-579,,-579,,,,-280,-280,-280', ',,-280,-280,-280,,-280,,,,,,,,,,-280,-280,-280,,,,,,,,-280,-280,,-280', '-280,-280,-280,-280,,,,,,,,,,,,,,,,,,,,,,,-280,-280,-280,-280,-280,-280', '-280,-280,-280,-280,-280,-280,-280,-280,,,-280,-280,-280,,,-280,,,-280', ',,-280,-280,,-280,,-280,,-280,,-280,-280,,-280,-280,-280,-280,-280,', '-280,,-280,,,,,,,,,,,,,,-280,,,-280,-280,-280,-280,-580,-280,,-280,', ',,-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,-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,548,,545,544,543,553,546,,,,,,,-580', ',556,-580,-580,-580,-580,-296,-580,,-580,,,,-296,-296,-296,,,-296,-296', '-296,,-296,551,,,,,,,,,-296,-296,564,563,,,,557,,,-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,,272,-296', ',,-296,-296,,-296,,-296,,-296,,-296,-296,,-296,-296,-296,-296,-296,', '-296,-411,-296,,,,,,-411,-411,-411,,,-411,-411,-411,-296,-411,,-296', '-296,,-296,,-296,,-411,-411,-411,,,,,,,,,-411,-411,,-411,-411,-411,-411', '-411,,,,,,,,,,,,,,,,,,,,,,,-411,-411,-411,-411,-411,-411,-411,-411,-411', '-411,-411,-411,-411,-411,,,-411,-411,-411,,,-411,,263,-411,,,-411,-411', ',-411,,-411,,-411,,-411,-411,,-411,-411,-411,-411,-411,,-411,-411,-411', ',,,,,,,,,,,,,-411,,-244,-411,-411,,-411,,-411,-244,-244,-244,,,-244', '-244,-244,548,-244,545,544,543,553,546,,,,-244,-244,,,,556,,,,,,-244', '-244,,-244,-244,-244,-244,-244,,,,,,,,,551,,,,,,,,,561,560,564,563,', ',,557,,,,,,,,,-244,,-244,,,,,-244,,-244,-244,-244,263,-244,-244,-244', '-244,218,-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,,263,-244,,,-244,-244,,-244,,-244,,-244,,-244,-244,,-244,-244', '-244,-244,-244,,-244,-244,-244,,,,,,,,,,,,,,-244,,,-244,-244,,-244,', '-244,173,184,174,197,170,190,180,179,200,201,195,178,177,172,198,202', '203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196,181,169,188', '187,,,,,,168,175,166,167,163,164,165,124,126,123,,125,,,,,,,,157,158', ',154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,', ',,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,,,162,89', ',,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200,201,195,178,177', '172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196', '181,169,188,187,,,,,,168,175,166,167,163,164,165,124,126,,,125,,,,,', ',,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147', ',,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134', ',,162,89,,,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200,201,195', '178,177,172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,193', '186,196,181,169,188,187,,,,,,168,175,166,167,163,164,165,124,126,,,125', ',,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146', '147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155', '134,,,162,89,,,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200,201', '195,178,177,172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194', '193,186,196,181,169,188,187,,,,,,168,175,166,167,163,164,165,124,126', ',,125,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160', '146,147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133', '155,134,,,162,89,,,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200', '201,195,178,177,172,198,202,203,182,171,185,189,191,183,176,,,,192,199', '194,193,186,196,181,169,188,187,,,,,,168,175,166,167,163,164,165,124', '126,,,125,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141', '133,155,134,,,162,173,184,174,197,170,190,180,179,200,201,195,178,177', '172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,371,370,372', '369,169,188,187,,,,,,168,175,166,167,366,367,368,364,126,97,96,365,', '99,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146', '147,,,,,,376,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133', '155,134,640,424,162,,641,,,,,,,,157,158,,154,136,137,138,145,142,144', ',,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152', '161,148,149,143,141,133,155,134,475,417,162,,476,,,,,,,,157,158,,154', '136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,', ',151,150,,135,156,153,152,161,148,149,143,141,133,155,134,640,424,162', ',641,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160', '146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141', '133,155,134,638,417,162,,639,,,,,,,,157,158,,154,136,137,138,145,142', '144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153', '152,161,148,149,143,141,133,155,134,413,417,162,,414,,,,,,,,157,158', ',154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,', ',,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,670,417', '162,,671,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143', '141,133,155,134,475,417,162,,476,,,,,,,,157,158,,154,136,137,138,145', '142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151,150,,135,156,153', '152,161,148,149,143,141,133,155,134,1008,424,162,,1009,,,,,,,,157,158', ',154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,', ',,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,420,424', '162,,419,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143', '141,133,155,134,1006,417,162,,1007,,,,,,,,157,158,,154,136,137,138,145', '142,144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156', '153,152,161,148,149,143,141,133,155,134,638,417,162,,639,,,,,,,,157', '158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263', ',,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,981', '424,162,,980,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,', ',,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148,149', '143,141,133,155,134,726,424,162,,727,,,,,,,,157,158,,154,136,137,138', '145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135', '156,153,152,161,148,149,143,141,133,155,134,723,424,162,,724,,,,,,,', '157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,', ',,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134', '721,417,162,,722,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140', ',,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148', '149,143,141,133,155,134,673,424,162,,674,,,,,,,,157,158,,154,136,137', '138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150', ',135,156,153,152,161,148,149,143,141,133,155,134,,548,162,545,544,543', '553,546,,,,,,,,548,556,545,544,543,553,546,,,,,,,,548,556,545,544,543', '553,546,,,551,,,,,,556,,,561,560,564,563,,551,534,557,,,,,,,561,560', '564,563,,551,,557,,,,,,,561,560,564,563,,,548,557,545,544,543,553,546', ',548,,545,544,543,553,546,556,,,,,,,,556,,548,,545,544,543,553,546,', ',,,,551,,,556,,,,,551,561,560,564,563,,,,557,561,560,564,563,,,,557', '551,,548,,545,544,543,553,546,561,560,564,563,,,,557,556,,548,,545,544', '543,553,546,,548,,545,544,543,553,546,556,,,,,551,,,556,,,,,,561,560', '564,563,,,,557,551,,,,,,,,551,561,560,564,563,,,,557,561,560,564,563', ',,548,557,545,544,543,553,546,,548,,545,544,543,553,546,556,,,,,,,,556', ',548,,545,544,543,553,546,,,,,,551,,,556,,,,,551,,,564,563,,,,557,561', '560,564,563,,,,557,551,,548,,545,544,543,553,546,,,564,563,,,,557,556', ',548,,545,544,543,553,546,548,,545,544,543,553,546,,556,,,,,551,,556', ',548,,545,544,543,553,546,564,563,,,,557,551,,556,,,,,551,,,,564,563', ',,,557,,564,563,,,,557,551,,,,,,,,,,,564,563,,,,557' ] racc_action_table = arr = ::Array.new(25138, 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 = [ '640,719,339,1008,774,578,413,640,640,640,821,338,640,640,640,19,640', '359,933,346,473,933,680,680,665,640,640,640,640,721,724,844,723,665', '822,1020,640,640,908,640,640,640,640,640,383,224,349,1007,1006,3,571', '885,384,413,3,473,19,824,345,722,774,638,413,437,437,825,640,640,640', '640,640,640,640,640,640,640,640,640,640,640,1008,671,640,640,640,570', '640,640,845,687,640,594,594,640,640,724,640,723,640,61,640,224,640,640', '650,640,640,640,640,640,383,640,640,640,578,670,680,638,384,719,339', '1008,719,359,719,339,1008,640,346,338,640,640,640,640,338,640,95,640', '721,724,844,723,640,95,95,95,359,671,95,95,95,359,95,1020,571,349,908', '437,1020,571,95,908,95,95,95,1007,1006,345,722,885,1007,1006,95,95,885', '95,95,95,95,95,827,670,481,590,590,594,61,671,26,570,671,650,845,913', '570,913,308,845,687,671,605,830,95,95,95,95,95,95,95,95,95,95,95,95', '95,95,58,481,95,95,95,670,95,95,670,832,95,355,607,95,95,355,95,670', '95,801,95,353,95,95,835,95,95,95,95,95,838,95,39,95,639,704,26,704,704', '704,58,704,313,313,308,380,222,95,605,605,95,95,95,95,280,95,420,95', '605,26,15,590,95,420,420,420,590,308,450,420,420,801,420,353,277,368', '607,607,801,39,353,420,368,276,726,353,607,801,39,353,639,443,420,420', '374,420,420,420,420,420,450,374,222,262,450,450,801,15,353,380,380,380', '328,230,221,328,15,704,41,41,313,313,420,420,420,420,420,420,420,420', '420,420,420,420,420,420,726,482,420,420,420,651,420,726,372,847,420', '443,726,420,492,372,726,226,420,851,420,317,420,420,354,420,420,420', '420,420,98,420,420,420,221,726,482,98,98,98,651,371,98,98,98,852,98', '420,371,449,420,420,77,420,98,420,98,98,98,855,41,41,420,673,77,856', '98,98,317,98,98,98,98,98,77,370,354,317,492,492,492,449,370,354,225', '449,449,904,354,904,904,904,354,904,223,492,98,98,98,98,98,98,98,98', '98,98,98,98,98,98,204,354,98,98,98,673,98,98,1001,38,98,381,673,98,98', '382,98,673,98,379,98,673,98,98,385,98,98,98,98,98,419,98,1002,98,369', '621,1005,419,419,419,673,369,581,419,419,329,419,98,329,581,98,98,98', '98,24,98,38,98,581,904,378,24,98,414,872,38,419,419,876,419,419,419', '419,419,878,381,381,381,109,382,382,382,621,379,379,379,367,366,385', '385,385,621,686,367,366,686,419,419,419,419,419,419,419,419,419,419', '419,419,419,419,414,937,419,419,419,943,419,45,937,414,419,40,943,419', '378,378,378,937,419,589,419,943,419,419,589,419,419,419,419,419,641', '419,7,419,365,689,37,641,641,641,906,365,641,641,641,689,641,419,337', '337,419,419,944,419,364,419,641,641,641,944,342,364,419,523,523,342', '641,641,944,641,641,641,641,641,945,288,910,947,689,689,288,945,911', '689,947,551,917,551,551,551,945,551,332,947,921,332,641,641,641,641', '641,641,641,641,641,641,641,641,641,641,848,862,641,641,641,848,641', '641,14,923,641,862,551,641,641,14,641,926,641,927,641,551,641,641,14', '641,641,641,641,641,928,641,831,641,831,831,831,833,831,833,833,833', '929,833,862,862,931,641,22,862,641,641,641,641,357,641,946,641,692,692', '949,357,641,839,839,839,839,839,839,831,357,853,839,839,833,950,853', '839,831,839,839,839,839,839,839,839,6,6,6,6,6,839,839,839,839,839,839', '839,123,951,839,17,17,123,123,432,839,839,839,839,839,839,839,839,839', '839,839,839,952,839,839,839,953,839,839,839,839,839,432,432,432,432', '432,432,432,432,432,432,432,1009,432,432,46,954,432,432,1009,839,955', '46,839,1009,957,839,839,1009,16,839,46,839,432,1010,432,839,432,432', '1011,432,432,432,432,432,839,432,710,710,1022,839,839,839,839,304,839', '839,839,839,996,996,304,980,839,839,981,432,982,432,13,304,839,12,839', '839,839,566,566,566,566,566,566,10,1,347,566,566,513,510,505,566,347', '566,566,566,566,566,566,566,503,347,500,521,522,566,566,566,566,566', '566,566,598,598,566,524,598,598,598,643,566,566,566,566,566,566,566', '566,566,566,566,566,499,566,566,566,995,566,566,566,566,566,643,643', '643,643,643,643,643,643,643,643,643,509,643,643,875,536,643,643,509', '566,537,875,566,539,540,566,566,509,550,566,875,566,643,541,643,566', '643,643,483,643,643,643,643,643,566,643,558,562,565,566,566,566,566', '302,566,566,566,566,567,479,302,572,566,566,573,643,592,602,610,302', '566,612,566,566,566,648,648,648,648,648,648,618,622,301,648,648,454', '453,452,648,301,648,648,648,648,648,648,648,451,301,627,632,439,648', '648,648,648,648,648,648,429,421,648,412,642,411,644,408,648,648,648', '648,648,648,648,648,648,648,648,648,409,648,648,648,405,648,648,648', '648,648,408,408,408,408,408,408,408,408,408,408,408,727,408,408,300', '649,408,408,727,648,403,300,648,727,400,648,648,727,394,648,300,648', '408,656,408,648,408,408,658,408,408,408,408,408,648,408,664,667,669', '648,648,648,648,986,648,648,648,648,672,675,986,676,648,648,679,408', '681,684,688,986,648,997,648,648,648,653,653,653,653,653,653,998,703', '319,653,653,350,705,712,653,319,653,653,653,653,653,653,653,717,319', '348,720,344,653,653,653,653,653,653,653,343,979,653,979,979,979,333', '979,653,653,653,653,653,653,653,653,653,653,653,653,729,653,653,653', '331,653,653,653,653,653,519,519,519,519,519,519,519,519,519,519,519', '674,519,519,220,734,519,519,674,653,330,220,653,674,999,653,653,674', '1000,653,220,653,519,753,519,653,519,519,326,519,519,519,519,519,653', '519,321,758,318,653,653,653,653,314,653,653,653,653,312,307,306,303', '653,653,297,519,776,777,779,780,653,781,653,653,653,654,654,654,654', '654,654,783,784,785,654,654,786,296,790,654,295,654,654,654,654,654', '654,654,291,291,291,291,291,654,654,654,654,654,654,654,794,873,654', '873,873,873,795,873,654,654,654,654,654,654,654,654,654,654,654,654', '800,654,654,654,293,654,654,654,654,654,678,678,678,678,678,678,678', '678,678,678,678,804,678,678,292,807,678,678,808,654,811,816,654,817', ',654,654,,,654,,654,678,,678,654,678,678,,678,678,678,678,678,654,678', ',,,654,654,654,654,,654,654,654,654,,,,,654,654,,678,,,,,654,,654,654', '654,730,730,730,730,730,730,,,,730,730,,,,730,,730,730,730,730,730,730', '730,497,497,497,497,497,730,730,730,730,730,730,730,,,730,,,,,,730,730', '730,730,730,730,730,730,730,730,730,730,,730,730,730,,730,730,730,730', '730,858,858,858,858,858,858,858,858,858,858,858,,858,858,,,858,858,', '730,,,730,,,730,730,,,730,,730,858,,858,730,858,858,,858,858,858,858', '858,730,858,,,,730,730,730,730,,730,730,730,730,,,,,730,730,,858,,,', ',730,,730,730,730,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,861,861,861,861,861,861,861,861,861,861,861,,861,861,,,861,861', ',735,,,735,,,735,735,,,735,,735,861,,861,735,861,861,,861,861,861,861', '861,735,861,,,,735,735,735,735,,735,735,735,735,,,,,735,735,,861,,,', ',735,,735,735,735,840,840,840,840,840,840,,,,840,840,,,,840,,840,840', '840,840,840,840,840,,,,,,840,840,840,840,840,840,840,,,840,,,,,,840', '840,840,840,840,840,840,840,840,840,840,840,,840,840,840,,840,840,840', '840,840,21,21,21,21,21,21,21,21,21,21,21,,21,21,,,21,21,,840,,,840,', ',840,840,,,840,,840,21,,21,840,21,21,,21,21,21,21,21,840,21,,,,840,840', '840,840,,840,840,840,840,,,,,840,840,,21,,,,,840,,840,840,840,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,427,427,427,427,427', '427,427,427,427,427,427,,427,427,,,427,427,,843,,,843,,,843,843,,,843', ',843,427,,427,843,427,427,,427,427,427,427,427,843,427,,,,843,843,843', '843,,843,843,843,843,,,,,843,843,,427,,,,,843,,843,843,843,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,274,274,274,274,274,274', '274,274,274,274,274,,274,274,,,274,274,,882,,,882,,,882,882,,,882,,882', '274,,274,882,274,274,,274,274,274,274,274,882,274,,,,882,882,882,882', ',882,882,882,882,,,,,882,882,,274,,,,,882,,882,882,882,890,890,890,890', '890,890,,,,890,890,,,,890,,890,890,890,890,890,890,890,,,,,,890,890', '890,890,890,890,890,,,890,,,,,,890,890,890,890,890,890,890,890,890,890', '890,890,,890,890,890,,890,890,890,890,890,472,472,472,472,472,472,472', '472,472,472,472,,472,472,,,472,472,,890,,,890,,,890,890,,,890,,890,472', ',472,890,472,472,,472,472,472,472,472,890,472,,,,890,890,890,890,,890', '890,890,890,,,,,890,890,472,472,,,,,890,,890,890,890,569,569,569,569', '569,569,,,,569,569,,,,569,,569,569,569,569,569,569,569,,,,,,569,569', '569,569,569,569,569,,,569,,,,,,569,569,569,569,569,569,569,569,569,569', '569,569,,569,569,569,,569,569,569,569,569,769,769,769,769,769,769,769', '769,769,769,769,,769,769,,,769,769,,569,,,569,,,569,569,,,569,,569,769', ',769,569,769,769,,769,769,769,769,769,569,769,,,,569,569,569,569,,569', '569,569,569,,,,,569,569,,769,,,,,569,,569,569,569,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,767,767,767,767,767,767,767,767', '767,767,767,,767,767,,,767,767,,591,,,591,,,591,591,,,591,,591,767,', '767,591,767,767,,767,767,767,767,767,591,767,,,,591,591,591,591,,591', '591,591,591,,,,,591,591,,767,,,,,591,,591,591,591,33,33,33,33,33,33', ',,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33', ',,,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33,33,,33,33,33,33,33,765', '765,765,765,765,765,765,765,765,765,765,,765,765,,,765,765,,33,,,33', ',,33,33,,,33,,33,765,,765,33,765,765,,765,765,765,765,765,33,765,,,', '33,33,33,33,,33,33,33,33,,,,,33,33,,765,,,,,33,,33,33,33,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,762,762,762,762,762,762', '762,762,762,762,762,,762,762,,,762,762,,121,,,121,,,121,121,,,121,,121', '762,,762,121,762,762,,762,762,762,762,762,121,762,,,,121,121,121,121', ',121,121,121,121,,,,,121,121,,762,,,,,121,,121,121,121,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,760,760,760,760,760,760,760', '760,760,760,760,,760,760,,,760,760,,229,,,229,,,229,229,,,229,,229,760', ',760,229,760,760,,760,760,760,760,760,229,760,,,,229,229,229,229,,229', '229,229,229,,,,,229,229,,760,,,,,229,,229,229,229,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,755,755,755,755,755,755,755,755', '755,755,755,,755,755,,,755,755,,206,,,206,,,206,206,,,206,,206,755,', '755,206,755,755,,755,755,755,755,755,206,755,,,,206,206,206,206,,206', '206,206,206,,,,,206,206,,755,,,,,206,,206,206,206,324,324,324,324,324', '324,,,,324,324,,,,324,,324,324,324,324,324,324,324,,,,,,324,324,324', '324,324,324,324,469,701,324,701,701,701,,701,324,324,324,324,324,324', '324,324,324,324,324,324,,324,324,324,,324,324,324,324,324,468,,469,', ',,469,469,701,469,469,,,,,,,701,,324,,,324,,,324,324,,,324,,324,468', ',,324,468,468,,468,468,,,,324,,,,,324,324,324,324,,324,324,324,324,', ',,,324,324,,958,,958,958,958,324,958,324,324,324,299,299,299,299,299', '299,,,,299,299,,,,299,,299,299,299,299,299,299,299,,,,,958,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,448,448,448,448,448,448,448,448', '448,448,448,,448,448,,,448,448,,299,,,299,,,299,299,,,299,,299,448,', '448,299,448,448,,448,448,448,448,448,299,448,,,,299,299,299,299,,299', '299,299,299,,,,,299,299,,905,,905,905,905,299,905,299,299,299,793,793', '793,793,793,793,,,,793,793,,,,793,,793,793,793,793,793,793,793,,,,,905', '793,793,793,793,793,793,793,,994,793,994,994,994,,994,793,793,793,793', '793,793,793,793,793,793,793,793,,793,793,793,,793,793,793,793,793,463', '463,463,463,463,463,463,,994,463,463,,,,,,463,463,,793,,,793,,,793,793', ',,793,,793,463,,463,793,463,463,,463,463,463,463,463,793,463,,,,793', '793,793,793,,793,793,793,793,,,,,793,793,,956,,956,956,956,793,956,793', '793,793,849,849,849,849,849,849,,,,849,849,,,,849,,849,849,849,849,849', '849,849,,,,,956,849,849,849,849,849,849,849,,,849,,,,,,849,849,849,849', '849,849,849,849,849,849,849,849,,849,849,849,,849,849,849,849,849,464', '464,464,464,464,464,464,,,464,464,,,,,,464,464,,849,,,849,,,849,849', ',,849,,849,464,,464,849,464,464,,464,464,464,464,464,849,464,,,,849', '849,849,849,,849,849,849,849,,,,,849,849,,,,,,,849,,849,849,849,0,0', '0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0', '0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,447,447,447,447,447,447,447,447', '447,447,447,,447,447,,,447,447,,0,,,0,,,0,0,,,0,,0,447,,447,0,447,447', ',447,447,447,447,447,0,447,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,,,,,,0,,0,0', '0,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,461,,', ',,,,,,,,,,,,,461,461,,294,,,294,,,294,294,,,294,,294,461,,461,294,461', '461,,461,461,,,461,294,461,,,,294,294,294,294,,294,294,294,294,,,,,294', '294,,,,,,,294,,294,294,294,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,460,,,,,,,,,,,,,,,,460,460,,498,,,498,,,498,498,,,498', ',498,460,,460,498,460,460,,460,460,,,460,498,460,,,,498,498,498,498', ',498,498,498,498,,,,,498,498,,,,,,,498,,498,498,498,967,967,967,967', '967,967,,,,967,967,,,,967,,967,967,967,967,967,967,967,,,,,,967,967', '967,967,967,967,967,,,967,,,,,,967,967,967,967,967,967,967,967,967,967', '967,967,,967,967,967,,967,967,967,967,967,467,467,467,467,467,467,467', ',,467,467,,,,,,467,467,,967,,,967,,,967,967,,,967,,967,467,,467,967', '467,467,,467,467,467,467,467,967,467,,,,967,967,967,967,,967,967,967', '967,,,,,967,967,,,,,,,967,,967,967,967,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,471,471,471,471,471,471,471,471,,471,471', ',,,,,471,471,,745,,,745,,,745,745,,,745,,745,471,,471,745,471,471,,471', '471,471,471,471,745,471,,,,745,745,745,745,,745,745,745,745,,,,,745', '745,,,,,,,745,,745,745,745,889,889,889,889,889,889,,,,889,889,,,,889', ',889,889,889,889,889,889,889,,,,,,889,889,889,889,889,889,889,,,889', ',,,,,889,889,889,889,889,889,889,889,889,889,889,889,,889,889,889,,889', '889,889,889,889,458,458,458,458,458,458,458,,,458,458,,,,,,458,458,', '889,,,889,,,889,889,,,889,,889,458,,458,889,458,458,,458,458,458,458', '458,889,458,,,,889,889,889,889,,889,889,889,889,,,,,889,889,,,,,,,889', ',889,889,889,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', '806,459,,,,,,,,,,,,,,,,459,459,,806,,,806,,,806,806,,,806,,806,459,', '459,806,459,459,,459,459,,,459,806,459,,,,806,806,806,806,,806,806,806', '806,,,,,806,806,,,,,,,806,,806,806,806,965,965,965,965,965,965,,,,965', '965,,,,965,,965,965,965,965,965,965,965,,,,,,965,965,965,965,965,965', '965,,,965,,,,,,965,965,965,965,965,965,965,965,965,965,965,965,,965', '965,965,,965,965,965,965,965,470,470,470,470,470,470,470,,,470,470,', ',,,,470,470,,965,,,965,,,965,965,,,965,,965,470,,470,965,470,470,,470', '470,470,470,470,965,470,,,,965,965,965,965,,965,965,965,965,,,,,965', '965,,,,,,,965,,965,965,965,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,959,959,959,959,959,959,959,959,,959,959,959,,959', '959,959,959,959,462,,,,,,,,,,,,,,,,462,462,,959,,,959,,,959,959,,,959', ',959,462,,462,959,462,462,,462,462,,,462,959,462,,,,959,959,959,959', ',959,959,959,959,,,,,959,959,,,,,,,959,,959,959,959,942,942,942,942', '942,942,,,,942,942,,,,942,,942,942,942,942,942,942,942,,,,,,942,942', '942,942,942,942,942,,,942,,,,,,942,942,942,942,942,942,942,942,942,942', '942,942,,942,942,942,,942,942,942,942,942,465,465,465,465,465,465,465', ',,465,465,,,,,,465,465,,942,,,942,,,942,942,,,942,,942,465,,465,942', '465,465,,465,465,465,465,465,942,465,,,,942,942,942,942,,942,942,942', '942,,,,,942,942,,,,212,212,212,942,212,942,942,942,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,466,466,466,466,466,466,466,,,466,466,,,,,,466,466,,212,,,212,,', '212,212,,,212,,,466,,466,212,466,466,,466,466,466,466,466,212,466,,', ',212,212,212,212,,212,212,212,212,,,,,212,212,,,,515,515,515,212,515', '212,212,212,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,515,515,,515,515,515,515,515,456,,,,,,,,,,,,,,,,456,456,,515,,', '515,,,515,515,,,515,,,456,,456,515,456,456,,456,456,,,,515,,,,,515,515', '515,515,,515,515,515,515,,,,,515,515,,,,,,,515,,515,515,515,5,5,5,5', '5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5', '5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,455,,,,,,,,,,,,,,,,455,455,,5,,,5,,,5', '5,,,5,,5,455,,455,5,455,455,,455,455,,,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5', '5,,,,983,983,983,5,983,5,5,5,983,983,,,,983,,983,983,983,983,983,983', '983,,,,,,983,983,983,983,983,983,983,,,983,,,,,,,983,,,983,983,983,983', '983,983,983,983,983,983,983,983,,983,983,983,983,983,457,,,,,,,,,,,', ',,,,457,457,,983,,,983,,,983,983,,,983,,983,457,983,,983,457,457,983', '457,457,,,,983,,,,,983,983,983,983,,983,983,983,983,,,,,983,983,,,,20', '20,20,983,20,983,983,983,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,,,,29,29,29,20,29,20,20,20', '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,,,,,,29,,,,,29,29,29', '29,,29,29,29,29,,,,,29,29,,,,30,30,30,29,30,29,29,29,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,30,,,,31,31,31,30,31,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,,,,34,34', '34,31,34,31,31,31,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34', '34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,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,34,35,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,,,697,,697,697,697,697,697,,,,,,,,,697,,35,35,35,35,,35', '35,35,35,,,,,35,35,,,,35,,697,35,,35,35,35,42,42,42,,42,697,697,,42', '42,697,,,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,,,,43,43,43,42,43,42,42,42,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,,,,44', '44,44,43,44,43,43,43,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,,,,,44,44,,,,886,886,886,44,886,44,44,44', '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,886,886,,886,886,886,886,,,,,886,886,,,,59,59,59', '886,59,886,886,886,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,59,,,,,59,59,,,,60,60,60,59,60,59,59,59', '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,60,,,,63,63,63,60,63,60,60,60,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,,,,,63,63,,', ',64,64,64,63,64,63,63,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,,,,,64,64,,,,67,67,67,64,67,64,64,64', '67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,', ',,,67,,,67,67,67,67,67,67,67,67,,67,67,67,,67,67,67,67,67,,,,,,,,,,', ',,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67,,,,,,,,,67,,,,,67,67,67,67,,67', '67,67,67,,,,,67,67,67,,,,,67,67,,67,67,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,,68,68,68,68,,,,,68,68', ',,,69,69,69,68,69,68,68,68,69,69,,,,69,,69,69,69,69,69,69,69,,,,,,69', '69,69,69,69,69,69,,,69,,,,,,,69,,,69,69,69,69,69,69,69,69,,69,69,69', ',69,69,,,69,,,,,,,,,,,,,,,,,69,,,69,,,69,,,69,69,,,69,,,,,,,,,,,,,,', ',,,,,69,69,69,69,,69,69,69,69,,,,,69,69,,,,70,70,70,69,70,69,69,69,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,,,869,,869,869,869,869,869,,,,,,,,,869,,70,70', '70,70,,70,70,70,70,,,,,70,70,,,,,,869,70,,70,70,70,111,111,111,111,111', '869,869,,111,111,869,,,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,', ',,117,117,117,116,117,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,,,,118,118,118,117,118,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', ',,,119,119,119,118,119,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,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,,,,874,874,874,120,874,120,120,120,874,874,,,,874', ',874,874,874,874,874,874,874,,,,,,874,874,874,874,874,874,874,,,874', ',,,,,,874,,,874,874,874,874,874,874,874,874,,874,874,874,,874,874,,', '874,,,,,,,,,,,,,,,,,,,,874,,,874,,,874,874,,,874,,,,,,,,,,,,,,,,,,,', '874,874,874,874,,874,874,874,874,,,,,874,874,,,,207,207,207,874,207', '874,874,874,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,,,,208,208,208,207,208,207,207,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,,,,,208,208,,,,209,209,209,208,209', '208,208,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,,209', '209,209,209,,,,,209,209,,,,512,512,512,209,512,209,209,209,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,,,,213,213,213,512', '213,512,512,512,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,213,,,,214,214,214,213,214,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,,,,215,215,215', '214,215,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,,,,216,216,216,215,216,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,,,,217,217,217,216', '217,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,,,860,860,860,217,860,217,217,217,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,860,860,860,,860,860,860,860,,,,,860,860,,,,859,859,859', '860,859,860,860,860,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,,,859,,,,,,859,,,,,859,859,859,859', ',859,859,859,859,,,,,859,859,,,,228,228,228,859,228,859,859,859,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,', ',,231,231,231,228,231,228,228,228,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,231,232,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,232,233,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,233,234,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,234,235,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,235,236,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', ',,,237,237,237,236,237,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,,,,238,238,238,237,238,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', ',,,239,239,239,238,239,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,,,,240,240,240,239,240,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', ',,,241,241,241,240,241,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,,,,242,242,242,241,242,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', ',,,243,243,243,242,243,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,,,,244,244,244,243,244,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', ',,,245,245,245,244,245,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,,,,246,246,246,245,246,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', ',,,247,247,247,246,247,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,,,,248,248,248,247,248,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', ',,,249,249,249,248,249,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,,,,250,250,250,249,250,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', ',,,251,251,251,250,251,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,,,,252,252,252,251,252,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', ',,,253,253,253,252,253,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,,,,254,254,254,253,254,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', ',,,255,255,255,254,255,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,,,,256,256,256,255,256,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', ',,,263,263,263,256,263,256,256,256,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,,,,,263,263,,,,264,264,264,263,264', '263,263,263,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,,,,,264,264,,,,272,272,272,264,272,264,264,264,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,272,272,,272,272,272,272,,,,,272,272', '272,,,842,842,842,272,842,272,272,272,842,842,,,,842,,842,842,842,842', '842,842,842,,,,,,842,842,842,842,842,842,842,,,842,,,,,,,842,,,842,842', '842,842,842,842,842,842,,842,842,842,,842,842,842,842,842,,,,,,,,,,', ',,,,,,,,,842,,,842,,,842,842,,,842,,842,,,,842,,,,,,,,,842,,,,,842,842', '842,842,,842,842,842,842,,,,,842,842,,,,279,279,279,842,279,842,842', '842,279,279,,,,279,,279,279,279,279,279,279,279,,,,,,279,279,279,279', '279,279,279,,,279,,,,,,,279,,,279,279,279,279,279,279,279,279,,279,279', '279,,279,279,279,279,279,,,,,,,,,,,,,,,,,,,,279,,,279,,,279,279,,,279', ',,,,,279,,,,,,,,,279,,,,,279,279,279,279,,279,279,279,279,,,,,279,279', ',,,281,281,281,279,281,279,279,279,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,,,,284,284,284,281,284,281,281,281', '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', ',,,285,285,285,284,285,284,284,284,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,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,,,,837,837,837,290,837,290,290,290,837,837,,,,837', ',837,837,837,837,837,837,837,,,,,,837,837,837,837,837,837,837,,,837', ',,,,,,837,,,837,837,837,837,837,837,837,837,,837,837,837,,837,837,837', '837,837,,,,,,,,,,,,,,,,,,,,837,,,837,,,837,837,,,837,,,,,,837,,,,,,', ',,837,,,,,837,837,837,837,,837,837,837,837,,,,,837,837,,,,787,787,787', '837,787,837,837,837,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,,,,775,775,775,787,775,787,787,787,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,,,,298,298,298,775,298,775,775', '775,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,,,895', ',895,895,895,895,895,,,,,,,,,895,,298,298,298,298,,298,298,298,298,', ',,,298,298,,,,298,,895,298,,298,298,298,773,773,773,,773,895,895,,773', '773,895,,,773,,773,773,773,773,773,773,773,,,,,,773,773,773,773,773', '773,773,,,773,,,,,,,773,,,773,773,773,773,773,773,773,773,,773,773,773', ',773,773,773,773,773,,,,,,,,,,,,,,,,,,,,773,,,773,,,773,773,,,773,,', ',,,773,,,,,,,,,773,,,,,773,773,773,773,,773,773,773,773,,,,,773,773', ',,,772,772,772,773,772,773,773,773,772,772,,,,772,,772,772,772,772,772', '772,772,,,,,,772,772,772,772,772,772,772,,,772,,,,,,,772,,,772,772,772', '772,772,772,772,772,,772,772,772,,772,772,772,772,772,,,,,,,,,,,,,,', ',,,,,772,,,772,,,772,772,,,772,,,,,,772,,,,,,,,,772,,,,,772,772,772', '772,,772,772,772,772,,,,,772,772,,,,771,771,771,772,771,772,772,772', '771,771,,,,771,,771,771,771,771,771,771,771,,,,,,771,771,771,771,771', '771,771,,,771,,,,,,,771,,,771,771,771,771,771,771,771,771,,771,771,771', ',771,771,771,771,771,,,,,,,,,,,,,,,,,,,,771,,,771,,,771,771,,,771,,', ',,,771,,,,,,,,,771,,,,,771,771,771,771,,771,771,771,771,,,,,771,771', ',,,770,770,770,771,770,771,771,771,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,,,,315,315,315,770,315,770,770,770', '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,,,,756,756,756', '315,756,315,315,315,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,,,,323,323,323,756,323,756,756,756,323,323,,,,323,,323', '323,323,323,323,323,323,,,,,,323,323,323,323,323,323,323,,,323,,,,,', ',323,,,323,323,323,323,323,323,323,323,,323,323,323,,323,323,323,323', '323,,,,,,,,,,,,,,,,,,,,323,,,323,323,,323,323,,,323,,,,,,323,,,,,,,', ',323,,,,,323,323,323,323,,323,323,323,323,,,,,323,323,,,,325,325,325', '323,325,323,323,323,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,,,,754,754,754,325,754,325,325,325,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,,,,,754,754,,,,731,731,731,754', '731,754,754,754,731,731,,,,731,,731,731,731,731,731,731,731,,,,,,731', '731,731,731,731,731,731,,,731,,,,,,,731,,,731,731,731,731,731,731,731', '731,,731,731,731,,731,731,731,731,731,,,,,,,,,,,,,,,,,,,,731,,,731,', ',731,731,,,731,,,,,,731,,,,,,,,,731,,,,,731,731,731,731,,731,731,731', '731,,,,,731,731,,,,725,725,725,731,725,731,731,731,725,725,,,,725,,725', '725,725,725,725,725,725,,,,,,725,725,725,725,725,725,725,,,725,,,,,', ',725,,,725,725,725,725,725,725,725,725,,725,725,725,,725,725,725,725', '725,,,,,,,,,,,,,,,,,,,,725,,,725,,,725,725,,,725,,,,,,725,,,,,,,,,725', ',,,,725,725,725,725,,725,725,725,725,,,,,725,725,,,,340,340,340,725', '340,725,725,725,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,340,341,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,,,,699,699,699,341', '699,341,341,341,699,699,,,,699,,699,699,699,699,699,699,699,,,,,,699', '699,699,699,699,699,699,,,699,,,,,,,699,,,699,699,699,699,699,699,699', '699,,699,699,699,,699,699,699,699,699,,,,,,,,,,,,,,,,,,,,699,,,699,', ',699,699,,,699,,,,,,699,,,,,,,,,699,,,,,699,699,699,699,,699,699,699', '699,,,,,699,699,,,,360,360,360,699,360,699,699,699,360,360,,,,360,,360', '360,360,360,360,360,360,,,,,,360,360,360,360,360,360,360,,,360,,,,,', ',360,,,360,360,360,360,360,360,360,360,,360,360,360,,360,360,360,360', '360,,,,,,,,,,,,,,,,,,,,360,,,360,,,360,360,,,360,,,,,,360,,,,,,,,,360', ',,,,360,360,360,360,,360,360,360,360,,,,,360,360,,,,682,682,682,360', '682,360,360,360,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,682,,,,677,677,677,682,677,682,682,682,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,,,,666,666,666,677,666', '677,677,677,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', ',,,662,662,662,666,662,666,666,666,662,662,,,,662,,662,662,662,662,662', '662,662,,,,,,662,662,662,662,662,662,662,,,662,,,,,,,662,,,662,662,662', '662,662,662,662,662,,662,662,662,,662,662,662,662,662,,,,,,,,,,,,,,', ',,,,,662,,,662,,,662,662,,,662,,,,,,662,,,,,,,,,662,,,,,662,662,662', '662,,662,662,662,662,,,,,662,662,,,,659,659,659,662,659,662,662,662', '659,659,,,,659,,659,659,659,659,659,659,659,,,,,,659,659,659,659,659', '659,659,,,659,,,,,,,659,,,659,659,659,659,659,659,659,659,,659,659,659', ',659,659,659,659,659,,,,,,,,,,,,,,,,,,,,659,,,659,,,659,659,,,659,,', ',,,659,,,,,,,,,659,,,,,659,659,659,659,,659,659,659,659,,,,,659,659', ',,,376,376,376,659,376,659,659,659,376,376,,,,376,,376,376,376,376,376', '376,376,,,,,,376,376,376,376,376,376,376,,,376,,,,,,,376,,,376,376,376', '376,376,376,376,376,,376,376,376,,376,376,376,376,376,,,,,,,,,,,,,,', ',,,,,376,,,376,,,376,376,,,376,,,,,,376,,,,,,,,,376,,,,,376,376,376', '376,,376,376,376,376,,,,,376,376,,,,404,404,404,376,404,376,376,376', '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,404,404,,404,404,404,404,,,,,404,404', ',,,442,442,442,404,442,404,404,404,442,442,,,,442,,442,442,442,442,442', '442,442,,,,,,442,442,442,442,442,442,442,,,442,,,,,,,442,,,442,442,442', '442,442,442,442,442,442,442,442,442,,442,442,442,442,442,,,,,,,,,,,', ',,,,,,,,442,,,442,,,442,442,,,442,,442,,442,,442,,,442,,,,,,442,,,,', '442,442,442,442,,442,442,442,442,,,,,442,442,,,,444,444,444,442,444', '442,442,442,444,444,,,,444,,444,444,444,444,444,444,444,,,,,,444,444', '444,444,444,444,444,,,444,,,,,,,444,,,444,444,444,444,444,444,444,444', ',444,444,444,,444,444,444,444,444,,,,,,,,,,,,,,,,,,,,444,,,444,,,444', '444,,,444,,,,,,444,,,,,,,,,444,,,,,444,444,444,444,,444,444,444,444', ',,,,444,444,,,,445,445,445,444,445,444,444,444,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,,,,446,446,446,445,446', '445,445,445,446,446,,,,446,,446,446,446,446,446,446,446,,,,,,446,446', '446,446,446,446,446,,,446,,,,,,,446,,,446,446,446,446,446,446,446,446', ',446,446,446,,446,446,446,446,446,,,,,,,,,,,,,,,,,,,,446,,,446,,,446', '446,,,446,,,,,,446,,,,,,,,,446,,,,,446,446,446,446,,446,446,446,446', ',,,,446,446,,,,635,635,635,446,635,446,446,446,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,,,,634,634,634,635,634', '635,635,635,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,,,,631,631,631,634,631,634,634,634,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,,,,630,630,630,631,630', '631,631,631,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,,,,626,626,626,630,626,630,630,630,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,626,,626,626,626,626,626', ',,,,,,,,,,,,,,,,,,,626,,,626,,,626,626,,,626,,,,,,626,,,,,,,,,626,,', ',,626,626,626,626,,626,626,626,626,,,,,626,626,,,,625,625,625,626,625', '626,626,626,625,625,,,,625,,625,625,625,625,625,625,625,,,,,,625,625', '625,625,625,625,625,,,625,,,,,,,625,,,625,625,625,625,625,625,625,625', ',625,625,625,,625,625,625,625,625,,,,,,,,,,,,,,,,,,,,625,,,625,,,625', '625,,,625,,,,,,625,,,,,,,,,625,,,,,625,625,625,625,,625,625,625,625', ',,,,625,625,,,,624,624,624,625,624,625,625,625,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,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,624,,,,623,623,623', '624,623,624,624,624,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,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,,,,620,620,620,623,620,623,623,623', '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,,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', ',,,619,619,619,620,619,620,620,620,619,619,,,,619,,619,619,619,619,619', '619,619,,,,,,619,619,619,619,619,619,619,,,619,,,,,,,619,,,619,619,619', '619,619,619,619,619,,619,619,619,,619,619,619,619,619,,,,,,,,,,,,,,', ',,,,,619,,,619,,,619,619,,,619,,619,,,,619,,,,,,,,,619,,,,,619,619,619', '619,,619,619,619,619,,,,,619,619,,,,585,585,585,619,585,619,619,619', '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,,,,575,575,575,585,575,585,585,585,575,575,,,,575,,575,575', '575,575,575,575,575,,,,,,575,575,575,575,575,575,575,,,575,,,,,,,575', ',,575,575,575,575,575,575,575,575,575,575,575,575,,575,575,575,575,575', ',,,,,,,,,,,,,,,,,,,575,,,575,,,575,575,,,575,,575,,575,,575,,,575,,', ',,,575,,,,,575,575,575,575,,575,575,575,575,,,,,575,575,,,,574,574,574', '575,574,575,575,575,574,574,,,,574,,574,574,574,574,574,574,574,,,,', ',574,574,574,574,574,574,574,,,574,,,,,,,574,,,574,574,574,574,574,574', '574,574,,574,574,574,,574,574,574,574,574,,,,,,,,,,,,,,,,,,,,574,,,574', ',,574,574,,,574,,574,,,,574,,,,,,,,,574,,,,,574,574,574,574,,574,574', '574,574,,,,,574,574,,,,554,554,554,574,554,574,574,574,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,,,,486,486,486', '554,486,554,554,554,486,486,,,,486,,486,486,486,486,486,486,486,,,,', ',486,486,486,486,486,486,486,,,486,,,,,,,486,,,486,486,486,486,486,486', '486,486,486,486,486,486,,486,486,486,486,486,,,,,,,,,,,,,,,,,,,,486', ',,486,,,486,486,,,486,,486,,486,,486,,,486,,,,,,486,,,,,486,486,486', '486,,486,486,486,486,,,,,486,486,,,,488,488,488,486,488,486,486,486', '488,488,,,,488,,488,488,488,488,488,488,488,,,,,,488,488,488,488,488', '488,488,,,488,,,,,,,488,,,488,488,488,488,488,488,488,488,488,488,488', '488,,488,488,488,488,488,,,,,,,,,,,,,,,,,,,,488,,,488,,,488,488,,,488', ',,,488,,488,,,488,,,,,,488,,,,,488,488,488,488,,488,488,488,488,,,,', '488,488,,,,490,490,490,488,490,488,488,488,490,490,,,,490,,490,490,490', '490,490,490,490,,,,,,490,490,490,490,490,490,490,,,490,,,,,,,490,,,490', '490,490,490,490,490,490,490,,490,490,490,,490,490,490,490,490,,,,,,', ',,,,,,,,,,,,,490,,,490,,,490,490,,,490,,,,,,490,,,,,,,,,490,,,,,490', '490,490,490,,490,490,490,490,,,,,490,490,,,,,,,490,,490,490,490,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,496,496', ',496,496,496,496,,,,,496,496,,,,,,496,496,,496,496,496,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,,,,526,526,526,529,526,529,529,529,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,,,,520,520,520', '526,520,526,526,526,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,,,,504,504,504,520,504,520,520,520,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,,,,506,506,506,504,506,504,504', '504,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,506,506,,506,506,506', '506,,,,,506,506,,,,516,516,516,506,516,506,506,506,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,,,,,424,,516,,516,516', '516,424,424,424,,,424,424,424,,424,,,,,,,,,424,424,424,424,,,,,,,,424', '424,,424,424,424,424,424,,,,,,,,,,,,,,,,,,,,,,,424,424,424,424,424,424', '424,424,424,424,424,424,424,424,,,424,424,424,,,424,,,424,,,424,424', ',424,,424,,424,,424,424,,424,424,424,424,424,,424,424,424,,,,,,,,,,', ',,,424,,,424,424,424,424,56,424,,424,,,,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,56', '56,425,56,,56,,,,425,425,425,,,425,425,425,,425,,,,,,,,,425,425,425', '425,,,,,,,,425,425,,425,425,425,425,425,,,,,,,,,,,,,,,,,,,,,,,425,425', '425,425,425,425,425,425,425,425,425,425,425,425,,,425,425,425,,,425', ',,425,,,425,425,,425,,425,,425,,425,425,,425,425,425,425,425,,425,425', '425,897,,897,897,897,897,897,,,,,,,425,,897,425,425,425,425,28,425,', '425,,,,28,28,28,,,28,28,28,,28,897,,,,,,,,,28,28,897,897,,,,897,,,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,,28,28,,28', '28,28,28,28,,28,27,28,,,,,,27,27,27,,,27,27,27,28,27,,28,28,,28,,28', ',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,,474,27', '27,,27,,27,474,474,474,,,474,474,474,646,474,646,646,646,646,646,,,', '474,474,,,,646,,,,,,474,474,,474,474,474,474,474,,,,,,,,,646,,,,,,,', ',646,646,646,646,,,,646,,,,,,,,,474,,415,,,,,474,,415,415,415,474,474', '415,415,415,646,415,,,,,,,,,415,415,415,,,,,,474,474,,415,415,,415,415', '415,415,415,,,,,474,,,474,,,,,474,,,,,,,,,,415,415,415,415,415,415,415', '415,415,415,415,415,415,415,,,415,415,415,,,415,,415,415,,,415,415,', '415,,415,,415,,415,415,,415,415,415,415,415,,415,415,415,,,,,,,,,,,', ',,415,,,415,415,,415,,415,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8', '8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8', ',8,8,8,8,8,8,8,,,8,8,,,,8,8,8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8', '8,8,8,,,8,8,,,,,,,,,,,,,,8,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', '9,9,,,9,9,,,,,,,,,,,,,,9,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,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,395,,,395,395,,,,395,395,395', '395,,,,,,,,,,,,,,395,395,,395,395,395,395,395,395,395,395,395,395,395', '395,,,395,395,,,,,,,,,,,,,,395,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,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,738,738,738,738,738,738,738,738,738', '738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,,,,738,738', '738,738,738,738,738,738,738,738,,,,,,738,738,738,738,738,738,738,738', '738,,,738,,,,,,,,738,738,,738,738,738,738,738,738,738,,,738,738,,,,738', '738,738,738,,,,,,,,,,,,,,738,738,,738,738,738,738,738,738,738,738,738', '738,738,738,,,738,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,518,518,71,,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,584,584,518,,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,441,441,584', ',441,,,,,,,,441,441,,441,441,441,441,441,441,441,,,441,441,,,,441,441', '441,441,,,,,,441,,,,,,,,441,441,,441,441,441,441,441,441,441,441,441', '441,441,441,440,440,441,,440,,,,,,,,440,440,,440,440,440,440,440,440', '440,,,440,440,,,,440,440,440,440,,,,,,440,,,,,,,,440,440,,440,440,440', '440,440,440,440,440,440,440,440,440,210,210,440,,210,,,,,,,,210,210', ',210,210,210,210,210,210,210,,,210,210,,,,210,210,210,210,,,,,,210,', ',,,,,,210,210,,210,210,210,210,210,210,210,210,210,210,210,210,507,507', '210,,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,259,259,507,,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,985,985,259,,985,,,,,,,,985,985', ',985,985,985,985,985,985,985,,,985,985,,,,985,985,985,985,,,,,,985,', ',,,,,,985,985,,985,985,985,985,985,985,985,985,985,985,985,985,211,211', '985,,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,984,984,211,,984,,,,,,,,984,984,,984,984,984,984,984', '984,984,,,984,984,,,,984,984,984,984,,,,,,984,,,,,,,,984,984,,984,984', '984,984,984,984,984,984,984,984,984,984,517,517,984,,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,938', '938,517,,938,,,,,,,,938,938,,938,938,938,938,938,938,938,,,938,938,', ',,938,938,938,938,,,,,,938,,,,,,,,938,938,,938,938,938,938,938,938,938', '938,938,938,938,938,583,583,938,,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,577,577,583,,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', '576,576,577,,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,508,508,576,,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,,893,508,893,893,893', '893,893,,,,,,,,336,893,336,336,336,336,336,,,,,,,,534,336,534,534,534', '534,534,,,893,,,,,,534,,,893,893,893,893,,336,336,893,,,,,,,336,336', '336,336,,534,,336,,,,,,,534,534,534,534,,,693,534,693,693,693,693,693', ',695,,695,695,695,695,695,693,,,,,,,,695,,736,,736,736,736,736,736,', ',,,,693,,,736,,,,,695,693,693,693,693,,,,693,695,695,695,695,,,,695', '736,,737,,737,737,737,737,737,736,736,736,736,,,,736,737,,865,,865,865', '865,865,865,,867,,867,867,867,867,867,865,,,,,737,,,867,,,,,,737,737', '737,737,,,,737,865,,,,,,,,867,865,865,865,865,,,,865,867,867,867,867', ',,899,867,899,899,899,899,899,,969,,969,969,969,969,969,899,,,,,,,,969', ',971,,971,971,971,971,971,,,,,,899,,,971,,,,,969,,,899,899,,,,899,969', '969,969,969,,,,969,971,,973,,973,973,973,973,973,,,971,971,,,,971,973', ',975,,975,975,975,975,975,989,,989,989,989,989,989,,975,,,,,973,,989', ',1015,,1015,1015,1015,1015,1015,973,973,,,,973,975,,1015,,,,,989,,,', '975,975,,,,975,,989,989,,,,989,1015,,,,,,,,,,,1015,1015,,,,1015' ] racc_action_check = arr = ::Array.new(25138, 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 = [ 3684, 892, nil, -81, nil, 5345, 729, 492, 23044, 23172, 779, nil, 739, 792, 613, 190, 696, 747, nil, -74, 5607, 1724, 703, nil, 439, nil, 163, 22702, 22590, 5738, 5869, 6000, nil, 2564, 6131, 6262, nil, 475, 385, 162, 528, 273, 6401, 6532, 6663, 449, 747, nil, nil, nil, nil, nil, nil, nil, nil, nil, 22322, nil, 126, 6925, 7056, 74, nil, 7187, 7318, nil, nil, 7449, 7588, 7719, 7850, 23669, nil, nil, nil, nil, nil, 288, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 136, nil, nil, 382, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 540, nil, 7989, nil, nil, nil, nil, 8128, 8259, 8390, 8521, 8660, 2704, nil, 727, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 329, nil, 2984, 8922, 9053, 9184, 23974, 24218, 5075, 9446, 9577, 9708, 9839, 9970, nil, nil, 1167, 244, 176, 391, -41, 294, 283, nil, 10363, 2844, 240, 10494, 10625, 10756, 10887, 11018, 11149, 11280, 11411, 11542, 11673, 11804, 11935, 12066, 12197, 12328, 12459, 12590, 12721, 12852, 12983, 13114, 13245, 13376, 13507, 13638, 13769, nil, nil, 24096, nil, nil, 223, 13900, 14031, nil, nil, nil, nil, nil, nil, nil, 14162, nil, 2004, nil, 166, 157, nil, 14424, 183, 14555, nil, nil, 14686, 14817, nil, nil, 517, nil, 14956, 1289, 1272, 1222, 3824, 1190, 1227, 1161, 15480, 3264, 1027, 956, 926, 1236, 786, nil, 1201, 1159, 171, nil, nil, nil, 1199, 197, 1150, 16143, nil, 287, 1212, 1096, nil, 1210, nil, 16405, 3124, 16536, 1138, nil, 198, 377, 1156, 1111, 534, 1119, nil, nil, 24721, 584, -1, -10, 17060, 17191, 502, 1184, 1057, 34, -5, 816, 1135, 22, 1152, nil, nil, 212, 351, 176, nil, 659, nil, 16, 17453, nil, nil, nil, 549, 529, 472, 471, 214, 419, 350, 316, 283, nil, 233, nil, 18239, nil, 462, 421, 201, 413, 417, -16, -8, 426, nil, nil, nil, nil, nil, nil, nil, nil, 1005, 23300, nil, nil, nil, nil, 1001, nil, nil, 977, 18370, 951, nil, nil, 1024, 950, nil, 932, 930, -80, 439, 22910, nil, nil, nil, 492, 272, 972, nil, nil, 22188, 22456, nil, 1864, nil, 918, nil, nil, 744, nil, nil, nil, nil, 27, nil, 962, 23913, 23852, 18501, 221, 18632, 18763, 18894, 3684, 3264, 335, 218, 982, 972, 971, 970, 5345, 5206, 5476, 4384, 4524, 3964, 3824, 4804, 3404, 3544, 4944, 5075, 4104, 3124, 3094, 4664, 4244, 2144, -54, 22831, nil, nil, nil, nil, 879, nil, 108, 279, 858, nil, nil, 20859, nil, 20990, nil, 21121, nil, 306, nil, nil, nil, 21260, 1429, 3964, 810, 777, nil, nil, 775, 21792, 768, 21923, 24035, 24645, 884, 808, nil, 9315, 763, nil, 5206, 22054, 24340, 23730, 1164, 21661, 904, 903, 599, 833, nil, 21530, nil, nil, 21399, nil, nil, nil, nil, 24735, nil, 832, 837, nil, 840, 841, 850, nil, nil, nil, nil, nil, nil, nil, nil, 836, 606, nil, nil, 20728, nil, nil, nil, 945, nil, nil, nil, 946, nil, nil, 947, 884, 996, nil, 2284, 59, 24, 995, 1005, 20597, 20466, 24584, 24523, -19, nil, nil, 427, nil, 24462, 23791, 20335, nil, nil, nil, 461, 147, 2424, 927, nil, 55, nil, nil, nil, 867, nil, nil, nil, 898, nil, nil, 140, nil, 168, nil, nil, 884, nil, 887, nil, nil, nil, 23428, nil, 898, 20204, 20073, 411, 938, 19942, 19811, 19680, 19549, 954, nil, nil, 19418, 19287, 955, nil, 19156, 19025, nil, nil, -25, 164, 0, 602, 934, 884, 934, nil, 22795, nil, 1024, 1078, 79, 283, nil, 1164, 1304, nil, 990, nil, 1041, 18108, nil, nil, 17977, nil, 1023, -109, 17846, 1004, nil, 1008, 91, 57, 1059, 390, 1164, 1060, 1018, 17715, 1304, 1088, -14, 1142, 17584, nil, 1027, nil, 424, 61, 1028, 551, nil, nil, 641, 24787, nil, 24795, nil, 6309, nil, 17322, nil, 3110, nil, 1039, 200, 1047, nil, nil, nil, nil, 843, nil, 1164, nil, nil, nil, nil, 1179, nil, -11, 1061, 5, 35, 8, 6, 16929, 275, 1024, nil, 1090, 1444, 16798, nil, nil, 1236, 1584, 24812, 24851, 23556, nil, nil, nil, nil, nil, nil, 4244, nil, nil, nil, nil, nil, nil, nil, 1130, 16667, 2984, 16274, nil, 1144, nil, 2844, nil, 2704, nil, nil, 2564, nil, 2424, nil, 2284, 16012, 15881, 15750, 15619, -82, 15349, 1163, 1164, nil, 1165, 1166, 1168, nil, 1202, 1182, 1178, 1174, 15218, nil, nil, 1309, nil, nil, 3404, 1227, 1337, nil, nil, nil, nil, 1227, 210, nil, nil, 1373, nil, 4524, 1252, 1301, nil, nil, 1300, nil, nil, nil, nil, 1301, 1260, nil, nil, nil, -123, -99, nil, -76, -68, nil, 47, nil, nil, 71, 663, 92, 668, nil, 231, nil, 15087, 237, 744, 1724, nil, 14293, 1864, 7, 62, nil, 352, 552, 3544, nil, 362, 267, 623, nil, 284, 284, nil, 1444, 10232, 10101, 1584, 627, nil, nil, 24868, nil, 24876, nil, 7897, nil, nil, 417, 1290, 8791, 887, 475, nil, 423, nil, nil, nil, 2004, nil, nil, 39, 6794, nil, nil, 4384, 2144, nil, nil, 24707, nil, 15527, nil, 22519, nil, 24928, nil, nil, nil, nil, 388, 3344, 479, nil, 26, nil, 639, 645, nil, 179, nil, nil, nil, 649, nil, nil, nil, 577, nil, 558, nil, nil, 566, 568, 579, 591, nil, 595, nil, -112, nil, nil, nil, 496, 24401, nil, nil, nil, 4944, 500, 547, 569, 683, 572, nil, 629, 748, 648, 667, 671, 692, 697, 3484, 701, 3204, 4804, nil, nil, nil, nil, nil, 4664, nil, 4104, nil, 24936, nil, 24953, nil, 24992, nil, 25009, nil, nil, nil, 1150, 782, 785, 869, 5476, 24279, 24157, 1066, nil, nil, 25016, nil, nil, nil, nil, 3390, 811, 855, 1152, 1162, 1121, 1125, 337, 361, nil, nil, 368, 36, 35, -9, 744, 710, 715, nil, nil, nil, 25033, nil, nil, nil, nil, 23, nil, 725, nil ] racc_action_default = [ -3, -597, -1, -583, -4, -597, -7, -597, -597, -597, -597, -29, -597, -597, -597, -279, -597, -40, -43, -585, -597, -48, -50, -51, -52, -56, -256, -256, -256, -293, -328, -329, -68, -11, -72, -80, -82, -597, -488, -489, -597, -597, -597, -597, -597, -585, -237, -270, -271, -272, -273, -274, -275, -276, -277, -278, -573, -281, -283, -596, -563, -301, -389, -597, -597, -306, -309, -583, -597, -597, -597, -597, -330, -331, -429, -430, -431, -432, -433, -454, -436, -437, -456, -458, -441, -446, -450, -452, -468, -456, -470, -472, -473, -474, -475, -571, -477, -478, -572, -480, -481, -482, -483, -484, -485, -486, -487, -492, -493, -597, -2, -584, -592, -593, -594, -6, -597, -597, -597, -597, -597, -3, -17, -597, -111, -112, -113, -114, -115, -116, -117, -118, -119, -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, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -22, -120, -11, -597, -597, -246, -597, -597, -597, -597, -597, -597, -597, -585, -586, -47, -597, -488, -489, -597, -279, -597, -597, -229, -597, -11, -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, -398, -400, -597, -581, -582, -57, -246, -597, -300, -404, -413, -415, -63, -410, -64, -585, -65, -238, -251, -260, -260, -255, -597, -261, -597, -454, -565, -597, -597, -66, -67, -583, -12, -597, -15, -597, -70, -11, -585, -597, -73, -76, -11, -88, -89, -597, -597, -96, -293, -296, -585, -597, -328, -329, -332, -411, -597, -78, -597, -84, -290, -471, -597, -214, -215, -230, -597, -11, -597, -585, -239, -589, -589, -597, -597, -589, -597, -302, -303, -521, -49, -597, -597, -597, -597, -583, -597, -584, -488, -489, -597, -597, -279, -597, -342, -343, -106, -107, -597, -109, -597, -279, -597, -597, -488, -489, -321, -111, -112, -153, -154, -155, -171, -176, -183, -186, -323, -597, -561, -597, -434, -597, -597, -597, -597, -597, -597, -597, -597, 1024, -5, -595, -23, -24, -25, -26, -27, -597, -597, -19, -20, -21, -121, -597, -30, -39, -266, -597, -597, -265, -31, -196, -585, -247, -260, -260, -574, -575, -256, -408, -576, -577, -575, -574, -256, -407, -409, -576, -577, -37, -204, -38, -597, -41, -42, -194, -261, -44, -45, -46, -585, -299, -597, -597, -597, -246, -290, -597, -597, -597, -205, -206, -207, -208, -209, -210, -211, -212, -216, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -231, -232, -233, -234, -585, -378, -256, -574, -575, -54, -58, -585, -257, -378, -378, -585, -295, -252, -597, -253, -597, -258, -597, -262, -597, -568, -570, -10, -584, -14, -3, -585, -69, -288, -85, -74, -597, -585, -246, -597, -597, -95, -597, -471, -597, -81, -86, -597, -597, -597, -597, -235, -597, -421, -597, -284, -597, -240, -591, -590, -242, -591, -291, -292, -564, -390, -521, -393, -560, -560, -504, -506, -506, -506, -520, -522, -523, -524, -525, -526, -527, -528, -529, -597, -531, -533, -535, -540, -542, -543, -545, -550, -552, -553, -555, -556, -557, -597, -11, -333, -334, -11, -597, -597, -597, -597, -597, -246, -597, -597, -290, -314, -106, -107, -108, -597, -597, -246, -317, -494, -495, -597, -597, -11, -499, -325, -585, -435, -455, -460, -597, -462, -438, -457, -597, -459, -440, -597, -443, -597, -445, -448, -597, -449, -597, -469, -8, -18, -597, -28, -269, -597, -597, -412, -597, -248, -250, -597, -597, -59, -245, -405, -597, -597, -61, -406, -597, -597, -298, -587, -574, -575, -574, -575, -585, -194, -597, -379, -585, -381, -11, -53, -401, -378, -243, -11, -11, -294, -260, -259, -263, -597, -566, -567, -597, -13, -597, -71, -597, -77, -83, -585, -574, -575, -244, -92, -94, -597, -79, -597, -203, -213, -585, -596, -596, -282, -585, -287, -589, -597, -585, -597, -502, -503, -597, -597, -513, -597, -516, -597, -518, -597, -344, -597, -346, -348, -355, -585, -534, -544, -554, -558, -596, -335, -596, -307, -336, -337, -310, -597, -313, -597, -585, -574, -575, -578, -289, -597, -106, -107, -110, -585, -11, -597, -497, -319, -597, -11, -521, -521, -597, -562, -461, -464, -465, -466, -467, -11, -439, -442, -444, -447, -451, -453, -122, -267, -597, -197, -597, -588, -260, -33, -199, -34, -200, -60, -35, -202, -36, -201, -62, -195, -597, -597, -597, -597, -412, -597, -560, -560, -360, -362, -362, -362, -377, -597, -585, -383, -529, -537, -538, -548, -597, -403, -402, -11, -597, -597, -254, -264, -569, -16, -75, -90, -87, -297, -596, -340, -11, -422, -596, -423, -424, -597, -241, -391, -394, -396, -597, -560, -541, -559, -505, -506, -506, -532, -506, -506, -551, -506, -529, -546, -585, -597, -353, -597, -530, -597, -338, -597, -597, -11, -11, -312, -597, -11, -412, -597, -412, -597, -597, -11, -322, -597, -585, -597, -326, -597, -268, -32, -198, -249, -597, -236, -597, -358, -359, -368, -370, -597, -373, -597, -375, -380, -597, -597, -597, -536, -597, -399, -597, -414, -416, -9, -11, -428, -341, -597, -597, -426, -285, -11, -11, -392, -501, -597, -509, -597, -511, -597, -514, -597, -517, -519, -345, -347, -351, -597, -356, -304, -597, -305, -597, -597, -263, -596, -315, -318, -496, -597, -324, -498, -500, -499, -463, -560, -539, -361, -362, -362, -362, -362, -549, -362, -382, -585, -385, -387, -388, -547, -597, -290, -55, -427, -11, -97, -98, -597, -597, -105, -425, -597, -597, -506, -506, -506, -506, -349, -597, -354, -597, -11, -308, -311, -417, -418, -419, -11, -320, -11, -357, -597, -365, -597, -367, -597, -371, -597, -374, -376, -384, -597, -289, -578, -421, -246, -597, -597, -104, -395, -397, -597, -507, -510, -512, -515, -597, -352, -596, -597, -597, -362, -362, -362, -362, -386, -420, -585, -574, -575, -578, -103, -506, -350, -339, -316, -327, -597, -363, -366, -369, -372, -412, -508, -362, -364 ] clist = [ '216,327,132,132,26,258,573,373,431,26,275,275,275,522,122,205,409,415', '421,334,130,130,735,621,26,2,323,681,660,127,127,566,569,26,26,26,487', '26,478,542,406,835,6,259,337,337,428,6,337,277,277,277,297,823,535,111', '266,270,276,276,276,262,269,271,318,110,474,26,26,660,479,26,713,716', '114,311,311,219,780,329,332,582,513,525,528,314,804,532,328,338,339', '826,127,342,295,903,378,337,337,337,337,657,934,657,648,906,438,705', '936,311,311,311,653,654,881,26,591,838,115,592,26,26,26,26,26,26,273', '286,287,343,605,607,930,690,691,738,293,783,114,921,379,730,389,390', '391,392,394,385,965,694,696,698,725,6,359,363,840,782,781,341,839,484', '393,6,660,340,326,784,684,325,324,487,601,603,606,606,374,957,601,816', '933,586,350,533,500,813,336,687,335,331,275,889,890,473,481,434,435', '436,437,482,962,808,885,377,375,822,650,824,1003,380,26,26,26,26,936', '381,26,26,26,26,26,26,903,333,387,823,1,330,995,382,383,384,425,26,930', '717,405,542,657,657,416,740,405,745,275,275,731,415,421,642,616,651', '688,275,821,395,774,830,402,823,352,818,924,204,401,407,1011,26,26,426', '430,667,663,849,,872,26,,,676,734,,793,801,277,,,,510,826,,,277,276', '26,,,926,26,492,,276,,26,,,523,524,,728,,,,669,672,,,,963,,,337,337', ',672,,636,1012,26,26,,,497,514,844,823,511,,266,311,496,590,270,846', '26,26,,914,503,,495,967,,,,499,311,594,,114,505,480,,,26,,570,571,652', '483,403,,655,863,864,,433,927,,928,26,,720,672,,,,,665,132,622,672,729', '593,668,,,293,748,660,748,615,293,763,572,951,,130,768,,,,843,114,892', '796,127,,,847,,,,275,851,,,,,431,587,894,896,800,898,900,,901,,542,542', '812,489,,491,628,26,493,494,,627,633,,644,852,853,632,,,,,,425,,14,', ',,,14,416,,,,657,,,,,,,999,,739,220,,,275,1004,,,,,220,220,220,,14,302', '302,26,680,26,,628,,656,,,649,26,,,,,809,,796,,,968,,514,664,26,,,220', '220,425,514,220,347,357,357,,,416,917,425,6,,,,,311,686,416,,,,,,311', ',,275,,,,,990,991,992,993,,275,618,,803,26,,,26,,14,964,,942,26,220', '220,220,220,14,14,,,,26,,,,,834,26,,550,425,,,959,,719,425,,416,,792', ',132,,,,416,,,,,1020,1021,,752,622,810,,,785,130,26,26,,791,,26,26,', '127,26,,,714,714,758,,,,,,658,622,333,26,661,,,998,26,26,,732,733,700', ',,811,,,,785,14,220,220,220,854,,220,220,220,220,220,220,759,761,514', ',,764,766,658,,430,333,14,,802,,,,,,622,628,,,633,337,311,,778,622,405', '337,,,,,706,311,902,,,,,,,,220,220,26,,,,,26,26,220,433,,26,,919,,,', ',883,,,26,887,845,819,,14,819,,848,14,127,26,,302,14,,785,,15,,,,,15', ',,,,,,302,,,753,,,,658,333,14,220,1005,672,,,,550,,26,,,15,304,304,', '220,220,,,,,26,,700,857,,832,,,337,,,777,797,,220,798,,,311,,,,,,,349', '358,358,,,220,26,,26,26,807,,26,,,,,787,26,,,,,,,,,829,908,817,,,,39', ',,,,39,296,,,,15,16,,,,,16,,26,15,15,,,,,26,26,,,,,,779,39,301,301,', ',220,786,,,,,16,,978,311,714,856,,916,,,,,920,819,,311,778,,778,,778', ',,,346,362,362,362,,,700,,700,,26,351,,825,,827,,,550,,550,,,425,14', ',14,26,275,,,,302,26,220,26,,15,,,302,,,39,,,,,220,,622,26,39,39,16', ',,,,,15,550,550,16,16,,,,,912,425,,,,,,,,416,955,700,,,,,,333,,,,,,', ',14,,778,14,778,,778,923,778,220,777,,777,,777,,,400,,220,,,,,,14,,15', ',,,15,,,,304,15,700,787,700,296,787,,787,39,787,,,778,,,,304,,,16,,', ',220,220,15,429,,220,220,,39,220,,,,,,,700,,,16,,,,14,,,,,14,14,,,929', ',931,,,786,,786,,302,,,,,296,,,,,296,302,,,777,,777,952,777,953,777', '954,,,550,,,,39,,,,39,,,,301,39,,16,,,,16,,787,,787,16,787,,787,,301', ',,,,,220,777,,39,,14,220,,,,14,,,,16,,,,,,14,,,,,,,,,,,220,787,,1000', ',1001,,1002,,,786,,,,,,,,,,866,868,870,1010,,,,,38,,,875,,38,,,,14,', ',,,,15,,15,,,,1022,14,304,,,,,,,,304,,38,300,300,,,,,,,,,,,,,,,,,,220', ',14,14,,,14,,,,,,14,,,345,361,361,361,,,,,,,,,,,,,,15,,,15,,937,,,,', ',,,14,,,,945,,,14,14,,,,15,38,,,,,39,744,39,,38,38,,,301,,,16,,16,,13', '301,,,,13,,,970,972,974,976,,977,,,,,,,,,,,,,,14,710,,,712,,13,,,15', ',,,,15,15,,14,,,,,,14,,14,,304,39,,,39,,,,,,,304,16,,220,16,,,,,,38', ',,,,39,1016,1017,1018,1019,,,,,,,16,,,,,,,38,,,,,,1023,,,,,,790,13,', ',,794,795,,15,,13,13,,15,,,,,,,,,,15,429,,,39,,,,,39,39,,,,,16,,,,,16', '16,301,,,,38,,,,38,,,301,300,38,,,,,,,358,,,,,,15,,,300,,,,,,,,,38,15', ',,,,,,,,,,,13,855,,,,,,,,,,,,39,,,,,39,,,15,15,13,16,15,,,39,16,,15', ',,,,,,,16,,,,,,,,,,878,,,,,,,358,,,,,,884,,15,,,,947,,362,15,15,,,,39', ',,,,,,,13,,,16,13,39,,,,13,,910,911,,,913,16,,,,,,,,,,,,,,,,,,13,,,', '39,39,15,,39,,,,,,39,16,16,,,16,941,,,15,,16,,949,950,15,,15,,,,,,,', '362,,38,,38,,,,39,,300,,944,,,39,39,,300,16,,,,948,,,16,16,,,,,,,,,', ',,,,982,,,,,,,,,,,,,,,,,996,,,,,,997,,,,39,,,,38,,,38,,,,16,,,,,,39', ',,,,,39,,39,,,16,38,,,,,16,,16,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,13,,', ',,,,,,,,,,,,,,,,38,,,,,38,38,,,,,,,,,,,,300,,,,,,,,,,,300,,,,,,,,,,', ',,,,,,,,,13,,,13,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,38,,,,,38,,,,,,,,,,38', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,13,13,,361,,,,,,38,,,,,,,,,', ',,,38,,,,,227,,,,,,,,,274,274,274,,,,,,,,,,,320,321,322,,,,38,38,,,38', ',,,,,38,274,274,,,,,,,,,,13,,,,,13,,,,,,,,361,,13,,,,,,38,,,,943,,,38', '38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,13,,,,,38,,,,,,,', ',,,,,,,,,38,,,,,,38,,38,,,13,13,,,13,,,,,,13,,,,,,,,,,,,,,,,,,274,408', '274,,,427,432,,,,,,,,,13,,,,,,227,13,13,447,448,449,450,451,452,453', '454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470', '471,472,,,,,,,274,274,,,,,,,,274,,,,,,,274,,274,13,,274,274,,,,,,,,', ',,,,,13,,,,,,13,,13,,,,,,,,,,,,,,,,519,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,274,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,274,,427,643,408,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,274,,274,,274,,,,,,,,,,,,,,,,274,,,,,,,,,678,679,,,,,,,', ',,274,,,274,,,,,,,,,,,,,,,,,,,,,,,,,274,,,,,,,,,,,,,,,,,,,,274,274,', ',,,,,,,,274,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,274,755,,,274,274,760,762', ',,,765,767,,,643,769,,,,,,,,,,,,,,,,,,,,,,,,274,,,274,,,,,,,,,,,,,,', ',,,,,274,,,,,,,,,,,,,,,,,274,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,274,,858,,,,,,,,,,,,,,760,762,767,765,,861,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,274,,,,,,,,', ',,,,,,,,274,858,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,274' ] racc_goto_table = arr = ::Array.new(3023, 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 = [ '31,67,61,61,41,138,92,56,18,41,33,33,33,8,15,15,23,37,37,86,60,60,96', '24,41,2,31,10,178,57,57,89,89,41,41,41,73,41,39,163,27,90,7,36,29,29', '27,7,29,70,70,70,49,169,137,6,71,71,68,68,68,38,38,38,63,4,37,41,41', '178,23,41,91,91,95,64,64,20,126,70,70,54,51,69,69,50,11,69,68,17,17', '174,57,17,46,114,151,29,29,29,29,74,131,74,40,117,47,116,132,64,64,64', '40,40,12,41,110,11,5,111,41,41,41,41,41,41,44,44,44,4,155,155,175,121', '121,112,45,129,95,113,152,108,17,17,17,17,2,152,107,166,166,166,106', '7,55,55,105,118,127,104,103,47,7,7,178,102,101,124,100,99,98,73,156', '156,156,156,97,117,156,129,130,94,93,133,47,134,135,136,88,85,33,139', '140,141,143,29,29,29,29,144,145,146,147,150,84,127,72,127,131,153,41', '41,41,41,132,154,41,41,41,41,41,41,114,65,5,169,1,66,117,157,158,159', '57,41,175,92,68,163,74,74,71,160,68,161,33,33,162,37,37,23,62,42,137', '33,167,30,24,116,28,169,19,171,172,16,20,20,117,41,41,20,20,51,14,109', ',129,41,,,51,8,,40,24,70,,,,31,174,,,70,68,41,,,126,41,151,,68,,41,', ',29,31,,54,,,,23,37,,,,11,,,29,29,,37,,47,90,41,41,,,7,49,24,169,63', ',71,64,6,29,71,24,41,41,,91,50,,4,96,,,,46,64,29,,95,46,44,,,41,,17', '17,47,44,65,,47,121,121,,65,127,,127,41,,23,37,,,,,47,61,31,37,23,36', '47,,,45,156,178,156,15,45,39,4,127,,60,39,,,,89,95,121,73,57,,,8,,,', '33,8,,,,,18,95,166,166,51,166,166,,166,,163,163,69,65,,65,71,41,65,65', ',38,71,,31,137,137,38,,,,,,57,,22,,,,,22,71,,,,74,,,,,,,127,,47,22,', ',33,10,,,,,22,22,22,,22,22,22,41,29,41,,71,,70,,,38,41,,,,,27,,73,,', '121,,49,2,41,,,22,22,57,49,22,22,22,22,,,71,8,57,7,,,,,64,70,71,,,,', ',64,,,33,,,,,166,166,166,166,,33,65,,47,41,,,41,,22,92,,89,41,22,22', '22,22,22,22,,,,41,,,,,47,41,,168,57,,,89,,68,57,,71,,86,,61,,,,71,,', ',,24,166,,15,31,67,,,31,60,41,41,,138,,41,41,,57,41,,,95,95,70,,,,,', '65,31,65,41,65,,,8,41,41,,95,95,115,,,31,,,,31,22,22,22,22,56,,22,22', '22,22,22,22,20,20,49,,,20,20,65,,20,65,22,,49,,,,,,31,71,,,71,29,64', ',122,31,68,29,,,,,65,64,47,,,,,,,,22,22,41,,,,,41,41,22,65,,41,,47,', ',,,67,,,41,67,17,122,,22,122,,17,22,57,41,,22,22,,31,,25,,,,,25,,,,', ',,22,,,65,,,,65,65,22,22,23,37,,,,168,,41,,,25,25,25,,22,22,,,,,41,', '115,20,,115,,,29,,,120,65,,22,65,,,64,,,,,,,25,25,25,,,22,41,,41,41', '65,,41,,,,,170,41,,,,,,,,,65,17,120,,,,53,,,,,53,9,,,,25,26,,,,,26,', '41,25,25,,,,,41,41,,,,,,125,53,53,53,,,22,168,,,,,26,,31,64,95,65,,95', ',,,,95,122,,64,122,,122,,122,,,,53,53,53,53,,,115,,115,,41,26,,125,', '125,,,168,,168,,,57,22,,22,41,33,,,,22,41,22,41,,25,,,22,,,53,,,,,22', ',31,41,53,53,26,,,,,,25,168,168,26,26,,,,,65,57,,,,,,,,71,115,115,,', ',,,65,,,,,,,,22,,122,22,122,,122,120,122,22,120,,120,,120,,,9,,22,,', ',,,22,,25,,,,25,,,,25,25,115,170,115,9,170,,170,53,170,,,122,,,,25,', ',26,,,,22,22,25,26,,22,22,,53,22,,,,,,,115,,,26,,,,22,,,,,22,22,,,125', ',125,,,168,,168,,22,,,,,9,,,,,9,22,,,120,,120,125,120,125,120,125,,', '168,,,,53,,,,53,,,,53,53,,26,,,,26,,170,,170,26,170,,170,,53,,,,,,22', '120,,53,,22,22,,,,22,,,,26,,,,,,22,,,,,,,,,,,22,170,,125,,125,,125,', ',168,,,,,,,,,,123,123,123,125,,,,,52,,,22,,52,,,,22,,,,,,25,,25,,,,125', '22,25,,,,,,,,25,,52,52,52,,,,,,,,,,,,,,,,,,22,,22,22,,,22,,,,,,22,,', '52,52,52,52,,,,,,,,,,,,,,25,,,25,,22,,,,,,,,22,,,,22,,,22,22,,,,25,52', ',,,,53,25,53,,52,52,,,53,,,26,,26,,21,53,,,,21,,,123,123,123,123,,123', ',,,,,,,,,,,,,22,9,,,9,,21,,,25,,,,,25,25,,22,,,,,,22,,22,,25,53,,,53', ',,,,,,25,26,,22,26,,,,,,52,,,,,53,123,123,123,123,,,,,,,26,,,,,,,52', ',,,,,123,,,,,,9,21,,,,9,9,,25,,21,21,,25,,,,,,,,,,25,26,,,53,,,,,53', '53,,,,,26,,,,,26,26,53,,,,52,,,,52,,,53,52,52,,,,,,,25,,,,,,25,,,52', ',,,,,,,,52,25,,,,,,,,,,,,21,9,,,,,,,,,,,,53,,,,,53,,,25,25,21,26,25', ',,53,26,,25,,,,,,,,26,,,,,,,,,,9,,,,,,,25,,,,,,9,,25,,,,25,,53,25,25', ',,,53,,,,,,,,21,,,26,21,53,,,,21,,9,9,,,9,26,,,,,,,,,,,,,,,,,,21,,,', '53,53,25,,53,,,,,,53,26,26,,,26,9,,,25,,26,,9,9,25,,25,,,,,,,,53,,52', ',52,,,,53,,52,,53,,,53,53,,52,26,,,,26,,,26,26,,,,,,,,,,,,,,9,,,,,,', ',,,,,,,,,,9,,,,,,9,,,,53,,,,52,,,52,,,,26,,,,,,53,,,,,,53,,53,,,26,52', ',,,,26,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,21,,,,,,,,,,,,,,,,,,,52,', ',,,52,52,,,,,,,,,,,,52,,,,,,,,,,,52,,,,,,,,,,,,,,,,,,,,21,,,21,,,,,', ',,,,,,,,,,,,,,,,21,,,,,,,,52,,,,,52,,,,,,,,,,52,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,21,,,,,21,21,,52,,,,,,52,,,,,,,,,,,,,52,,,,,32,,,,,,,,', '32,32,32,,,,,,,,,,,32,32,32,,,,52,52,,,52,,,,,,52,32,32,,,,,,,,,,21', ',,,,21,,,,,,,,52,,21,,,,,,52,,,,52,,,52,52,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,21,,,,,,,,,,,,,21,,,,,52,,,,,,,,,,,,,,,,,52,,,,,,52,,52,,,21', '21,,,21,,,,,,21,,,,,,,,,,,,,,,,,,32,32,32,,,32,32,,,,,,,,,21,,,,,,32', '21,21,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32', '32,32,32,32,32,,,,,,,32,32,,,,,,,,32,,,,,,,32,,32,21,,32,32,,,,,,,,', ',,,,,21,,,,,,21,,21,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,32,,32,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,32,,32,,32,,,,,,,,,,,,,,,,32,,,,,,,,,32,32,,,,,,,,,,32,,,32,,', ',,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,,32,32,,,,,,,,,,32,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,32,32,,,32,32,32,32,,,,32,32,,,32,32,,,,', ',,,,,,,,,,,,,,,,,,,32,,,32,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,32', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,32,,,,,,,', ',,,,,,32,32,32,32,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,32,32,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32' ] racc_goto_check = arr = ::Array.new(3023, 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, 226, 25, nil, 62, 113, 52, 42, -311, 841, -494, -595, -690, nil, -224, 6, 254, 26, -205, 192, 57, 1379, 464, -193, -386, 767, 879, -167, 51, -19, 133, -19, 2039, -19, nil, nil, 19, -193, 35, -224, -369, 4, -226, nil, 97, 103, 61, -111, nil, 18, 50, -233, 1248, 868, -274, 85, -64, 21, nil, nil, 12, -6, -149, 23, 41, 163, 168, -58, 29, -245, 20, 30, -268, -241, -385, nil, nil, nil, nil, nil, nil, nil, nil, nil, 133, 129, -42, nil, 126, -307, -669, -498, -337, 114, -178, 71, -570, 105, 113, 111, -355, 108, 100, -553, 93, -560, -427, -766, -445, -460, -247, -254, -458, -715, -736, 111, -444, -728, -489, nil, 175, -403, 63, 461, -479, 254, -568, -488, nil, -509, -693, -771, -765, -153, -502, 124, -346, -282, -17, -623, -623, -64, nil, -73, -69, -713, -481, -606, nil, nil, 126, 17, 58, 126, 131, -251, -207, 144, 144, 144, -357, -356, -342, -297, nil, nil, -390, -439, 261, -640, 206, -428, -600, nil, -604, -735, nil, nil, -460 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 344, 291, nil, 521, nil, 836, nil, 288, 289, nil, nil, nil, 11, 12, 18, 226, 319, nil, nil, 224, 225, nil, nil, 17, nil, 439, 21, 22, 23, 24, nil, 675, nil, nil, nil, 308, nil, 25, 410, 32, nil, nil, 34, 37, 36, nil, 221, 222, 356, nil, 129, 418, 128, 131, 75, 76, nil, 90, 46, 280, nil, 805, 411, nil, 412, 423, 629, 485, 278, 264, 47, 48, 49, 50, 51, 52, 53, 54, 55, nil, 265, 61, nil, nil, nil, nil, nil, nil, nil, 567, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 702, 549, nil, 703, 925, 776, 537, nil, 538, nil, nil, 539, nil, 541, 645, nil, nil, nil, 547, nil, nil, nil, nil, nil, nil, nil, nil, nil, 422, nil, nil, nil, nil, nil, 74, 77, 78, nil, nil, nil, nil, nil, 596, nil, nil, nil, nil, nil, nil, 820, 737, 536, nil, 540, 828, 552, 554, 555, 788, 558, 559, 789, 562, 565, 283 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 145, :_reduce_none, 2, 146, :_reduce_2, 0, 147, :_reduce_3, 1, 147, :_reduce_4, 3, 147, :_reduce_5, 2, 147, :_reduce_6, 1, 149, :_reduce_none, 4, 149, :_reduce_8, 4, 152, :_reduce_9, 2, 153, :_reduce_10, 0, 157, :_reduce_11, 1, 157, :_reduce_12, 3, 157, :_reduce_13, 2, 157, :_reduce_14, 1, 158, :_reduce_none, 4, 158, :_reduce_16, 0, 174, :_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, 1, 151, :_reduce_none, 3, 162, :_reduce_41, 3, 162, :_reduce_42, 1, 173, :_reduce_none, 3, 173, :_reduce_44, 3, 173, :_reduce_45, 3, 173, :_reduce_46, 2, 173, :_reduce_47, 1, 173, :_reduce_none, 1, 161, :_reduce_none, 1, 164, :_reduce_none, 1, 164, :_reduce_none, 1, 178, :_reduce_none, 4, 178, :_reduce_53, 0, 186, :_reduce_54, 5, 183, :_reduce_55, 1, 185, :_reduce_none, 2, 177, :_reduce_57, 3, 177, :_reduce_58, 4, 177, :_reduce_59, 5, 177, :_reduce_60, 4, 177, :_reduce_61, 5, 177, :_reduce_62, 2, 177, :_reduce_63, 2, 177, :_reduce_64, 2, 177, :_reduce_65, 2, 177, :_reduce_66, 2, 177, :_reduce_67, 1, 163, :_reduce_68, 3, 163, :_reduce_69, 1, 190, :_reduce_70, 3, 190, :_reduce_71, 1, 189, :_reduce_none, 2, 189, :_reduce_73, 3, 189, :_reduce_74, 5, 189, :_reduce_75, 2, 189, :_reduce_76, 4, 189, :_reduce_77, 2, 189, :_reduce_78, 4, 189, :_reduce_79, 1, 189, :_reduce_80, 3, 189, :_reduce_81, 1, 193, :_reduce_none, 3, 193, :_reduce_83, 2, 192, :_reduce_84, 3, 192, :_reduce_85, 1, 195, :_reduce_86, 3, 195, :_reduce_87, 1, 194, :_reduce_88, 1, 194, :_reduce_89, 4, 194, :_reduce_90, 3, 194, :_reduce_91, 3, 194, :_reduce_92, 3, 194, :_reduce_93, 3, 194, :_reduce_94, 2, 194, :_reduce_95, 1, 194, :_reduce_96, 1, 170, :_reduce_97, 1, 170, :_reduce_98, 4, 170, :_reduce_99, 3, 170, :_reduce_100, 3, 170, :_reduce_101, 3, 170, :_reduce_102, 3, 170, :_reduce_103, 2, 170, :_reduce_104, 1, 170, :_reduce_105, 1, 198, :_reduce_106, 1, 198, :_reduce_none, 2, 199, :_reduce_108, 1, 199, :_reduce_109, 3, 199, :_reduce_110, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 203, :_reduce_116, 1, 203, :_reduce_none, 1, 159, :_reduce_none, 1, 159, :_reduce_none, 1, 160, :_reduce_120, 0, 206, :_reduce_121, 4, 160, :_reduce_122, 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_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_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_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 3, 176, :_reduce_194, 5, 176, :_reduce_195, 3, 176, :_reduce_196, 5, 176, :_reduce_197, 6, 176, :_reduce_198, 5, 176, :_reduce_199, 5, 176, :_reduce_200, 5, 176, :_reduce_201, 5, 176, :_reduce_202, 4, 176, :_reduce_203, 3, 176, :_reduce_204, 3, 176, :_reduce_205, 3, 176, :_reduce_206, 3, 176, :_reduce_207, 3, 176, :_reduce_208, 3, 176, :_reduce_209, 3, 176, :_reduce_210, 3, 176, :_reduce_211, 3, 176, :_reduce_212, 4, 176, :_reduce_213, 2, 176, :_reduce_214, 2, 176, :_reduce_215, 3, 176, :_reduce_216, 3, 176, :_reduce_217, 3, 176, :_reduce_218, 3, 176, :_reduce_219, 3, 176, :_reduce_220, 3, 176, :_reduce_221, 3, 176, :_reduce_222, 3, 176, :_reduce_223, 3, 176, :_reduce_224, 3, 176, :_reduce_225, 3, 176, :_reduce_226, 3, 176, :_reduce_227, 3, 176, :_reduce_228, 2, 176, :_reduce_229, 2, 176, :_reduce_230, 3, 176, :_reduce_231, 3, 176, :_reduce_232, 3, 176, :_reduce_233, 3, 176, :_reduce_234, 3, 176, :_reduce_235, 6, 176, :_reduce_236, 1, 176, :_reduce_none, 1, 209, :_reduce_none, 1, 210, :_reduce_none, 2, 210, :_reduce_none, 4, 210, :_reduce_241, 2, 210, :_reduce_242, 3, 215, :_reduce_243, 0, 216, :_reduce_244, 1, 216, :_reduce_none, 0, 167, :_reduce_246, 1, 167, :_reduce_none, 2, 167, :_reduce_none, 4, 167, :_reduce_249, 2, 167, :_reduce_250, 1, 188, :_reduce_251, 2, 188, :_reduce_252, 2, 188, :_reduce_253, 4, 188, :_reduce_254, 1, 188, :_reduce_255, 0, 219, :_reduce_256, 2, 182, :_reduce_257, 2, 218, :_reduce_258, 2, 217, :_reduce_259, 0, 217, :_reduce_260, 1, 212, :_reduce_261, 2, 212, :_reduce_262, 3, 212, :_reduce_263, 4, 212, :_reduce_264, 1, 172, :_reduce_265, 1, 172, :_reduce_none, 3, 171, :_reduce_267, 4, 171, :_reduce_268, 2, 171, :_reduce_269, 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_280, 0, 242, :_reduce_281, 4, 208, :_reduce_282, 0, 243, :_reduce_283, 0, 244, :_reduce_284, 6, 208, :_reduce_285, 0, 245, :_reduce_286, 4, 208, :_reduce_287, 3, 208, :_reduce_288, 3, 208, :_reduce_289, 2, 208, :_reduce_290, 3, 208, :_reduce_291, 3, 208, :_reduce_292, 1, 208, :_reduce_293, 4, 208, :_reduce_294, 3, 208, :_reduce_295, 1, 208, :_reduce_296, 5, 208, :_reduce_297, 4, 208, :_reduce_298, 3, 208, :_reduce_299, 2, 208, :_reduce_300, 1, 208, :_reduce_none, 2, 208, :_reduce_302, 2, 208, :_reduce_303, 6, 208, :_reduce_304, 6, 208, :_reduce_305, 0, 246, :_reduce_306, 0, 247, :_reduce_307, 7, 208, :_reduce_308, 0, 248, :_reduce_309, 0, 249, :_reduce_310, 7, 208, :_reduce_311, 5, 208, :_reduce_312, 4, 208, :_reduce_313, 0, 250, :_reduce_314, 0, 251, :_reduce_315, 9, 208, :_reduce_316, 0, 252, :_reduce_317, 6, 208, :_reduce_318, 0, 253, :_reduce_319, 7, 208, :_reduce_320, 0, 254, :_reduce_321, 5, 208, :_reduce_322, 0, 255, :_reduce_323, 6, 208, :_reduce_324, 0, 256, :_reduce_325, 0, 257, :_reduce_326, 9, 208, :_reduce_327, 1, 208, :_reduce_328, 1, 208, :_reduce_329, 1, 208, :_reduce_330, 1, 208, :_reduce_331, 1, 166, :_reduce_none, 1, 233, :_reduce_none, 1, 233, :_reduce_none, 2, 233, :_reduce_335, 1, 235, :_reduce_none, 1, 235, :_reduce_none, 1, 234, :_reduce_none, 5, 234, :_reduce_339, 1, 155, :_reduce_none, 2, 155, :_reduce_341, 1, 237, :_reduce_none, 1, 237, :_reduce_none, 1, 258, :_reduce_344, 3, 258, :_reduce_345, 1, 261, :_reduce_346, 3, 261, :_reduce_347, 1, 260, :_reduce_none, 4, 260, :_reduce_349, 6, 260, :_reduce_350, 3, 260, :_reduce_351, 5, 260, :_reduce_352, 2, 260, :_reduce_353, 4, 260, :_reduce_354, 1, 260, :_reduce_355, 3, 260, :_reduce_356, 4, 262, :_reduce_357, 2, 262, :_reduce_358, 2, 262, :_reduce_359, 1, 262, :_reduce_360, 2, 267, :_reduce_361, 0, 267, :_reduce_362, 6, 268, :_reduce_363, 8, 268, :_reduce_364, 4, 268, :_reduce_365, 6, 268, :_reduce_366, 4, 268, :_reduce_367, 2, 268, :_reduce_none, 6, 268, :_reduce_369, 2, 268, :_reduce_370, 4, 268, :_reduce_371, 6, 268, :_reduce_372, 2, 268, :_reduce_373, 4, 268, :_reduce_374, 2, 268, :_reduce_375, 4, 268, :_reduce_376, 1, 268, :_reduce_none, 0, 184, :_reduce_378, 1, 184, :_reduce_379, 3, 272, :_reduce_380, 1, 272, :_reduce_381, 4, 272, :_reduce_382, 1, 273, :_reduce_383, 4, 273, :_reduce_384, 1, 274, :_reduce_385, 3, 274, :_reduce_386, 1, 275, :_reduce_387, 1, 275, :_reduce_none, 0, 279, :_reduce_389, 0, 280, :_reduce_390, 4, 232, :_reduce_391, 4, 277, :_reduce_392, 1, 277, :_reduce_393, 0, 283, :_reduce_394, 4, 278, :_reduce_395, 0, 284, :_reduce_396, 4, 278, :_reduce_397, 0, 285, :_reduce_398, 5, 282, :_reduce_399, 2, 179, :_reduce_400, 4, 179, :_reduce_401, 5, 179, :_reduce_402, 5, 179, :_reduce_403, 2, 231, :_reduce_404, 4, 231, :_reduce_405, 4, 231, :_reduce_406, 3, 231, :_reduce_407, 3, 231, :_reduce_408, 3, 231, :_reduce_409, 2, 231, :_reduce_410, 1, 231, :_reduce_411, 4, 231, :_reduce_412, 0, 287, :_reduce_413, 5, 230, :_reduce_414, 0, 288, :_reduce_415, 5, 230, :_reduce_416, 5, 236, :_reduce_417, 1, 289, :_reduce_418, 1, 289, :_reduce_none, 6, 154, :_reduce_420, 0, 154, :_reduce_421, 1, 290, :_reduce_422, 1, 290, :_reduce_none, 1, 290, :_reduce_none, 2, 291, :_reduce_425, 1, 291, :_reduce_none, 2, 156, :_reduce_427, 1, 156, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 221, :_reduce_432, 1, 293, :_reduce_433, 2, 293, :_reduce_434, 3, 294, :_reduce_435, 1, 294, :_reduce_436, 1, 294, :_reduce_437, 3, 222, :_reduce_438, 4, 223, :_reduce_439, 3, 224, :_reduce_440, 0, 298, :_reduce_441, 3, 298, :_reduce_442, 1, 299, :_reduce_443, 2, 299, :_reduce_444, 3, 226, :_reduce_445, 0, 301, :_reduce_446, 3, 301, :_reduce_447, 3, 225, :_reduce_448, 3, 227, :_reduce_449, 0, 302, :_reduce_450, 3, 302, :_reduce_451, 0, 303, :_reduce_452, 3, 303, :_reduce_453, 0, 295, :_reduce_454, 2, 295, :_reduce_455, 0, 296, :_reduce_456, 2, 296, :_reduce_457, 0, 297, :_reduce_458, 2, 297, :_reduce_459, 1, 300, :_reduce_460, 2, 300, :_reduce_461, 0, 305, :_reduce_462, 4, 300, :_reduce_463, 1, 304, :_reduce_464, 1, 304, :_reduce_465, 1, 304, :_reduce_466, 1, 304, :_reduce_none, 1, 204, :_reduce_468, 3, 205, :_reduce_469, 1, 292, :_reduce_470, 2, 292, :_reduce_471, 1, 207, :_reduce_472, 1, 207, :_reduce_473, 1, 207, :_reduce_474, 1, 207, :_reduce_475, 1, 196, :_reduce_476, 1, 196, :_reduce_477, 1, 196, :_reduce_478, 1, 196, :_reduce_479, 1, 196, :_reduce_480, 1, 197, :_reduce_481, 1, 197, :_reduce_482, 1, 197, :_reduce_483, 1, 197, :_reduce_484, 1, 197, :_reduce_485, 1, 197, :_reduce_486, 1, 197, :_reduce_487, 1, 228, :_reduce_488, 1, 228, :_reduce_489, 1, 165, :_reduce_490, 1, 165, :_reduce_491, 1, 169, :_reduce_492, 1, 169, :_reduce_493, 1, 238, :_reduce_494, 0, 306, :_reduce_495, 4, 238, :_reduce_496, 2, 238, :_reduce_497, 3, 240, :_reduce_498, 0, 308, :_reduce_499, 3, 240, :_reduce_500, 4, 307, :_reduce_501, 2, 307, :_reduce_502, 2, 307, :_reduce_503, 1, 307, :_reduce_504, 2, 310, :_reduce_505, 0, 310, :_reduce_506, 6, 281, :_reduce_507, 8, 281, :_reduce_508, 4, 281, :_reduce_509, 6, 281, :_reduce_510, 4, 281, :_reduce_511, 6, 281, :_reduce_512, 2, 281, :_reduce_513, 4, 281, :_reduce_514, 6, 281, :_reduce_515, 2, 281, :_reduce_516, 4, 281, :_reduce_517, 2, 281, :_reduce_518, 4, 281, :_reduce_519, 1, 281, :_reduce_520, 0, 281, :_reduce_521, 1, 276, :_reduce_522, 1, 276, :_reduce_523, 1, 276, :_reduce_524, 1, 276, :_reduce_525, 1, 259, :_reduce_none, 1, 259, :_reduce_527, 1, 312, :_reduce_528, 1, 313, :_reduce_529, 3, 313, :_reduce_530, 1, 269, :_reduce_531, 3, 269, :_reduce_532, 1, 314, :_reduce_533, 2, 315, :_reduce_534, 1, 315, :_reduce_535, 2, 316, :_reduce_536, 1, 316, :_reduce_537, 1, 263, :_reduce_538, 3, 263, :_reduce_539, 1, 309, :_reduce_540, 3, 309, :_reduce_541, 1, 317, :_reduce_none, 1, 317, :_reduce_none, 2, 264, :_reduce_544, 1, 264, :_reduce_545, 3, 318, :_reduce_546, 3, 319, :_reduce_547, 1, 270, :_reduce_548, 3, 270, :_reduce_549, 1, 311, :_reduce_550, 3, 311, :_reduce_551, 1, 320, :_reduce_none, 1, 320, :_reduce_none, 2, 271, :_reduce_554, 1, 271, :_reduce_555, 1, 321, :_reduce_none, 1, 321, :_reduce_none, 2, 266, :_reduce_558, 2, 265, :_reduce_559, 0, 265, :_reduce_560, 1, 241, :_reduce_none, 3, 241, :_reduce_562, 0, 229, :_reduce_563, 2, 229, :_reduce_none, 1, 214, :_reduce_565, 3, 214, :_reduce_566, 3, 322, :_reduce_567, 2, 322, :_reduce_568, 4, 322, :_reduce_569, 2, 322, :_reduce_570, 1, 187, :_reduce_none, 1, 187, :_reduce_none, 1, 187, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 286, :_reduce_none, 1, 286, :_reduce_none, 1, 286, :_reduce_none, 1, 180, :_reduce_none, 1, 180, :_reduce_none, 0, 148, :_reduce_none, 1, 148, :_reduce_none, 0, 175, :_reduce_none, 1, 175, :_reduce_none, 2, 191, :_reduce_587, 2, 168, :_reduce_588, 0, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 239, :_reduce_592, 1, 239, :_reduce_none, 1, 150, :_reduce_none, 2, 150, :_reduce_none, 0, 211, :_reduce_596 ] racc_reduce_n = 597 racc_shift_n = 1024 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tDSTAR => 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, :tREGEXP_OPT => 119, :tWORDS_BEG => 120, :tQWORDS_BEG => 121, :tSYMBOLS_BEG => 122, :tQSYMBOLS_BEG => 123, :tSTRING_DBEG => 124, :tSTRING_DVAR => 125, :tSTRING_END => 126, :tSTRING_DEND => 127, :tSTRING => 128, :tSYMBOL => 129, :tNL => 130, :tEH => 131, :tCOLON => 132, :tCOMMA => 133, :tSPACE => 134, :tSEMI => 135, :tLAMBDA => 136, :tLAMBEG => 137, :tCHARACTER => 138, :tRATIONAL => 139, :tIMAGINARY => 140, :tLABEL_END => 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tDSTAR", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING_DEND", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "backref", "lhs", "mrhs", "mrhs_arg", "expr", "@1", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@2", "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", "@3", "simple_numeric", "primary", "arg_value", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@4", "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", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "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", "@21", "@22", "f_args", "do_block", "@23", "@24", "@25", "operation3", "@26", "@27", "cases", "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", "@28", "@29", "args_tail", "@30", "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", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_9(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_10(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_11(val, _values, result) result = [] result end def _reduce_12(val, _values, result) result = [ val[0] ] result end def _reduce_13(val, _values, result) result = val[0] << val[2] result end def _reduce_14(val, _values, result) result = [ val[1] ] result end # reduce 15 omitted def _reduce_16(val, _values, result) diagnostic :error, :begin_in_method, nil, val[0] result end def _reduce_17(val, _values, result) @lexer.state = :expr_fname result end def _reduce_18(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_19(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_20(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_21(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_22(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_23(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_25(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_26(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_27(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_28(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 29 omitted def _reduce_30(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_31(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_32(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_33(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_34(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_35(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_36(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_37(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_38(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_39(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end # reduce 40 omitted def _reduce_41(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_42(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end # reduce 43 omitted def _reduce_44(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_45(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_46(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_47(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 48 omitted # reduce 49 omitted # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_54(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_55(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end # reduce 56 omitted def _reduce_57(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_58(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_59(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_60(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_61(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_62(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_63(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_64(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_65(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_66(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_67(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_68(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_69(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_70(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_71(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 72 omitted def _reduce_73(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_74(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_75(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_76(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_77(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_78(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_79(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_80(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_81(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 82 omitted def _reduce_83(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_84(val, _values, result) result = [ val[0] ] result end def _reduce_85(val, _values, result) result = val[0] << val[1] result end def _reduce_86(val, _values, result) result = [ val[0] ] result end def _reduce_87(val, _values, result) result = val[0] << val[2] result end def _reduce_88(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_89(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_90(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_91(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_92(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_93(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_94(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_95(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_96(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_97(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_98(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_99(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_100(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_101(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_102(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_103(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_104(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_105(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_106(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 107 omitted def _reduce_108(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_109(val, _values, result) result = @builder.const(val[0]) result end def _reduce_110(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 111 omitted # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted # reduce 115 omitted def _reduce_116(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 117 omitted # reduce 118 omitted # reduce 119 omitted def _reduce_120(val, _values, result) result = [ val[0] ] result end def _reduce_121(val, _values, result) @lexer.state = :expr_fname result end def _reduce_122(val, _values, result) result = val[0] << val[3] result end # 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 # 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 def _reduce_194(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_195(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) result end def _reduce_196(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_197(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) result end def _reduce_198(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_199(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_200(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_201(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_202(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_203(val, _values, result) const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) result end def _reduce_204(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_205(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_207(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) result end def _reduce_214(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_215(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_218(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_225(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_229(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_230(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_231(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_232(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_233(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_235(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_236(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 237 omitted # reduce 238 omitted # reduce 239 omitted # reduce 240 omitted def _reduce_241(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_242(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_243(val, _values, result) result = val result end def _reduce_244(val, _values, result) result = [ nil, [], nil ] result end # reduce 245 omitted def _reduce_246(val, _values, result) result = [] result end # reduce 247 omitted # reduce 248 omitted def _reduce_249(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_250(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_251(val, _values, result) result = [ val[0] ] result end def _reduce_252(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_253(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_254(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_255(val, _values, result) result = [ val[0] ] result end def _reduce_256(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) result end def _reduce_257(val, _values, result) @lexer.cmdarg = val[0] result = val[1] result end def _reduce_258(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_259(val, _values, result) result = [ val[1] ] result end def _reduce_260(val, _values, result) result = [] result end def _reduce_261(val, _values, result) result = [ val[0] ] result end def _reduce_262(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_263(val, _values, result) result = val[0] << val[2] result end def _reduce_264(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_265(val, _values, result) result = @builder.array(nil, val[0], nil) result end # reduce 266 omitted def _reduce_267(val, _values, result) result = val[0] << val[2] result end def _reduce_268(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_269(val, _values, result) result = [ @builder.splat(val[0], 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 # reduce 278 omitted # reduce 279 omitted def _reduce_280(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_281(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_282(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin_keyword(val[0], val[2], val[3]) result end def _reduce_283(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_284(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_285(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) result end def _reduce_286(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_287(val, _values, result) result = @builder.begin(val[0], nil, val[3]) result end def _reduce_288(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_289(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_290(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_291(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_292(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_293(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_294(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_295(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_296(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_297(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_298(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_299(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_300(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 301 omitted def _reduce_302(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_303(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_304(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_305(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) 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 = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_309(val, _values, result) @lexer.cond.push(true) result end def _reduce_310(val, _values, result) @lexer.cond.pop result end def _reduce_311(val, _values, result) result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_312(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_313(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_314(val, _values, result) @lexer.cond.push(true) result end def _reduce_315(val, _values, result) @lexer.cond.pop result end def _reduce_316(val, _values, result) result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_317(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:class) result end def _reduce_318(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_319(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) result end def _reduce_320(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_321(val, _values, result) @static_env.extend_static @lexer.push_cmdarg result end def _reduce_322(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend result end def _reduce_323(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:def) result end def _reduce_324(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_325(val, _values, result) @lexer.state = :expr_fname result end def _reduce_326(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) result end def _reduce_327(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_328(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_329(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_330(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_331(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 332 omitted # reduce 333 omitted # reduce 334 omitted def _reduce_335(val, _values, result) result = val[1] result end # reduce 336 omitted # reduce 337 omitted # reduce 338 omitted def _reduce_339(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 340 omitted def _reduce_341(val, _values, result) result = val result end # reduce 342 omitted # reduce 343 omitted def _reduce_344(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_345(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_346(val, _values, result) result = [ val[0] ] result end def _reduce_347(val, _values, result) result = val[0] << val[2] result end # reduce 348 omitted def _reduce_349(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])) result end def _reduce_350(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) result end def _reduce_351(val, _values, result) result = val[0]. push(@builder.restarg(val[2])) result end def _reduce_352(val, _values, result) result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) result end def _reduce_353(val, _values, result) result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_354(val, _values, result) result = [ @builder.restarg(val[0], val[1]), *val[3] ] result end def _reduce_355(val, _values, result) result = [ @builder.restarg(val[0]) ] result end def _reduce_356(val, _values, result) result = [ @builder.restarg(val[0]), *val[2] ] result end def _reduce_357(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_358(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_359(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_360(val, _values, result) result = [ val[0] ] result end def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = [] result end def _reduce_363(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_364(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_365(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_366(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_367(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 368 omitted def _reduce_369(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_370(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_371(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_372(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_373(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_374(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_375(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_376(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 377 omitted def _reduce_378(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_379(val, _values, result) @lexer.state = :expr_value result end def _reduce_380(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_381(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_382(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_383(val, _values, result) result = [] result end def _reduce_384(val, _values, result) result = val[2] result end def _reduce_385(val, _values, result) result = [ val[0] ] result end def _reduce_386(val, _values, result) result = val[0] << val[2] result end def _reduce_387(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 388 omitted def _reduce_389(val, _values, result) @static_env.extend_dynamic result end def _reduce_390(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_391(val, _values, result) @lexer.cmdarg = val[2] @lexer.cmdarg.lexpop result = [ val[1], val[3] ] @static_env.unextend result end def _reduce_392(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_393(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_394(val, _values, result) @context.push(:lambda) result end def _reduce_395(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_396(val, _values, result) @context.push(:lambda) result end def _reduce_397(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_398(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_399(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_400(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_401(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_402(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_403(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_404(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_405(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_406(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_407(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_408(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_409(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_410(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_411(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_412(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_413(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_414(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_415(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_416(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_417(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_418(val, _values, result) result = [ val[0] ] result end # reduce 419 omitted def _reduce_420(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_421(val, _values, result) result = [] result end def _reduce_422(val, _values, result) result = [ val[0] ] result end # reduce 423 omitted # reduce 424 omitted def _reduce_425(val, _values, result) result = [ val[0], val[1] ] result end # reduce 426 omitted def _reduce_427(val, _values, result) result = [ val[0], val[1] ] result end # reduce 428 omitted # reduce 429 omitted # reduce 430 omitted # reduce 431 omitted def _reduce_432(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_433(val, _values, result) result = [ val[0] ] result end def _reduce_434(val, _values, result) result = val[0] << val[1] result end def _reduce_435(val, _values, result) result = @builder.string_compose(val[0], val[1], val[2]) result end def _reduce_436(val, _values, result) result = @builder.string(val[0]) result end def _reduce_437(val, _values, result) result = @builder.character(val[0]) result end def _reduce_438(val, _values, result) result = @builder.xstring_compose(val[0], val[1], val[2]) result end def _reduce_439(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_440(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_441(val, _values, result) result = [] result end def _reduce_442(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_443(val, _values, result) result = [ val[0] ] result end def _reduce_444(val, _values, result) result = val[0] << val[1] result end def _reduce_445(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_446(val, _values, result) result = [] result end def _reduce_447(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_448(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_449(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_450(val, _values, result) result = [] result end def _reduce_451(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_452(val, _values, result) result = [] result end def _reduce_453(val, _values, result) result = val[0] << @builder.symbol_internal(val[1]) result end def _reduce_454(val, _values, result) result = [] result end def _reduce_455(val, _values, result) result = val[0] << val[1] result end def _reduce_456(val, _values, result) result = [] result end def _reduce_457(val, _values, result) result = val[0] << val[1] result end def _reduce_458(val, _values, result) result = [] result end def _reduce_459(val, _values, result) result = val[0] << val[1] result end def _reduce_460(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_461(val, _values, result) result = val[1] result end def _reduce_462(val, _values, result) @lexer.cond.push(false) @lexer.cmdarg.push(false) result end def _reduce_463(val, _values, result) @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_464(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_465(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_466(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 467 omitted def _reduce_468(val, _values, result) result = @builder.symbol(val[0]) result end def _reduce_469(val, _values, result) result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_470(val, _values, result) result = val[0] result end def _reduce_471(val, _values, result) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end result end def _reduce_472(val, _values, result) result = @builder.integer(val[0]) result end def _reduce_473(val, _values, result) result = @builder.float(val[0]) result end def _reduce_474(val, _values, result) result = @builder.rational(val[0]) result end def _reduce_475(val, _values, result) result = @builder.complex(val[0]) result end def _reduce_476(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_477(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_478(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_479(val, _values, result) result = @builder.const(val[0]) result end def _reduce_480(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_481(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_482(val, _values, result) result = @builder.self(val[0]) result end def _reduce_483(val, _values, result) result = @builder.true(val[0]) result end def _reduce_484(val, _values, result) result = @builder.false(val[0]) result end def _reduce_485(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_486(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_487(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_488(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_489(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_490(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_491(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_492(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_493(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_494(val, _values, result) result = nil result end def _reduce_495(val, _values, result) @lexer.state = :expr_value result end def _reduce_496(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_497(val, _values, result) yyerrok result = nil result end def _reduce_498(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_499(val, _values, result) result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_500(val, _values, result) @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) result end def _reduce_501(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_502(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_503(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_504(val, _values, result) result = [ val[0] ] result end def _reduce_505(val, _values, result) result = val[1] result end def _reduce_506(val, _values, result) result = [] result end def _reduce_507(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_508(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_509(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_510(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_511(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_512(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_513(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_514(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_515(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_516(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_517(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_518(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_519(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_520(val, _values, result) result = val[0] result end def _reduce_521(val, _values, result) result = [] result end def _reduce_522(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_523(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_524(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_525(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 526 omitted def _reduce_527(val, _values, result) @static_env.declare val[0][0] result = val[0] result end def _reduce_528(val, _values, result) result = val[0] result end def _reduce_529(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_530(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_531(val, _values, result) result = [ val[0] ] result end def _reduce_532(val, _values, result) result = val[0] << val[2] result end def _reduce_533(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] result end def _reduce_534(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_535(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_536(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_537(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_538(val, _values, result) result = [ val[0] ] result end def _reduce_539(val, _values, result) result = val[0] << val[2] result end def _reduce_540(val, _values, result) result = [ val[0] ] result end def _reduce_541(val, _values, result) result = val[0] << val[2] result end # reduce 542 omitted # reduce 543 omitted def _reduce_544(val, _values, result) @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] result end def _reduce_545(val, _values, result) result = [ @builder.kwrestarg(val[0]) ] result end def _reduce_546(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_547(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_548(val, _values, result) result = [ val[0] ] result end def _reduce_549(val, _values, result) result = val[0] << val[2] result end def _reduce_550(val, _values, result) result = [ val[0] ] result end def _reduce_551(val, _values, result) result = val[0] << val[2] result end # reduce 552 omitted # reduce 553 omitted def _reduce_554(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_555(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 556 omitted # reduce 557 omitted def _reduce_558(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_559(val, _values, result) result = [ val[1] ] result end def _reduce_560(val, _values, result) result = [] result end # reduce 561 omitted def _reduce_562(val, _values, result) result = val[1] result end def _reduce_563(val, _values, result) result = [] result end # reduce 564 omitted def _reduce_565(val, _values, result) result = [ val[0] ] result end def _reduce_566(val, _values, result) result = val[0] << val[2] result end def _reduce_567(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_568(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end def _reduce_569(val, _values, result) result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) result end def _reduce_570(val, _values, result) result = @builder.kwsplat(val[0], val[1]) result end # reduce 571 omitted # reduce 572 omitted # reduce 573 omitted # reduce 574 omitted # reduce 575 omitted # reduce 576 omitted # reduce 577 omitted # reduce 578 omitted # reduce 579 omitted # reduce 580 omitted # reduce 581 omitted # reduce 582 omitted # reduce 583 omitted # reduce 584 omitted # reduce 585 omitted # reduce 586 omitted def _reduce_587(val, _values, result) result = val[1] result end def _reduce_588(val, _values, result) result = val[1] result end # reduce 589 omitted # reduce 590 omitted # reduce 591 omitted def _reduce_592(val, _values, result) yyerrok result end # reduce 593 omitted # reduce 594 omitted # reduce 595 omitted def _reduce_596(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby22 end # module Parser parser-2.7.0.2/lib/parser/runner.rb0000644000004100000410000001366713617025313017122 0ustar www-datawww-data# frozen_string_literal: true require 'benchmark' require 'find' require 'optparse' require 'parser' module Parser class Runner def self.go(options) new.execute(options) end def initialize Parser::Builders::Default.modernize @option_parser = OptionParser.new { |opts| setup_option_parsing(opts) } @parser_class = nil @parser = nil @files = [] @fragments = [] @warnings = false @benchmark = false @source_count = 0 @source_size = 0 end def execute(options) parse_options(options) prepare_parser process_all_input end private def runner_name raise NotImplementedError, "implement #{self.class}##{__callee__}" end def setup_option_parsing(opts) opts.banner = "Usage: #{runner_name} [options] FILE|DIRECTORY..." opts.on_tail '-h', '--help', 'Display this help message and exit' do puts opts.help puts <<-HELP If you specify a DIRECTORY, then all *.rb files are fetched from it recursively and appended to the file list. The default parsing mode is for current Ruby (#{RUBY_VERSION}). HELP exit end opts.on_tail '-V', '--version', 'Output version information and exit' do puts "#{runner_name} based on parser version #{Parser::VERSION}" exit end opts.on '--18', 'Parse as Ruby 1.8.7 would' do require 'parser/ruby18' @parser_class = Parser::Ruby18 end opts.on '--19', 'Parse as Ruby 1.9.3 would' do require 'parser/ruby19' @parser_class = Parser::Ruby19 end opts.on '--20', 'Parse as Ruby 2.0 would' do require 'parser/ruby20' @parser_class = Parser::Ruby20 end opts.on '--21', 'Parse as Ruby 2.1 would' do require 'parser/ruby21' @parser_class = Parser::Ruby21 end opts.on '--22', 'Parse as Ruby 2.2 would' do require 'parser/ruby22' @parser_class = Parser::Ruby22 end opts.on '--23', 'Parse as Ruby 2.3 would' do require 'parser/ruby23' @parser_class = Parser::Ruby23 end opts.on '--24', 'Parse as Ruby 2.4 would' do require 'parser/ruby24' @parser_class = Parser::Ruby24 end opts.on '--25', 'Parse as Ruby 2.5 would' do require 'parser/ruby25' @parser_class = Parser::Ruby25 end opts.on '--26', 'Parse as Ruby 2.6 would' do require 'parser/ruby26' @parser_class = Parser::Ruby26 end opts.on '--27', 'Parse as Ruby 2.7 would' do require 'parser/ruby27' @parser_class = Parser::Ruby27 end opts.on '--mac', 'Parse as MacRuby 0.12 would' do require 'parser/macruby' @parser_class = Parser::MacRuby end opts.on '--ios', 'Parse as mid-2015 RubyMotion would' do require 'parser/rubymotion' @parser_class = Parser::RubyMotion end opts.on '-w', '--warnings', 'Enable warnings' do |w| @warnings = w end opts.on '-B', '--benchmark', 'Benchmark the processor' do |b| @benchmark = b end opts.on '-e fragment', 'Process a fragment of Ruby code' do |fragment| @fragments << fragment end end def parse_options(options) @option_parser.parse!(options) # Slop has just removed recognized options from `options`. options.each do |file_or_dir| if File.directory?(file_or_dir) Find.find(file_or_dir) do |path| @files << path if path.end_with? '.rb' end else @files << file_or_dir end end if @files.empty? && @fragments.empty? $stderr.puts 'Need something to parse!' exit 1 end if @parser_class.nil? require 'parser/current' @parser_class = Parser::CurrentRuby end end def prepare_parser @parser = @parser_class.new @parser.diagnostics.all_errors_are_fatal = true @parser.diagnostics.ignore_warnings = !@warnings @parser.diagnostics.consumer = lambda do |diagnostic| puts(diagnostic.render) end end def input_size @files.size + @fragments.size end def process_all_input parsing_time = Benchmark.measure do process_fragments process_files end if @benchmark report_with_time(parsing_time) end end def process_fragments @fragments.each_with_index do |fragment, index| fragment = fragment.dup.force_encoding(@parser.default_encoding) buffer = Source::Buffer.new("(fragment:#{index})") buffer.source = fragment process_buffer(buffer) end end def process_files @files.each do |filename| source = File.read(filename).force_encoding(@parser.default_encoding) buffer = Parser::Source::Buffer.new(filename) if @parser.class.name == 'Parser::Ruby18' buffer.raw_source = source else buffer.source = source end process_buffer(buffer) end end def process_buffer(buffer) @parser.reset process(buffer) @source_count += 1 @source_size += buffer.source.size rescue Parser::SyntaxError # skip rescue StandardError $stderr.puts("Failed on: #{buffer.name}") raise end def process(buffer) raise NotImplementedError, "implement #{self.class}##{__callee__}" end def report_with_time(parsing_time) cpu_time = parsing_time.utime speed = '%.3f' % (@source_size / cpu_time / 1000) puts "Parsed #{@source_count} files (#{@source_size} characters)" \ " in #{'%.2f' % cpu_time} seconds (#{speed} kchars/s)." if defined?(RUBY_ENGINE) engine = RUBY_ENGINE else engine = 'ruby' end puts "Running on #{engine} #{RUBY_VERSION}." end end end parser-2.7.0.2/lib/parser/current.rb0000644000004100000410000000437413617025313017266 0ustar www-datawww-data# frozen_string_literal: true module Parser class << self def warn_syntax_deviation(feature, version) warn "warning: parser/current is loading #{feature}, which recognizes" warn "warning: #{version}-compliant syntax, but you are running #{RUBY_VERSION}." warn "warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri." end private :warn_syntax_deviation end case RUBY_VERSION when /^2\.0\./ current_version = '2.0.0' if RUBY_VERSION != current_version warn_syntax_deviation 'parser/ruby20', current_version end require 'parser/ruby20' CurrentRuby = Ruby20 when /^2\.1\./ current_version = '2.1.10' if RUBY_VERSION != current_version warn_syntax_deviation 'parser/ruby21', current_version end require 'parser/ruby21' CurrentRuby = Ruby21 when /^2\.2\./ current_version = '2.2.10' if RUBY_VERSION != current_version warn_syntax_deviation 'parser/ruby22', current_version end require 'parser/ruby22' CurrentRuby = Ruby22 when /^2\.3\./ current_version = '2.3.8' if RUBY_VERSION != current_version warn_syntax_deviation 'parser/ruby23', current_version end require 'parser/ruby23' CurrentRuby = Ruby23 when /^2\.4\./ current_version = '2.4.9' if RUBY_VERSION != current_version warn_syntax_deviation 'parser/ruby24', current_version end require 'parser/ruby24' CurrentRuby = Ruby24 when /^2\.5\./ current_version = '2.5.7' if RUBY_VERSION != current_version warn_syntax_deviation 'parser/ruby25', current_version end require 'parser/ruby25' CurrentRuby = Ruby25 when /^2\.6\./ current_version = '2.6.5' if RUBY_VERSION != current_version warn_syntax_deviation 'parser/ruby26', current_version end require 'parser/ruby26' CurrentRuby = Ruby26 when /^2\.7\./ current_version = '2.7.0' if RUBY_VERSION != current_version warn_syntax_deviation 'parser/ruby27', current_version end require 'parser/ruby27' CurrentRuby = Ruby27 else # :nocov: # Keep this in sync with released Ruby. warn_syntax_deviation 'parser/ruby27', '2.7.x' require 'parser/ruby27' CurrentRuby = Ruby27 end end parser-2.7.0.2/lib/parser/source/0000755000004100000410000000000013617025313016547 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/source/comment/0000755000004100000410000000000013617025313020211 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/source/comment/associator.rb0000644000004100000410000001423613617025313022713 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source ## # A processor which associates AST nodes with comments based on their # location in source code. It may be used, for example, to implement # rdoc-style processing. # # @example # require 'parser/current' # # ast, comments = Parser::CurrentRuby.parse_with_comments(<<-CODE) # # Class stuff # class Foo # # Attr stuff # # @see bar # attr_accessor :foo # end # CODE # # p Parser::Source::Comment.associate(ast, comments) # # => { # # (class (const nil :Foo) ...) => # # [#], # # (send nil :attr_accessor (sym :foo)) => # # [#, # # #] # # } # # @see {associate} # # @!attribute skip_directives # Skip file processing directives disguised as comments. # Namely: # # * Shebang line, # * Magic encoding comment. # # @return [Boolean] # # @api public # class Comment::Associator attr_accessor :skip_directives ## # @param [Parser::AST::Node] ast # @param [Array] comments def initialize(ast, comments) @ast = ast @comments = comments @skip_directives = true end ## # Compute a mapping between AST nodes and comments. Comment is # associated with the node, if it is one of the following types: # # - preceding comment, it ends before the node start # - sparse comment, it is located inside the node, after all child nodes # - decorating comment, it starts at the same line, where the node ends # # This rule is unambiguous and produces the result # one could reasonably expect; for example, this code # # # foo # hoge # bar # + fuga # # will result in the following association: # # { # (send (lvar :hoge) :+ (lvar :fuga)) => # [#], # (lvar :fuga) => # [#] # } # # Note that comments after the end of the end of a passed tree range are # ignored (except root decorating comment). # # Note that {associate} produces unexpected result for nodes which are # equal but have distinct locations; comments for these nodes are merged. # # @return [Hash>] # @deprecated Use {associate_locations}. # def associate @map_using_locations = false do_associate end ## # Same as {associate}, but uses `node.loc` instead of `node` as # the hash key, thus producing an unambiguous result even in presence # of equal nodes. # # @return [Hash>] # def associate_locations @map_using_locations = true do_associate end private def do_associate @mapping = Hash.new { |h, k| h[k] = [] } @comment_num = -1 advance_comment advance_through_directives if @skip_directives visit(@ast) if @ast @mapping end def visit(node) process_leading_comments(node) return unless @current_comment # If the next comment is beyond the last line of this node, we don't # need to iterate over its subnodes # (Unless this node is a heredoc... there could be a comment in its body, # inside an interpolation) node_loc = node.location if @current_comment.location.line <= node_loc.last_line || node_loc.is_a?(Map::Heredoc) node.children.each do |child| next unless child.is_a?(AST::Node) && child.loc && child.loc.expression visit(child) end process_trailing_comments(node) end end def process_leading_comments(node) return if node.type == :begin while current_comment_before?(node) # preceding comment associate_and_advance_comment(node) end end def process_trailing_comments(node) while current_comment_before_end?(node) associate_and_advance_comment(node) # sparse comment end while current_comment_decorates?(node) associate_and_advance_comment(node) # decorating comment end end def advance_comment @comment_num += 1 @current_comment = @comments[@comment_num] end def current_comment_before?(node) return false if !@current_comment comment_loc = @current_comment.location.expression node_loc = node.location.expression comment_loc.end_pos <= node_loc.begin_pos end def current_comment_before_end?(node) return false if !@current_comment comment_loc = @current_comment.location.expression node_loc = node.location.expression comment_loc.end_pos <= node_loc.end_pos end def current_comment_decorates?(node) return false if !@current_comment @current_comment.location.line == node.location.last_line end def associate_and_advance_comment(node) key = @map_using_locations ? node.location : node @mapping[key] << @current_comment advance_comment end MAGIC_COMMENT_RE = /^#\s*(-\*-|)\s*(frozen_string_literal|warn_indent|warn_past_scope):.*\1$/ def advance_through_directives # Skip shebang. if @current_comment && @current_comment.text.start_with?('#!'.freeze) advance_comment end # Skip magic comments. if @current_comment && @current_comment.text =~ MAGIC_COMMENT_RE advance_comment end # Skip encoding line. if @current_comment && @current_comment.text =~ Buffer::ENCODING_RE advance_comment end end end end end parser-2.7.0.2/lib/parser/source/comment.rb0000644000004100000410000000542713617025313020546 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source ## # A comment in the source code. # # @!attribute [r] text # @return [String] # # @!attribute [r] location # @return [Parser::Source::Map] # # @api public # class Comment attr_reader :text attr_reader :location alias_method :loc, :location ## # Associate `comments` with `ast` nodes by their corresponding node. # # @param [Parser::AST::Node] ast # @param [Array] comments # @return [Hash>] # @see Parser::Source::Comment::Associator#associate # @deprecated Use {associate_locations}. # def self.associate(ast, comments) associator = Associator.new(ast, comments) associator.associate end ## # Associate `comments` with `ast` nodes by their location in the # source. # # @param [Parser::AST::Node] ast # @param [Array] comments # @return [Hash>] # @see Parser::Source::Comment::Associator#associate_locations # def self.associate_locations(ast, comments) associator = Associator.new(ast, comments) associator.associate_locations end ## # @param [Parser::Source::Range] range # def initialize(range) @location = Parser::Source::Map.new(range) @text = range.source.freeze freeze end ## # Type of this comment. # # * Inline comments correspond to `:inline`: # # # whatever # # * Block comments correspond to `:document`: # # =begin # hi i am a document # =end # # @return [Symbol] # def type if text.start_with?("#".freeze) :inline elsif text.start_with?("=begin".freeze) :document end end ## # @see #type # @return [Boolean] true if this is an inline comment. # def inline? type == :inline end ## # @see #type # @return [Boolean] true if this is a block comment. # def document? type == :document end ## # Compares comments. Two comments are equal if they # correspond to the same source range. # # @param [Object] other # @return [Boolean] # def ==(other) other.is_a?(Source::Comment) && @location == other.location end ## # @return [String] a human-readable representation of this comment # def inspect "#" end end end end parser-2.7.0.2/lib/parser/source/buffer.rb0000644000004100000410000002136613617025313020355 0ustar www-datawww-data# encoding: ascii-8bit # frozen_string_literal: true module Parser module Source ## # A buffer with source code. {Buffer} contains the source code itself, # associated location information (name and first line), and takes care # of encoding. # # A source buffer is immutable once populated. # # @!attribute [r] name # Buffer name. If the buffer was created from a file, the name corresponds # to relative path to the file. # @return [String] buffer name # # @!attribute [r] first_line # First line of the buffer, 1 by default. # @return [Integer] first line # # @api public # class Buffer attr_reader :name, :first_line ## # @api private # ENCODING_RE = /[\s#](en)?coding\s*[:=]\s* ( # Special-case: there's a UTF8-MAC encoding. (utf8-mac) | # Chew the suffix; it's there for emacs compat. ([A-Za-z0-9_-]+?)(-unix|-dos|-mac) | ([A-Za-z0-9_-]+) ) /x ## # Try to recognize encoding of `string` as Ruby would, i.e. by looking for # magic encoding comment or UTF-8 BOM. `string` can be in any encoding. # # @param [String] string # @return [String, nil] encoding name, if recognized # def self.recognize_encoding(string) return if string.empty? # extract the first two lines in an efficient way string =~ /\A(.*)\n?(.*\n)?/ first_line, second_line = $1, $2 if first_line.start_with?("\xef\xbb\xbf".freeze) # BOM return Encoding::UTF_8 elsif first_line[0, 2] == '#!'.freeze encoding_line = second_line else encoding_line = first_line end return nil if encoding_line.nil? || encoding_line[0] != '#' if (result = ENCODING_RE.match(encoding_line)) Encoding.find(result[3] || result[4] || result[6]) else nil end end ## # Recognize encoding of `input` and process it so it could be lexed. # # * If `input` does not contain BOM or magic encoding comment, it is # kept in the original encoding. # * If the detected encoding is binary, `input` is kept in binary. # * Otherwise, `input` is re-encoded into UTF-8 and returned as a # new string. # # This method mutates the encoding of `input`, but not its content. # # @param [String] input # @return [String] # @raise [EncodingError] # def self.reencode_string(input) original_encoding = input.encoding detected_encoding = recognize_encoding(input.force_encoding(Encoding::BINARY)) if detected_encoding.nil? input.force_encoding(original_encoding) elsif detected_encoding == Encoding::BINARY input else input. force_encoding(detected_encoding). encode(Encoding::UTF_8) end end def initialize(name, first_line = 1) @name = name.to_s @source = nil @first_line = first_line @lines = nil @line_begins = nil # UTF-32-reencoded source for O(1) slicing @slice_source = nil # Cache for fast lookup @line_for_position = {} @column_for_position = {} end ## # Populate this buffer from correspondingly named file. # # @example # Parser::Source::Buffer.new('foo/bar.rb').read # # @return [Buffer] self # @raise [ArgumentError] if already populated # def read File.open(@name, 'rb') do |io| self.source = io.read end self end ## # Source code contained in this buffer. # # @return [String] source code # @raise [RuntimeError] if buffer is not populated yet # def source if @source.nil? raise RuntimeError, 'Cannot extract source from uninitialized Source::Buffer' end @source end ## # Populate this buffer from a string with encoding autodetection. # `input` is mutated if not frozen. # # @param [String] input # @raise [ArgumentError] if already populated # @raise [EncodingError] if `input` includes invalid byte sequence for the encoding # @return [String] # def source=(input) input = input.dup if input.frozen? input = self.class.reencode_string(input) unless input.valid_encoding? raise EncodingError, "invalid byte sequence in #{input.encoding.name}" end self.raw_source = input end ## # Populate this buffer from a string without encoding autodetection. # # @param [String] input # @raise [ArgumentError] if already populated # @return [String] # def raw_source=(input) if @source raise ArgumentError, 'Source::Buffer is immutable' end @source = input.gsub("\r\n".freeze, "\n".freeze).freeze if !@source.ascii_only? && @source.encoding != Encoding::UTF_32LE && @source.encoding != Encoding::BINARY @slice_source = @source.encode(Encoding::UTF_32LE) end end def slice(range) if @slice_source.nil? @source[range] else @slice_source[range].encode(@source.encoding) end end ## # Convert a character index into the source to a `[line, column]` tuple. # # @param [Integer] position # @return [[Integer, Integer]] `[line, column]` # def decompose_position(position) line_no, line_begin = line_for(position) [ @first_line + line_no, position - line_begin ] end ## # Convert a character index into the source to a line number. # # @param [Integer] position # @return [Integer] line # @api private # def line_for_position(position) @line_for_position[position] ||= begin line_no, _ = line_for(position) @first_line + line_no end end ## # Convert a character index into the source to a column number. # # @param [Integer] position # @return [Integer] column # @api private # def column_for_position(position) @column_for_position[position] ||= begin _, line_begin = line_for(position) position - line_begin end end ## # Return an `Array` of source code lines. # # @return [Array] # def source_lines @lines ||= begin lines = @source.lines.to_a lines << ''.dup if @source.end_with?("\n".freeze) lines.each do |line| line.chomp!("\n".freeze) line.freeze end lines.freeze end end ## # Extract line `lineno` from source, taking `first_line` into account. # # @param [Integer] lineno # @return [String] # @raise [IndexError] if `lineno` is out of bounds # def source_line(lineno) source_lines.fetch(lineno - @first_line).dup end ## # Extract line `lineno` as a new `Range`, taking `first_line` into account. # # @param [Integer] lineno # @return [Range] # @raise [IndexError] if `lineno` is out of bounds # def line_range(lineno) index = lineno - @first_line + 1 if index <= 0 || index > line_begins.size raise IndexError, 'Parser::Source::Buffer: range for line ' \ "#{lineno} requested, valid line numbers are #{@first_line}.." \ "#{@first_line + line_begins.size - 1}" elsif index == line_begins.size Range.new(self, line_begins[-index][1], @source.size) else Range.new(self, line_begins[-index][1], line_begins[-index - 1][1] - 1) end end ## # @return [Range] A range covering the whole source # def source_range @source_range ||= Range.new(self, 0, source.size) end ## # Number of last line in the buffer # # @return [Integer] # def last_line line_begins.size + @first_line - 1 end private def line_begins unless @line_begins @line_begins, index = [ [ 0, 0 ] ], 0 while index = @source.index("\n".freeze, index) index += 1 @line_begins.unshift [ @line_begins.length, index ] end end @line_begins end def line_for(position) line_begins.bsearch do |line, line_begin| line_begin <= position end end end end end parser-2.7.0.2/lib/parser/source/tree_rewriter/0000755000004100000410000000000013617025313021431 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/source/tree_rewriter/action.rb0000644000004100000410000001130513617025313023233 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source ## # @api private # # Actions are arranged in a tree and get combined so that: # children are strictly contained by their parent # sibblings all disjoint from one another # only actions with replacement==nil may have children # class TreeRewriter::Action attr_reader :range, :replacement, :insert_before, :insert_after def initialize(range, enforcer, insert_before: '', replacement: nil, insert_after: '', children: [] ) @range, @enforcer, @children, @insert_before, @replacement, @insert_after = range, enforcer, children.freeze, insert_before.freeze, replacement, insert_after.freeze freeze end # Assumes action.children.empty? def combine(action) return self unless action.insertion? || action.replacement # Ignore empty action do_combine(action) end def ordered_replacements reps = [] reps << [@range.begin, @insert_before] unless @insert_before.empty? reps << [@range, @replacement] if @replacement reps.concat(@children.sort_by(&:range).flat_map(&:ordered_replacements)) reps << [@range.end, @insert_after] unless @insert_after.empty? reps end def insertion? !insert_before.empty? || !insert_after.empty? || (replacement && !replacement.empty?) end protected def with(range: @range, children: @children, insert_before: @insert_before, replacement: @replacement, insert_after: @insert_after) children = swallow(children) if replacement self.class.new(range, @enforcer, children: children, insert_before: insert_before, replacement: replacement, insert_after: insert_after) end # Assumes range.contains?(action.range) && action.children.empty? def do_combine(action) if action.range == @range merge(action) else place_in_hierachy(action) end end def place_in_hierachy(action) family = @children.group_by { |child| child.relationship_with(action) } if family[:fusible] fuse_deletions(action, family[:fusible], [*family[:sibbling], *family[:child]]) else extra_sibbling = if family[:parent] # action should be a descendant of one of the children family[:parent][0].do_combine(action) elsif family[:child] # or it should become the parent of some of the children, action.with(children: family[:child]) else # or else it should become an additional child action end with(children: [*family[:sibbling], extra_sibbling]) end end def fuse_deletions(action, fusible, other_sibblings) without_fusible = with(children: other_sibblings) fused_range = [action, *fusible].map(&:range).inject(:join) fused_deletion = action.with(range: fused_range) without_fusible.do_combine(fused_deletion) end # Returns what relationship self should have with `action`; either of # :sibbling, :parent, :child, :fusible or raises a CloberingError # In case of equal range, returns :parent def relationship_with(action) if action.range == @range || @range.contains?(action.range) :parent elsif @range.contained?(action.range) :child elsif @range.disjoint?(action.range) :sibbling elsif !action.insertion? && !insertion? @enforcer.call(:crossing_deletions) { {range: action.range, conflict: @range} } :fusible else @enforcer.call(:crossing_insertions) { {range: action.range, conflict: @range} } end end # Assumes action.range == range && action.children.empty? def merge(action) call_enforcer_for_merge(action) with( insert_before: "#{action.insert_before}#{insert_before}", replacement: action.replacement || @replacement, insert_after: "#{insert_after}#{action.insert_after}", ) end def call_enforcer_for_merge(action) @enforcer.call(:different_replacements) do if @replacement && action.replacement && @replacement != action.replacement {range: @range, replacement: action.replacement, other_replacement: @replacement} end end end def swallow(children) @enforcer.call(:swallowed_insertions) do insertions = children.select(&:insertion?) {range: @range, conflict: insertions.map(&:range)} unless insertions.empty? end [] end end end end parser-2.7.0.2/lib/parser/source/rewriter/0000755000004100000410000000000013617025313020412 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/source/rewriter/action.rb0000644000004100000410000000212113617025313022210 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source ## # @api private # class Rewriter::Action include Comparable attr_reader :range, :replacement, :allow_multiple_insertions, :order alias_method :allow_multiple_insertions?, :allow_multiple_insertions def initialize(range, replacement='', allow_multiple_insertions = false, order = 0) @range = range @replacement = replacement @allow_multiple_insertions = allow_multiple_insertions @order = order freeze end def <=>(other) result = range.begin_pos <=> other.range.begin_pos return result unless result.zero? order <=> other.order end def to_s if @range.length == 0 && @replacement.empty? 'do nothing' elsif @range.length == 0 "insert #{@replacement.inspect}" elsif @replacement.empty? "remove #{@range.length} character(s)" else "replace #{@range.length} character(s) with #{@replacement.inspect}" end end end end end parser-2.7.0.2/lib/parser/source/range.rb0000644000004100000410000002051313617025313020171 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source ## # A range of characters in a particular source buffer. # # The range is always exclusive, i.e. a range with `begin_pos` of 3 and # `end_pos` of 5 will contain the following characters: # # example # ^^ # # @!attribute [r] source_buffer # @return [Parser::Diagnostic::Engine] # # @!attribute [r] begin_pos # @return [Integer] index of the first character in the range # # @!attribute [r] end_pos # @return [Integer] index of the character after the last character in the range # # @api public # class Range include Comparable attr_reader :source_buffer attr_reader :begin_pos, :end_pos ## # @param [Buffer] source_buffer # @param [Integer] begin_pos # @param [Integer] end_pos # def initialize(source_buffer, begin_pos, end_pos) if end_pos < begin_pos raise ArgumentError, 'Parser::Source::Range: end_pos must not be less than begin_pos' end if source_buffer.nil? raise ArgumentError, 'Parser::Source::Range: source_buffer must not be nil' end @source_buffer = source_buffer @begin_pos, @end_pos = begin_pos, end_pos freeze end ## # @return [Range] a zero-length range located just before the beginning # of this range. # def begin with(end_pos: @begin_pos) end ## # @return [Range] a zero-length range located just after the end # of this range. # def end with(begin_pos: @end_pos) end ## # @return [Integer] amount of characters included in this range. # def size @end_pos - @begin_pos end alias length size ## # Line number of the beginning of this range. By default, the first line # of a buffer is 1; as such, line numbers are most commonly one-based. # # @see Buffer # @return [Integer] line number of the beginning of this range. # def line @source_buffer.line_for_position(@begin_pos) end alias_method :first_line, :line ## # @return [Integer] zero-based column number of the beginning of this range. # def column @source_buffer.column_for_position(@begin_pos) end ## # @return [Integer] line number of the end of this range. # def last_line @source_buffer.line_for_position(@end_pos) end ## # @return [Integer] zero-based column number of the end of this range. # def last_column @source_buffer.column_for_position(@end_pos) end ## # @return [::Range] a range of columns spanned by this range. # @raise RangeError # def column_range if self.begin.line != self.end.line raise RangeError, "#{self.inspect} spans more than one line" end self.begin.column...self.end.column end ## # @return [String] a line of source code containing the beginning of this range. # def source_line @source_buffer.source_line(line) end ## # @return [String] all source code covered by this range. # def source @source_buffer.slice(self.begin_pos...self.end_pos) end ## # `is?` provides a concise way to compare the source corresponding to this range. # For example, `r.source == '(' || r.source == 'begin'` is equivalent to # `r.is?('(', 'begin')`. # def is?(*what) what.include?(source) end ## # @return [Array] a set of character indexes contained in this range. # def to_a (@begin_pos...@end_pos).to_a end ## # Composes a GNU/Clang-style string representation of the beginning of this # range. # # For example, for the following range in file `foo.rb`, # # def foo # ^^^ # # `to_s` will return `foo.rb:1:5`. # Note that the column index is one-based. # # @return [String] # def to_s line, column = @source_buffer.decompose_position(@begin_pos) [@source_buffer.name, line, column + 1].join(':') end ## # @param [Hash] Endpoint(s) to change, any combination of :begin_pos or :end_pos # @return [Range] the same range as this range but with the given end point(s) changed # to the given value(s). # def with(begin_pos: @begin_pos, end_pos: @end_pos) Range.new(@source_buffer, begin_pos, end_pos) end ## # @param [Hash] Endpoint(s) to change, any combination of :begin_pos or :end_pos # @return [Range] the same range as this range but with the given end point(s) adjusted # by the given amount(s) # def adjust(begin_pos: 0, end_pos: 0) Range.new(@source_buffer, @begin_pos + begin_pos, @end_pos + end_pos) end ## # @param [Integer] new_size # @return [Range] a range beginning at the same point as this range and length `new_size`. # def resize(new_size) with(end_pos: @begin_pos + new_size) end ## # @param [Range] other # @return [Range] smallest possible range spanning both this range and `other`. # def join(other) Range.new(@source_buffer, [@begin_pos, other.begin_pos].min, [@end_pos, other.end_pos].max) end ## # @param [Range] other # @return [Range] overlapping region of this range and `other`, or `nil` # if they do not overlap # def intersect(other) unless disjoint?(other) Range.new(@source_buffer, [@begin_pos, other.begin_pos].max, [@end_pos, other.end_pos].min) end end ## # Return `true` iff this range and `other` are disjoint. # # Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing? # # @param [Range] other # @return [Boolean] # def disjoint?(other) if empty? && other.empty? @begin_pos != other.begin_pos else @begin_pos >= other.end_pos || other.begin_pos >= @end_pos end end ## # Return `true` iff this range is not disjoint from `other`. # # @param [Range] other # @return [Boolean] `true` if this range and `other` overlap # def overlaps?(other) !disjoint?(other) end ## # Returns true iff this range contains (strictly) `other`. # # Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing? # # @param [Range] other # @return [Boolean] # def contains?(other) (other.begin_pos <=> @begin_pos) + (@end_pos <=> other.end_pos) >= (other.empty? ? 2 : 1) end ## # Return `other.contains?(self)` # # Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing? # # @param [Range] other # @return [Boolean] # def contained?(other) other.contains?(self) end ## # Returns true iff both ranges intersect and also have different elements from one another. # # Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing? # # @param [Range] other # @return [Boolean] # def crossing?(other) return false unless overlaps?(other) (@begin_pos <=> other.begin_pos) * (@end_pos <=> other.end_pos) == 1 end ## # Checks if a range is empty; if it contains no characters # @return [Boolean] def empty? @begin_pos == @end_pos end ## # Compare ranges, first by begin_pos, then by end_pos. # def <=>(other) return nil unless other.is_a?(::Parser::Source::Range) && @source_buffer == other.source_buffer (@begin_pos <=> other.begin_pos).nonzero? || (@end_pos <=> other.end_pos) end ## # @return [String] a human-readable representation of this range. # def inspect "#" end end end end parser-2.7.0.2/lib/parser/source/tree_rewriter.rb0000644000004100000410000002302613617025313021761 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source ## # {TreeRewriter} performs the heavy lifting in the source rewriting process. # It schedules code updates to be performed in the correct order. # # For simple cases, the resulting source will be obvious. # # Examples for more complex cases follow. Assume these examples are acting on # the source `'puts(:hello, :world)`. The methods #wrap, #remove, etc. # receive a Range as first argument; for clarity, examples below use english # sentences and a string of raw code instead. # # ## Overlapping ranges: # # Any two rewriting actions on overlapping ranges will fail and raise # a `ClobberingError`, unless they are both deletions (covered next). # # * wrap ':hello, ' with '(' and ')' # * wrap ', :world' with '(' and ')' # => CloberringError # # ## Overlapping deletions: # # * remove ':hello, ' # * remove ', :world' # # The overlapping ranges are merged and `':hello, :world'` will be removed. # This policy can be changed. `:crossing_deletions` defaults to `:accept` # but can be set to `:warn` or `:raise`. # # ## Multiple actions at the same end points: # # Results will always be independent on the order they were given. # Exception: rewriting actions done on exactly the same range (covered next). # # Example: # * replace ', ' by ' => ' # * wrap ':hello, :world' with '{' and '}' # * replace ':world' with ':everybody' # * wrap ':world' with '[', ']' # # The resulting string will be `'puts({:hello => [:everybody]})'` # and this result is independent on the order the instructions were given in. # # Note that if the two "replace" were given as a single replacement of ', :world' # for ' => :everybody', the result would be a `ClobberingError` because of the wrap # in square brackets. # # ## Multiple wraps on same range: # * wrap ':hello' with '(' and ')' # * wrap ':hello' with '[' and ']' # # The wraps are combined in order given and results would be `'puts([(:hello)], :world)'`. # # ## Multiple replacements on same range: # * replace ':hello' by ':hi', then # * replace ':hello' by ':hey' # # The replacements are made in the order given, so the latter replacement # supersedes the former and ':hello' will be replaced by ':hey'. # # This policy can be changed. `:different_replacements` defaults to `:accept` # but can be set to `:warn` or `:raise`. # # ## Swallowed insertions: # wrap 'world' by '__', '__' # replace ':hello, :world' with ':hi' # # A containing replacement will swallow the contained rewriting actions # and `':hello, :world'` will be replaced by `':hi'`. # # This policy can be changed for swallowed insertions. `:swallowed_insertions` # defaults to `:accept` but can be set to `:warn` or `:raise` # # ## Implementation # The updates are organized in a tree, according to the ranges they act on # (where children are strictly contained by their parent), hence the name. # # @!attribute [r] source_buffer # @return [Source::Buffer] # # @!attribute [r] diagnostics # @return [Diagnostic::Engine] # # @api public # class TreeRewriter attr_reader :source_buffer attr_reader :diagnostics ## # @param [Source::Buffer] source_buffer # def initialize(source_buffer, crossing_deletions: :accept, different_replacements: :accept, swallowed_insertions: :accept) @diagnostics = Diagnostic::Engine.new @diagnostics.consumer = -> diag { $stderr.puts diag.render } @source_buffer = source_buffer @in_transaction = false @policy = {crossing_deletions: crossing_deletions, different_replacements: different_replacements, swallowed_insertions: swallowed_insertions}.freeze check_policy_validity @enforcer = method(:enforce_policy) # We need a range that would be jugded as containing all other ranges, # including 0...0 and size...size: all_encompassing_range = @source_buffer.source_range.adjust(begin_pos: -1, end_pos: +1) @action_root = TreeRewriter::Action.new(all_encompassing_range, @enforcer) end ## # Replaces the code of the source range `range` with `content`. # # @param [Range] range # @param [String] content # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # def replace(range, content) combine(range, replacement: content) end ## # Inserts the given strings before and after the given range. # # @param [Range] range # @param [String, nil] insert_before # @param [String, nil] insert_after # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # def wrap(range, insert_before, insert_after) combine(range, insert_before: insert_before.to_s, insert_after: insert_after.to_s) end ## # Shortcut for `replace(range, '')` # # @param [Range] range # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # def remove(range) replace(range, ''.freeze) end ## # Shortcut for `wrap(range, content, nil)` # # @param [Range] range # @param [String] content # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # def insert_before(range, content) wrap(range, content, nil) end ## # Shortcut for `wrap(range, nil, content)` # # @param [Range] range # @param [String] content # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # def insert_after(range, content) wrap(range, nil, content) end ## # Applies all scheduled changes to the `source_buffer` and returns # modified source as a new string. # # @return [String] # def process source = @source_buffer.source.dup adjustment = 0 @action_root.ordered_replacements.each do |range, replacement| begin_pos = range.begin_pos + adjustment end_pos = begin_pos + range.length source[begin_pos...end_pos] = replacement adjustment += replacement.length - range.length end source end ## # Provides a protected block where a sequence of multiple rewrite actions # are handled atomically. If any of the actions failed by clobbering, # all the actions are rolled back. # # @raise [RuntimeError] when no block is passed # @raise [RuntimeError] when already in a transaction # def transaction unless block_given? raise "#{self.class}##{__method__} requires block" end previous = @in_transaction @in_transaction = true restore_root = @action_root yield restore_root = nil self ensure @action_root = restore_root if restore_root @in_transaction = previous end def in_transaction? @in_transaction end ## # @api private # @deprecated Use insert_after or wrap # def insert_before_multi(range, text) self.class.warn_of_deprecation insert_before(range, text) end ## # @api private # @deprecated Use insert_after or wrap # def insert_after_multi(range, text) self.class.warn_of_deprecation insert_after(range, text) end DEPRECATION_WARNING = [ 'TreeRewriter#insert_before_multi and insert_before_multi exist only for legacy compatibility.', 'Please update your code to use `wrap`, `insert_before` or `insert_after` instead.' ].join("\n").freeze extend Deprecation private ACTIONS = %i[accept warn raise].freeze def check_policy_validity invalid = @policy.values - ACTIONS raise ArgumentError, "Invalid policy: #{invalid.join(', ')}" unless invalid.empty? end def combine(range, attributes) range = check_range_validity(range) action = TreeRewriter::Action.new(range, @enforcer, **attributes) @action_root = @action_root.combine(action) self end def check_range_validity(range) if range.begin_pos < 0 || range.end_pos > @source_buffer.source.size raise IndexError, "The range #{range} is outside the bounds of the source" end range end def enforce_policy(event) return if @policy[event] == :accept return unless (values = yield) trigger_policy(event, **values) end POLICY_TO_LEVEL = {warn: :warning, raise: :error}.freeze def trigger_policy(event, range: raise, conflict: nil, **arguments) action = @policy[event] || :raise diag = Parser::Diagnostic.new(POLICY_TO_LEVEL[action], event, arguments, range) @diagnostics.process(diag) if conflict range, *highlights = conflict diag = Parser::Diagnostic.new(POLICY_TO_LEVEL[action], :"#{event}_conflict", arguments, range, highlights) @diagnostics.process(diag) end raise Parser::ClobberingError, "Parser::Source::TreeRewriter detected clobbering" if action == :raise end end end end parser-2.7.0.2/lib/parser/source/rewriter.rb0000644000004100000410000004100113617025313020733 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source ## # {Rewriter} is deprecated. Use {TreeRewriter} instead. # # TreeRewriter has simplified semantics, and customizable policies # with regards to clobbering. Please read the documentation. # # Keep in mind: # - Rewriter was discarding the `end_pos` of the given range for `insert_before`, # and the `begin_pos` for `insert_after`. These are meaningful in TreeRewriter. # - TreeRewriter's wrap/insert_before/insert_after are multiple by default, while # Rewriter would raise clobbering errors if the non '_multi' version was called. # - The TreeRewriter policy closest to Rewriter's behavior is: # different_replacements: :raise, # swallowed_insertions: :raise, # crossing_deletions: :accept # # @!attribute [r] source_buffer # @return [Source::Buffer] # # @!attribute [r] diagnostics # @return [Diagnostic::Engine] # # @api public # @deprecated Use {TreeRewriter} # class Rewriter attr_reader :source_buffer attr_reader :diagnostics ## # @param [Source::Buffer] source_buffer # @deprecated Use {TreeRewriter} # def initialize(source_buffer) self.class.warn_of_deprecation @diagnostics = Diagnostic::Engine.new @diagnostics.consumer = lambda do |diag| $stderr.puts diag.render end @source_buffer = source_buffer @queue = [] @clobber = 0 @insertions = 0 # clobbered zero-length positions; index 0 is the far left @insert_before_multi_order = 0 @insert_after_multi_order = 0 @pending_queue = nil @pending_clobber = nil @pending_insertions = nil end ## # Removes the source range. # # @param [Range] range # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # @deprecated Use {TreeRewriter#remove} # def remove(range) append Rewriter::Action.new(range, ''.freeze) end ## # Inserts new code before the given source range. # # @param [Range] range # @param [String] content # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # @deprecated Use {TreeRewriter#insert_before} # def insert_before(range, content) append Rewriter::Action.new(range.begin, content) end ## # Inserts new code before and after the given source range. # # @param [Range] range # @param [String] before # @param [String] after # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # @deprecated Use {TreeRewriter#wrap} # def wrap(range, before, after) append Rewriter::Action.new(range.begin, before) append Rewriter::Action.new(range.end, after) end ## # Inserts new code before the given source range by allowing other # insertions at the same position. # Note that an insertion with latter invocation comes _before_ earlier # insertion at the same position in the rewritten source. # # @example Inserting '[(' # rewriter. # insert_before_multi(range, '('). # insert_before_multi(range, '['). # process # # @param [Range] range # @param [String] content # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # @deprecated Use {TreeRewriter#insert_before} # def insert_before_multi(range, content) @insert_before_multi_order -= 1 append Rewriter::Action.new(range.begin, content, true, @insert_before_multi_order) end ## # Inserts new code after the given source range. # # @param [Range] range # @param [String] content # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # @deprecated Use {TreeRewriter#insert_after} # def insert_after(range, content) append Rewriter::Action.new(range.end, content) end ## # Inserts new code after the given source range by allowing other # insertions at the same position. # Note that an insertion with latter invocation comes _after_ earlier # insertion at the same position in the rewritten source. # # @example Inserting ')]' # rewriter. # insert_after_multi(range, ')'). # insert_after_multi(range, ']'). # process # # @param [Range] range # @param [String] content # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # @deprecated Use {TreeRewriter#insert_after} # def insert_after_multi(range, content) @insert_after_multi_order += 1 append Rewriter::Action.new(range.end, content, true, @insert_after_multi_order) end ## # Replaces the code of the source range `range` with `content`. # # @param [Range] range # @param [String] content # @return [Rewriter] self # @raise [ClobberingError] when clobbering is detected # @deprecated Use {TreeRewriter#replace} # def replace(range, content) append Rewriter::Action.new(range, content) end ## # Applies all scheduled changes to the `source_buffer` and returns # modified source as a new string. # # @return [String] # @deprecated Use {TreeRewriter#process} # def process if in_transaction? raise "Do not call #{self.class}##{__method__} inside a transaction" end adjustment = 0 source = @source_buffer.source.dup @queue.sort.each do |action| begin_pos = action.range.begin_pos + adjustment end_pos = begin_pos + action.range.length source[begin_pos...end_pos] = action.replacement adjustment += (action.replacement.length - action.range.length) end source end ## # Provides a protected block where a sequence of multiple rewrite actions # are handled atomically. If any of the actions failed by clobbering, # all the actions are rolled back. # # @example # begin # rewriter.transaction do # rewriter.insert_before(range_of_something, '(') # rewriter.insert_after(range_of_something, ')') # end # rescue Parser::ClobberingError # end # # @raise [RuntimeError] when no block is passed # @raise [RuntimeError] when already in a transaction # @deprecated Use {TreeRewriter#transaction} # def transaction unless block_given? raise "#{self.class}##{__method__} requires block" end if in_transaction? raise 'Nested transaction is not supported' end @pending_queue = @queue.dup @pending_clobber = @clobber @pending_insertions = @insertions yield @queue = @pending_queue @clobber = @pending_clobber @insertions = @pending_insertions self ensure @pending_queue = nil @pending_clobber = nil @pending_insertions = nil end private # Schedule a code update. If it overlaps with another update, check # whether they conflict, and raise a clobbering error if they do. # (As a special case, zero-length ranges at the same position are # considered to "overlap".) Otherwise, merge them. # # Updates which are adjacent to each other, but do not overlap, are also # merged. # # RULES: # # - Insertion ("replacing" a zero-length range): # - Two insertions at the same point conflict. This is true even # if the earlier insertion has already been merged with an adjacent # update, and even if they are both inserting the same text. # - An insertion never conflicts with a replace or remove operation # on its right or left side, which does not overlap it (in other # words, which does not update BOTH its right and left sides). # - An insertion always conflicts with a remove operation which spans # both its sides. # - An insertion conflicts with a replace operation which spans both its # sides, unless the replacement text is longer than the replaced text # by the size of the insertion (or more), and the portion of # replacement text immediately after the insertion position is # identical to the inserted text. # # - Removal operations never conflict with each other. # # - Replacement operations: # - Take the portion of each replacement text which falls within: # - The other operation's replaced region # - The other operation's replacement text, if it extends past the # end of its own replaced region (in other words, if the replacement # text is longer than the text it replaces) # - If and only if the taken texts are identical for both operations, # they do not conflict. # def append(action) range = action.range # Is this an insertion? if range.empty? # Replacing nothing with... nothing? return self if action.replacement.empty? if !action.allow_multiple_insertions? && (conflicting = clobbered_insertion?(range)) raise_clobber_error(action, [conflicting]) end record_insertion(range) if (adjacent = adjacent_updates?(range)) conflicting = adjacent.find do |a| a.range.overlaps?(range) && !replace_compatible_with_insertion?(a, action) end raise_clobber_error(action, [conflicting]) if conflicting merge_actions!(action, adjacent) else active_queue << action end else # It's a replace or remove operation. if (insertions = adjacent_insertions?(range)) insertions.each do |insertion| if range.overlaps?(insertion.range) && !replace_compatible_with_insertion?(action, insertion) raise_clobber_error(action, [insertion]) else action = merge_actions(action, [insertion]) active_queue.delete(insertion) end end end if (adjacent = adjacent_updates?(range)) if can_merge?(action, adjacent) record_replace(range) merge_actions!(action, adjacent) else raise_clobber_error(action, adjacent) end else record_replace(range) active_queue << action end end self end def record_insertion(range) self.active_insertions = active_insertions | (1 << range.begin_pos) end def record_replace(range) self.active_clobber = active_clobber | clobbered_position_mask(range) end def clobbered_position_mask(range) ((1 << range.size) - 1) << range.begin_pos end def adjacent_position_mask(range) ((1 << (range.size + 2)) - 1) << (range.begin_pos - 1) end def adjacent_insertion_mask(range) ((1 << (range.size + 1)) - 1) << range.begin_pos end def clobbered_insertion?(insertion) insertion_pos = insertion.begin_pos if active_insertions & (1 << insertion_pos) != 0 # The clobbered insertion may have already been merged with other # updates, so it won't necessarily have the same begin_pos. active_queue.find do |a| a.range.begin_pos <= insertion_pos && insertion_pos <= a.range.end_pos end end end def adjacent_insertions?(range) # Just retrieve insertions which have not been merged with an adjacent # remove or replace. if active_insertions & adjacent_insertion_mask(range) != 0 result = active_queue.select do |a| a.range.empty? && adjacent?(range, a.range) end result.empty? ? nil : result end end def adjacent_updates?(range) if active_clobber & adjacent_position_mask(range) != 0 active_queue.select { |a| adjacent?(range, a.range) } end end def replace_compatible_with_insertion?(replace, insertion) (replace.replacement.length - replace.range.size) >= insertion.range.size && (offset = insertion.range.begin_pos - replace.range.begin_pos) && replace.replacement[offset, insertion.replacement.length] == insertion.replacement end def can_merge?(action, existing) # Compare 2 replace/remove operations (neither is an insertion) range = action.range existing.all? do |other| overlap = range.intersect(other.range) next true if overlap.nil? # adjacent, not overlapping repl1_offset = overlap.begin_pos - range.begin_pos repl2_offset = overlap.begin_pos - other.range.begin_pos repl1_length = [other.range.length - repl2_offset, other.replacement.length - repl2_offset].max repl2_length = [range.length - repl1_offset, action.replacement.length - repl1_offset].max replacement1 = action.replacement[repl1_offset, repl1_length] || ''.freeze replacement2 = other.replacement[repl2_offset, repl2_length] || ''.freeze replacement1 == replacement2 end end def merge_actions(action, existing) actions = existing.push(action).sort_by do |a| [a.range.begin_pos, a.range.end_pos] end range = actions.first.range.join(actions.max_by { |a| a.range.end_pos }.range) Rewriter::Action.new(range, merge_replacements(actions)) end def merge_actions!(action, existing) new_action = merge_actions(action, existing) active_queue.delete(action) replace_actions(existing, new_action) end def merge_replacements(actions) result = ''.dup prev_act = nil actions.each do |act| if !prev_act || act.range.disjoint?(prev_act.range) result << act.replacement else prev_end = [prev_act.range.begin_pos + prev_act.replacement.length, prev_act.range.end_pos].max offset = prev_end - act.range.begin_pos result << act.replacement[offset..-1] if offset < act.replacement.size end prev_act = act end result end def replace_actions(old, updated) old.each { |act| active_queue.delete(act) } active_queue << updated end def raise_clobber_error(action, existing) # cannot replace 3 characters with "foobar" diagnostic = Diagnostic.new(:error, :invalid_action, { :action => action }, action.range) @diagnostics.process(diagnostic) # clobbered by: remove 3 characters diagnostic = Diagnostic.new(:note, :clobbered, { :action => existing[0] }, existing[0].range) @diagnostics.process(diagnostic) raise ClobberingError, "Parser::Source::Rewriter detected clobbering" end def in_transaction? !@pending_queue.nil? end def active_queue @pending_queue || @queue end def active_clobber @pending_clobber || @clobber end def active_insertions @pending_insertions || @insertions end def active_clobber=(value) if @pending_clobber @pending_clobber = value else @clobber = value end end def active_insertions=(value) if @pending_insertions @pending_insertions = value else @insertions = value end end def adjacent?(range1, range2) range1.begin_pos <= range2.end_pos && range2.begin_pos <= range1.end_pos end DEPRECATION_WARNING = [ 'Parser::Source::Rewriter is deprecated.', 'Please update your code to use Parser::Source::TreeRewriter instead' ].join("\n").freeze extend Deprecation end end end parser-2.7.0.2/lib/parser/source/map/0000755000004100000410000000000013617025313017324 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/source/map/objc_kwarg.rb0000644000004100000410000000057413617025313021767 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::ObjcKwarg < Map attr_reader :keyword attr_reader :operator attr_reader :argument def initialize(keyword_l, operator_l, argument_l, expression_l) @keyword, @operator, @argument = keyword_l, operator_l, argument_l super(expression_l) end end end end parser-2.7.0.2/lib/parser/source/map/operator.rb0000644000004100000410000000037113617025313021505 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Operator < Map attr_reader :operator def initialize(operator, expression) @operator = operator super(expression) end end end end parser-2.7.0.2/lib/parser/source/map/keyword.rb0000644000004100000410000000054613617025313021342 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Keyword < Map attr_reader :keyword attr_reader :begin attr_reader :end def initialize(keyword_l, begin_l, end_l, expression_l) @keyword = keyword_l @begin, @end = begin_l, end_l super(expression_l) end end end end parser-2.7.0.2/lib/parser/source/map/condition.rb0000644000004100000410000000062313617025313021640 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Condition < Map attr_reader :keyword attr_reader :begin attr_reader :else attr_reader :end def initialize(keyword_l, begin_l, else_l, end_l, expression_l) @keyword = keyword_l @begin, @else, @end = begin_l, else_l, end_l super(expression_l) end end end end parser-2.7.0.2/lib/parser/source/map/ternary.rb0000644000004100000410000000046313617025313021340 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Ternary < Map attr_reader :question attr_reader :colon def initialize(question_l, colon_l, expression_l) @question, @colon = question_l, colon_l super(expression_l) end end end end parser-2.7.0.2/lib/parser/source/map/constant.rb0000644000004100000410000000107513617025313021505 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Constant < Map attr_reader :double_colon attr_reader :name attr_reader :operator def initialize(double_colon, name, expression) @double_colon, @name = double_colon, name super(expression) end ## # @api private # def with_operator(operator_l) with { |map| map.update_operator(operator_l) } end protected def update_operator(operator_l) @operator = operator_l end end end end parser-2.7.0.2/lib/parser/source/map/heredoc.rb0000644000004100000410000000047213617025313021265 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Heredoc < Map attr_reader :heredoc_body attr_reader :heredoc_end def initialize(begin_l, body_l, end_l) @heredoc_body = body_l @heredoc_end = end_l super(begin_l) end end end end parser-2.7.0.2/lib/parser/source/map/index.rb0000644000004100000410000000107613617025313020764 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Index < Map attr_reader :begin attr_reader :end attr_reader :operator def initialize(begin_l, end_l, expression_l) @begin, @end = begin_l, end_l @operator = nil super(expression_l) end ## # @api private # def with_operator(operator_l) with { |map| map.update_operator(operator_l) } end protected def update_operator(operator_l) @operator = operator_l end end end end parser-2.7.0.2/lib/parser/source/map/rescue_body.rb0000644000004100000410000000057113617025313022157 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::RescueBody < Map attr_reader :keyword attr_reader :assoc attr_reader :begin def initialize(keyword_l, assoc_l, begin_l, expression_l) @keyword = keyword_l @assoc = assoc_l @begin = begin_l super(expression_l) end end end end parser-2.7.0.2/lib/parser/source/map/send.rb0000644000004100000410000000125213617025313020602 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Send < Map attr_reader :dot attr_reader :selector attr_reader :operator attr_reader :begin attr_reader :end def initialize(dot_l, selector_l, begin_l, end_l, expression_l) @dot = dot_l @selector = selector_l @begin, @end = begin_l, end_l super(expression_l) end ## # @api private # def with_operator(operator_l) with { |map| map.update_operator(operator_l) } end protected def update_operator(operator_l) @operator = operator_l end end end end parser-2.7.0.2/lib/parser/source/map/definition.rb0000644000004100000410000000066313617025313022006 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Definition < Map attr_reader :keyword attr_reader :operator attr_reader :name attr_reader :end def initialize(keyword_l, operator_l, name_l, end_l) @keyword = keyword_l @operator = operator_l @name = name_l @end = end_l super(@keyword.join(@end)) end end end end parser-2.7.0.2/lib/parser/source/map/for.rb0000644000004100000410000000054413617025313020442 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::For < Map attr_reader :keyword, :in attr_reader :begin, :end def initialize(keyword_l, in_l, begin_l, end_l, expression_l) @keyword, @in = keyword_l, in_l @begin, @end = begin_l, end_l super(expression_l) end end end end parser-2.7.0.2/lib/parser/source/map/variable.rb0000644000004100000410000000100113617025313021426 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Variable < Map attr_reader :name attr_reader :operator def initialize(name_l, expression_l=name_l) @name = name_l super(expression_l) end ## # @api private # def with_operator(operator_l) with { |map| map.update_operator(operator_l) } end protected def update_operator(operator_l) @operator = operator_l end end end end parser-2.7.0.2/lib/parser/source/map/collection.rb0000644000004100000410000000044213617025313022004 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source class Map::Collection < Map attr_reader :begin attr_reader :end def initialize(begin_l, end_l, expression_l) @begin, @end = begin_l, end_l super(expression_l) end end end end parser-2.7.0.2/lib/parser/source/map.rb0000644000004100000410000001231113617025313017647 0ustar www-datawww-data# frozen_string_literal: true module Parser module Source ## # {Map} relates AST nodes to the source code they were parsed from. # More specifically, a {Map} or its subclass contains a set of ranges: # # * `expression`: smallest range which includes all source corresponding # to the node and all `expression` ranges of its children. # * other ranges (`begin`, `end`, `operator`, ...): node-specific ranges # pointing to various interesting tokens corresponding to the node. # # Note that the {Map::Heredoc} map is the only one whose `expression` does # not include other ranges. It only covers the heredoc marker (`< 2]').children[0].loc # # => > # # The {file:doc/AST_FORMAT.md} document describes how ranges associated to source # code tokens. For example, the entry # # (array (int 1) (int 2)) # # "[1, 2]" # ^ begin # ^ end # ~~~~~~ expression # # means that if `node` is an {Parser::AST::Node} `(array (int 1) (int 2))`, # then `node.loc` responds to `begin`, `end` and `expression`, and # `node.loc.begin` returns a range pointing at the opening bracket, and so on. # # If you want to write code polymorphic by the source map (i.e. accepting # several subclasses of {Map}), use `respond_to?` instead of `is_a?` to # check whether the map features the range you need. Concrete {Map} # subclasses may not be preserved between versions, but their interfaces # will be kept compatible. # # You can visualize the source maps with `ruby-parse -E` command-line tool. # # @example # require 'parser/current' # # p Parser::CurrentRuby.parse('[1, 2]').loc # # => #, # # @begin=#, # # @expression=#> # # @!attribute [r] node # The node that is described by this map. Nodes and maps have 1:1 correspondence. # @return [Parser::AST::Node] # # @!attribute [r] expression # @return [Range] # # @api public # class Map attr_reader :node attr_reader :expression ## # @param [Range] expression def initialize(expression) @expression = expression end ## # @api private def initialize_copy(other) super @node = nil end ## # @api private def node=(node) @node = node freeze @node end ## # A shortcut for `self.expression.line`. # @return [Integer] # def line @expression.line end alias_method :first_line, :line ## # A shortcut for `self.expression.column`. # @return [Integer] # def column @expression.column end ## # A shortcut for `self.expression.last_line`. # @return [Integer] # def last_line @expression.last_line end ## # A shortcut for `self.expression.last_column`. # @return [Integer] # def last_column @expression.last_column end ## # @api private # def with_expression(expression_l) with { |map| map.update_expression(expression_l) } end ## # Compares source maps. # @return [Boolean] # def ==(other) other.class == self.class && instance_variables.map do |ivar| instance_variable_get(ivar) == other.send(:instance_variable_get, ivar) end.reduce(:&) end ## # Converts this source map to a hash with keys corresponding to # ranges. For example, if called on an instance of {Collection}, # which adds the `begin` and `end` ranges, the resulting hash # will contain keys `:expression`, `:begin` and `:end`. # # @example # require 'parser/current' # # p Parser::CurrentRuby.parse('[1, 2]').loc.to_hash # # => { # # :begin => #, # # :end => #, # # :expression => # # # } # # @return [Hash] # def to_hash instance_variables.inject({}) do |hash, ivar| next hash if ivar.to_sym == :@node hash[ivar[1..-1].to_sym] = instance_variable_get(ivar) hash end end protected def with(&block) dup.tap(&block) end def update_expression(expression_l) @expression = expression_l end end end end parser-2.7.0.2/lib/parser/version.rb0000644000004100000410000000010713617025313017257 0ustar www-datawww-data# frozen_string_literal: true module Parser VERSION = '2.7.0.2' end parser-2.7.0.2/lib/parser/deprecation.rb0000644000004100000410000000037213617025313020073 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # @api private # module Deprecation attr_writer :warned_of_deprecation def warn_of_deprecation @warned_of_deprecation ||= warn(self::DEPRECATION_WARNING) || true end end end parser-2.7.0.2/lib/parser/ruby26.rb0000644000004100000410000077000713617025313016740 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby26 < Parser::Base def version 26 end def default_encoding Encoding::UTF_8 end ##### State transition tables begin ### clist = [ '-586,579,-110,-108,220,-102,-103,-586,-586,-586,274,-107,274,-586,-586', '222,-586,274,799,622,212,213,212,213,-88,-586,579,-102,819,-108,620', '274,-103,-106,-74,-105,-586,-586,906,-586,-586,-586,-586,-586,-109,-109', '223,579,908,986,-104,-101,-110,798,-105,-107,223,-106,-104,579,579,-110', '538,575,574,537,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586', '-586,-586,-586,-583,269,-586,-586,-586,621,646,725,842,811,-586,212', '213,-586,-583,269,619,273,-586,273,-586,407,-586,-586,273,-586,-586', '-586,-586,-586,-582,-586,-586,-586,-96,-94,223,799,273,115,-110,-108', '-582,-102,114,-110,-108,-586,-102,-107,-586,-586,-586,-586,-107,-586', '-93,818,-99,-586,-586,-586,-586,-106,115,-586,-586,845,-586,114,-103', '-106,798,-105,-100,-103,-106,-586,-105,-95,-95,-101,-109,-96,-98,115', '-97,-109,-586,-586,114,-586,-586,-586,-586,-586,-104,115,115,115,-96', '-104,114,114,114,223,910,212,213,-97,-98,115,115,212,213,394,114,114', '-586,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586,-586', '913,641,-586,-586,-586,218,646,607,-96,914,-586,-96,267,-586,-95,917', '525,-492,-586,220,-586,-96,-586,-586,-492,-586,-586,-586,-586,-586,115', '-586,-586,-586,559,114,556,555,554,223,557,-491,-582,-97,-98,607,538', '-586,-491,540,-586,-586,-586,-97,-95,-586,921,-95,-107,-586,-586,-586', '-586,-106,-586,-586,-586,-95,-586,115,219,609,608,-109,114,223,-110', '-586,-586,-586,-586,759,-492,-97,-98,115,-97,-98,-586,-586,114,-586', '-586,-586,-586,-586,-97,-98,559,-274,556,555,554,607,557,607,-491,115', '607,609,608,605,114,93,94,811,838,586,-586,-586,-586,-586,-586,-586', '-586,-586,-586,-586,-586,-586,-586,-586,93,94,-586,-586,-586,592,787', '-586,-490,593,-586,607,772,-586,-586,-490,-586,607,-586,958,-586,223', '-586,-586,607,-586,-586,-586,-586,-586,785,-586,-586,-586,786,609,608', '609,608,605,609,608,610,607,1025,757,772,-586,956,-493,-586,-586,-586', '-586,673,-586,-493,-586,-298,95,96,-499,-586,-106,923,-298,-298,-298', '702,-104,-298,-298,-298,-490,-298,609,608,612,95,96,926,609,608,614', '-298,-298,-298,-105,609,608,623,-107,640,-95,-298,-298,641,-298,-298', '-298,-298,-298,864,-104,928,-498,930,609,608,618,842,811,-498,-496,-493', '-494,-500,457,-102,932,-496,-498,-494,223,-298,-298,-298,-298,-298,-298', '-298,-298,-298,-298,-298,-298,-298,-298,934,-96,-298,-298,-298,-98,788', '-298,640,538,-298,-105,540,-298,-298,-107,-298,-495,-298,639,-298,-104', '-298,-298,-495,-298,-298,-298,-298,-298,-298,-298,-498,-298,323,-103', '-110,-298,-298,-298,-496,322,-494,-298,-298,538,-298,-298,540,638,-298', '-298,-298,-298,-488,-298,223,-298,-580,212,213,-488,-298,-108,-500,-105', '-298,-298,-499,-298,-298,-298,-298,-298,958,1003,963,218,746,-299,974', '-485,-495,263,633,218,-299,1003,-485,977,1003,111,267,631,982,-299,-298', '-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-488', '-94,-298,-298,-298,-93,645,-488,983,-488,-298,-103,-580,-298,984,-102', '-488,525,-298,987,-298,900,-298,-298,900,-298,-298,-298,-298,-298,-485', '-298,219,-298,-299,-580,-485,-485,-485,-485,219,900,-485,-485,-485,218', '-485,-298,243,992,-298,-298,595,-99,-485,-298,-485,-485,-485,958,214', '597,-298,-108,-100,-488,-485,-485,702,-485,-485,-485,-485,-485,-109', '-299,997,999,1001,218,240,1003,-299,1003,242,241,589,238,239,243,243', '-299,243,243,1003,587,-485,-485,-485,-485,-485,-485,-485,-485,-485,-485', '-485,-485,-485,-485,219,218,-485,-485,-485,-289,-485,-485,528,223,-485', '223,-289,-485,-485,624,-485,455,-485,627,-485,-289,-485,-485,223,-485', '-485,-485,-485,-485,-299,-485,-488,-485,219,-88,676,223,692,-488,-488', '-488,81,531,-488,-488,-488,-485,-488,211,-485,-485,-485,-485,82,-485', '-488,-485,-488,-488,-488,687,-485,-485,83,210,219,692,-488,-488,-289', '-488,-488,-488,-488,-488,260,261,404,-298,693,218,223,406,405,695,-298', '699,518,702,559,-583,556,555,554,-298,557,516,-488,-488,-488,-488,-488', '-488,-488,-488,-488,-488,-488,-488,-488,-488,259,258,-488,-488,-488', '703,-488,-488,705,707,-488,709,958,-488,-488,711,-488,717,-488,718,-488', '719,-488,-488,905,-488,-488,-488,-488,-488,-298,-488,-298,-488,219,721', '1018,-298,-298,-298,599,726,727,-298,-298,586,-298,-488,729,591,-488', '-488,-488,-488,590,-488,396,-488,-586,746,586,756,-488,-488,650,-271', '-298,-298,760,-298,-298,-298,-298,-298,761,-272,500,-497,542,-298,773', '541,223,487,-497,243,-298,487,526,223,790,-583,791,-497,263,-298,-298', '-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-586', '629,-298,-298,-298,796,645,-586,801,498,-298,500,-582,-298,522,630,-586', '687,-298,223,-298,269,-298,-298,269,-298,-298,-298,-298,-298,-290,-298', '-497,-298,-298,-586,269,-290,-290,-290,223,-583,-290,-290,-290,218,-290', '-298,269,687,-298,-298,454,-298,278,-298,-290,-290,-290,243,-582,455', '-298,-108,811,-586,-290,-290,519,-290,-290,-290,-290,-290,223,-335,223', '218,836,218,634,223,-335,811,976,844,981,209,223,512,511,-335,223,597', '-73,979,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290', '-290,-290,219,218,-290,-290,-290,243,124,-290,217,124,-290,223,243,-290', '-290,-579,-290,215,-290,500,-290,853,-290,-290,498,-290,-290,-290,-290', '-290,-335,-290,219,-290,219,496,-273,240,218,487,223,242,241,222,240', '976,459,-290,242,241,-290,-290,-290,-290,597,-290,-254,-290,863,458', '456,867,-290,-254,-254,-254,219,-485,-254,-254,-254,900,-254,687,-485', '883,-271,564,887,-579,564,-254,-254,-485,891,892,702,567,894,896,567', '898,-254,-254,900,-254,-254,-254,-254,-254,900,223,-579,219,559,,556', '555,554,564,557,751,752,,,753,109,110,,567,575,574,,575,574,568,,243', '568,,,,-485,-254,,-305,,,,,-254,562,-305,-305,-305,269,-254,-305,-305', '-305,,-305,575,574,,,,568,,240,,-305,-305,242,241,,238,239,-254,-254', ',-305,-305,,-305,-305,-305,-305,-305,,,,,-254,,,-254,,,,559,-254,556', '555,554,,557,,-254,,,-305,-305,-305,-305,-305,-305,-305,-305,-305,-305', '-305,-305,-305,-305,,,-305,-305,-305,,,-305,,278,-305,,711,-305,-305', ',-305,,-305,,-305,714,-305,-305,,-305,-305,-305,-305,-305,,-305,-254', '-305,118,119,120,121,122,-254,-254,-254,,,-254,-254,-254,-305,-254,', '-305,-305,,-305,,-305,,-254,-254,-254,,949,-305,556,555,554,,557,-254', '-254,,-254,-254,-254,-254,-254,559,,556,555,554,559,557,556,555,554', '559,557,556,555,554,949,557,556,555,554,,557,-254,-254,-254,-254,-254', '-254,-254,-254,-254,-254,-254,-254,-254,-254,,711,-254,-254,-254,,711', '-254,,269,-254,711,,-254,-254,714,-254,,-254,,-254,,-254,-254,,-254', '-254,-254,-254,-254,,-254,-254,-254,559,,556,555,554,564,557,118,119', '120,121,122,,-254,,567,-254,-254,-588,-254,,-254,,,,-588,-588,-588,-254', ',-588,-588,-588,,-588,243,559,562,556,555,554,,557,-588,-588,-588,-588', ',575,574,,253,254,568,-588,-588,,-588,-588,-588,-588,-588,559,,556,555', '554,240,557,246,,242,241,711,238,239,,,244,,245,,,,-588,-588,-588,-588', '-588,-588,-588,-588,-588,-588,-588,-588,-588,-588,,711,-588,-588,-588', ',,-588,,,-588,,,-588,-588,,-588,,-588,,-588,,-588,-588,,-588,-588,-588', '-588,-588,,-588,-588,-588,,,559,,556,555,554,,557,,,,,-588,,,-588,-588', '-588,-588,,-588,-415,-588,,,,,-588,-415,-415,-415,,,-415,-415,-415,243', '-415,711,118,119,120,121,122,,,-415,-415,-415,,,,253,254,,,,-415,-415', ',-415,-415,-415,-415,-415,,,,240,,246,,242,241,,238,239,,,244,,245,118', '119,120,121,122,-415,-415,-415,-415,-415,-415,-415,-415,-415,-415,-415', '-415,-415,-415,,,-415,-415,-415,,,-415,,269,-415,,,-415,-415,,-415,', '-415,,-415,,-415,-415,,-415,-415,-415,-415,-415,,-415,-415,-415,559', ',556,555,554,564,557,,,,,,,-415,,567,-415,-415,-587,-415,,-415,,,,-587', '-587,-587,-415,,-587,-587,-587,,-587,243,,562,,,,,,-587,-587,-587,-587', ',575,574,,253,254,568,-587,-587,,-587,-587,-587,-587,-587,,,,,,240,', ',,242,241,,238,239,,,,,,,,,-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,-587,-587,,-587,-587,-587', ',,,,,,,,,,,,,-587,,,-587,-587,-587,-587,,-587,,-587,,,,,-587,296,70', '71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102', '104,105,,,19,,,,,635,8,46,298,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,243,247,248,249,250,260,261,255,256,251,252,,236', '237,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239', '259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,257,,-246', ',,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74', ',,,,,75,28,27,103,102,104,105,,,19,,,,,635,8,46,298,10,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248,249,250,260,261', '255,256,251,252,,236,237,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246', '45,242,241,,238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,', ',,,82,90,,257,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10', '107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248', '249,250,260,261,255,256,251,252,,236,237,,,253,254,,40,,,33,,,59,60', ',,61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,223,257,,,,,63,,83,95,96,296,70,71,72,9,58', ',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,', ',19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,243,247,248,249,250,260,261,255,256,251,252,,236,237,,,253', '254,,40,,,300,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258', '244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,257,,,,,63,,83,95', '96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28', '27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,243,247,248,249,250,260,261,255,256,251', '252,,236,237,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241', ',238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,257', ',,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73', '74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248,249,250,260,261', '255,256,251,252,,236,237,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246', '45,242,241,,238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,', ',,,82,90,,257,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10', '107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248', '249,250,260,261,255,256,251,252,,236,237,,,253,254,,40,,,300,,,59,60', ',,61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,257,,,,,63,,83,95,96,296,70,71,72,9,58,,', ',64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19', ',,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42', '43,41,243,247,248,249,250,260,261,255,256,251,252,,236,237,,,253,254', ',40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244,20', '245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,257,,,,,63,,83,95,96,296', '70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,243,-607,-607,-607,-607,260,261,,,-607,-607,,,,', ',253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259', '258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95', '96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28', '27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,243,247,248,249,250,260,261,255,256,251', '252,,-607,-607,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241', ',238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,', ',,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73', '74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,243,-607,-607,-607,-607,260', '261,,,-607,-607,,,,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242', '241,,238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90', ',,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31', '73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,-607,-607,-607,-607', '260,261,,,-607,-607,,,,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246', '45,242,241,,238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,', ',,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67', '69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248,249', '250,260,261,255,256,251,252,,-607,-607,,,253,254,,40,,,33,,,59,60,,', '61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', '8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', '243,-607,-607,-607,-607,260,261,,,-607,-607,,,,,,253,254,,40,,,33,,', '59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58', ',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,', ',19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,243,247,248,249,250,260,261,255,,251,252,,,,,,253,254,,40,', ',33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245', ',,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72', '9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104', '105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,', '93,94,42,43,41,243,-607,-607,-607,-607,260,261,,,-607,-607,,,,,,253', '254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244', '20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296', '70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,243,-607,-607,-607,-607,260,261,,,-607,-607,,,,', ',253,254,,40,,,300,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259', '258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95', '96,5,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,19,,,,,,8,46,7,10,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,243,247,248,249,250,260,261,,,251,252,,,,,,253', '254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244', '20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296', '70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,243,,,,,,,,,,,,,,,,253,254,,40,,,33,,,59,60,,,61', ',35,240,,246,45,242,241,,238,239,,,,20,,,,,91,81,84,85,,86,88,87,89', ',,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67', '69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,,,,,,,,,,,', ',,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,', ',,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70', '71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102', '104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,', ',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,5', '70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,8,46,7,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45', ',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96', '296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35', ',,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83', '95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75', '28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98', '100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60', ',,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,', ',,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73', '74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30', '31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106', '108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,', '40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10', '107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,', ',,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86', '88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,', '68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46', '298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,', ',,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89', ',,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73', '74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57', '99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,', ',,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99', '98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59', '60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75', '28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,', '101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61', ',,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318', '103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58', '83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93', '94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,', ',,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95', '96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105', ',,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42', '43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233', ',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89', ',,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73', '74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57', '99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,', ',,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99', '98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59', '60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75', '312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,', ',,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72', '63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104', '105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233', ',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89', ',,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73', '74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57', '99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,', ',,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99', '98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59', '60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75', '312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,', ',,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72', '63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285', ',45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,', '285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287', ',285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,223', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75', '312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58', '83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93', '94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,', ',,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95', '96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105', ',,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42', '43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233', ',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,70,71,72,9,58,,,', '64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19', ',,,,,8,46,,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43', '41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,', '91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,70,71,72,9,58,,,', '64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19', ',,,,,8,46,7,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43', '41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,', '91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,', ',,46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,', ',,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233', ',,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,', ',,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,', ',,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,', ',,,,,,,,,,,,,,936,,,234,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106', '108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,', ',,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233,,,,,91,288,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,', ',,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233,,,,,91,288', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,', ',,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233,,,,', '91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,,,319,,', ',,,,,,,,,,,,,,,,,309,,,305,,,59,60,,,61,,304,,,,,,,,,,,,,,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,,,,', ',,,,,,,,,,,309,,,234,,,59,60,,,61,,,559,,556,555,554,564,557,,,,,,,', ',567,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,321,,562,63,,83,95,96,70', '71,72,,58,575,574,,64,65,568,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,942,,,234,,,59,60,,,61,,,,,', ',,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104', '105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', ',,319,,,,,,,,,,,,,,,,,,,,936,,,234,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88', '87,89,,,,,82,90,,,,,,,63,,83,95,96,70,71,72,9,58,,,,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,,10,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,287,,,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87', '89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31', '73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57', '99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,', ',75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,115,,,,,114,63,,83,95', '96,70,71,72,,58,,,,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318', '103,102,104,105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,356,,,33,,,59,60,,,61,,35,,,,,,', ',,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95', '96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105', ',,235,,,,,,,313,,,107,106,108,361,57,99,98,362,,101,109,110,,93,94,', ',319,,,,,,,,,,,,,,,,,368,,,363,,,234,,,59,60,,,61,,,,,,,,,,,,,,,,,,', ',91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,313,,,107,106,108,361,57,99,98,362,,101,109,110,,93,94,,,319,', ',,,,,,,,,,,,,,,,,,363,,,234,,,59,60,,,61,,,559,,556,555,554,564,557', ',,,,,,,,567,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,562,63,,83,95,96', '70,71,72,9,58,575,574,,64,65,568,,,68,,66,67,69,30,31,73,74,,,,,,75', '28,27,103,102,104,105,,,19,,,,,,8,46,7,10,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61', ',35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,396', '63,,83,95,96,70,71,72,,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,', '75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105', ',,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43', '41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,', '91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', ',46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,', ',,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,70,71,72,9,58,,,,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', '8,46,,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,', ',,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,670,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,', '107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,', ',,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86', '88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69', '30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,412,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31', '73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,412,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,', ',82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74', ',,,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98', '100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60', ',,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58', '83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104', '105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233', ',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,', ',,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233', ',,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,', ',,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,', ',,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,,46', ',,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,', ',,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106', '108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,', '228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,223,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,412,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316', '73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,313,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,309,,,305', ',,59,60,,,61,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75', '312,318,103,102,104,105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,309,,,305,,,59,60,,,61', ',,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63', '58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104', '105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', ',,319,,,,,,,,,,,,,,,,,,,,309,,,305,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,531,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31', '73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,', ',75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58', '83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,285,,45', ',,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63', '58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,670,', '285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,', ',,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83', '95,96,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28', '27,103,102,104,105,,,19,,,,,,8,46,,10,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35', ',,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72', '63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285', ',45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104', '105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,764,,,,45,,,,,,', ',,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95', '96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,', ',19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43', '41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,', '91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,', ',,46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,', ',,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233', ',,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,', ',,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233', ',,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,,,45,,,,,,,,,233,,,', ',91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', ',46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,', ',,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,', ',,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,291,,,,,,233,,,,,91,288', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,670,,,,45,,,291,,,,,,233,,,', ',91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', ',46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,', ',,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,313,,,107,106', '108,97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,309', ',,305,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,', ',75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', '290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60', ',,61,,287,,285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,', '82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,', ',,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98', '100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60', ',,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,309,,,305,,,59,60,,,61,,,559', ',556,555,554,564,557,,,,,,,,,567,,91,81,84,85,,86,88,87,89,,,,,82,90', ',,,,,562,63,,83,95,96,70,71,72,9,58,575,574,,64,65,568,,,68,,66,67,69', '30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,,,396,63,,83,95,96,70,71,72,,58,,,,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,', ',,,,,,,228,,,234,,,59,60,,,61,,,,285,,45,,,291,,,,,,233,,,,,91,288,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,', ',,,,,,,,,,,,228,,,234,,,59,60,,,61,,670,,285,,45,,,291,,,,,,233,,,,', '91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,', ',,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233,,,,,91,288', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,313', ',,107,106,108,97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,,,,,,,,', ',,,,,,,309,,,234,,,59,60,,,61,,,559,,556,555,554,564,557,,,,,,,,,567', ',91,81,84,85,,86,88,87,89,,,,,82,90,,,,514,,562,63,,83,95,96,70,71,72', ',58,575,574,,64,65,568,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318', '103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96', '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,,,,,,,,160,161,,157', '139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,,,,,,,,,154', '153,,138,159,156,155,164,151,152,146,144,136,158,137,,,165,91,,,,,,', ',,,,,,,90,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,,,,,,,,160,161', ',157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,,,,,', ',,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137,,,165,91', ',,,,,,,,,,,,,90,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,,,,,', ',,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150', ',,,,,,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137', ',,165,91,,,,,,,,,,,,,,90,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', ',,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149', '150,,,,,,,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158', '137,,,165,91,,,,,,,,,,,,,,90,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', '379,378,380,377,172,191,190,,,,,,171,178,169,170,374,375,376,372,129', '99,98,373,,101,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,', ',,162,163,149,150,,,,,,384,,,,,,,,154,153,,138,159,156,155,164,151,152', '146,144,136,158,137,,,165,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', ',,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149', '150,559,,556,555,554,564,557,,,,,,,154,153,567,138,159,156,155,164,151', '152,146,144,136,158,137,,,165,,,,,,,562,,1010,438,,,1011,,,572,571,575', '574,,160,161,568,157,139,140,141,148,145,147,,,142,143,,,,162,163,149', '150,,,,,,269,,223,,,,,,154,153,,138,159,156,155,164,151,152,146,144', '136,158,137,651,438,165,,652,,,,,,,,160,161,,157,139,140,141,148,145', '147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156', '155,164,151,152,146,144,136,158,137,683,445,165,,684,,,,,,,,160,161', ',157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,', ',,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137,1012', '445,165,,1013,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143', ',,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151', '152,146,144,136,158,137,653,445,165,,654,,,,,,,,160,161,,157,139,140', '141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153', ',138,159,156,155,164,151,152,146,144,136,158,137,485,438,165,,486,,', ',,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150', ',,,,,,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137', '1007,445,165,,1006,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142', '143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164', '151,152,146,144,136,158,137,653,445,165,,654,,,,,,,,160,161,,157,139', '140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154', '153,,138,159,156,155,164,151,152,146,144,136,158,137,737,445,165,,738', ',,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149', '150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136', '158,137,485,438,165,,486,,,,,,,,160,161,,157,139,140,141,148,145,147', ',,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155', '164,151,152,146,144,136,158,137,680,438,165,,681,,,,,,,,160,161,,157', '139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,', ',154,153,,138,159,156,155,164,151,152,146,144,136,158,137,769,445,165', ',768,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163', '149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144', '136,158,137,766,438,165,,767,,,,,,,,160,161,,157,139,140,141,148,145', '147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156', '155,164,151,152,146,144,136,158,137,651,438,165,,652,,,,,,,,160,161', ',157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,', ',,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137,732,438', '165,,733,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162', '163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151,152,146', '144,136,158,137,434,438,165,,435,,,,,,,,160,161,,157,139,140,141,148', '145,147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159', '156,155,164,151,152,146,144,136,158,137,441,445,165,,440,,,,,,,,160', '161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269', ',,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137,734', '445,165,,735,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,', ',,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151,152', '146,144,136,158,137,,559,165,556,555,554,564,557,,559,,556,555,554,564', '557,567,,,,,,,,567,,559,,556,555,554,564,557,,,,,,562,,,567,,,,,562', '572,571,575,574,,,,568,572,571,575,574,,,,568,562,,559,,556,555,554', '564,557,572,571,575,574,,,,568,567,,559,,556,555,554,564,557,,559,,556', '555,554,564,557,567,,,,,562,,,567,,,,,,572,571,575,574,,,,568,562,,', ',,,,,562,572,571,575,574,,,,568,572,571,575,574,,,559,568,556,555,554', '564,557,559,,556,555,554,564,557,559,567,556,555,554,564,557,559,567', '556,555,554,564,557,,567,,,,,,,567,562,,,,,,,562,,572,571,575,574,,562', ',568,,575,574,,562,,568,,575,574,,,,568,,575,574,,,559,568,556,555,554', '564,557,,559,,556,555,554,564,557,567,,,,,,,,567,,559,,556,555,554,564', '557,,,,,,562,545,,567,,,,,562,572,571,575,574,,,,568,572,571,575,574', ',,,568,562,,,,,,,,,572,571,575,574,,,,568' ] racc_action_table = arr = ::Array.new(24615, 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 = [ '769,886,943,1013,17,939,354,769,769,769,660,1011,62,769,769,19,769,314', '664,392,14,14,604,604,675,769,730,353,697,735,391,26,940,1012,675,1010', '769,769,837,769,769,769,769,769,982,590,947,909,840,947,847,17,357,664', '732,733,19,734,1023,346,345,17,335,702,702,335,769,769,769,769,769,769', '769,769,769,769,769,769,769,769,1013,314,769,769,769,392,769,581,720', '720,769,450,450,769,735,26,391,660,769,62,769,207,769,769,314,769,769', '769,769,769,1012,769,769,769,680,354,604,792,26,886,943,1013,734,939', '886,943,1013,769,939,1011,769,769,441,769,1011,769,353,697,735,441,441', '441,769,769,730,441,441,730,441,730,940,1012,792,1010,590,940,1012,441', '1010,847,806,357,982,732,733,909,734,982,441,441,909,441,441,441,441', '441,1023,346,345,350,680,1023,346,345,350,450,843,600,600,683,681,581', '856,690,690,111,581,856,441,441,441,441,441,441,441,441,441,441,441', '441,441,441,848,767,441,441,441,382,441,617,680,850,441,680,382,441', '806,854,456,380,441,419,441,680,441,441,380,441,441,441,441,441,294', '441,441,441,714,294,714,714,714,855,714,379,683,683,681,386,339,441', '379,339,441,441,653,441,806,441,858,806,767,653,653,653,441,441,653', '653,653,806,653,600,382,617,617,456,600,690,419,653,653,653,653,617', '380,683,681,851,683,681,653,653,851,653,653,653,653,653,683,681,905', '859,905,905,905,615,905,502,379,3,387,386,386,386,3,319,319,912,714', '912,653,653,653,653,653,653,653,653,653,653,653,653,653,653,41,41,653', '653,653,363,653,653,378,363,653,388,860,653,653,378,653,389,653,1016', '653,46,653,653,393,653,653,653,653,653,651,653,653,653,652,615,615,502', '502,502,387,387,387,390,1019,615,636,653,905,377,653,653,653,653,502', '653,377,653,654,319,319,226,653,653,868,654,654,654,869,860,654,654', '654,378,654,388,388,388,41,41,871,389,389,389,654,654,654,651,393,393', '393,652,434,636,654,654,435,654,654,654,654,654,789,636,872,307,873', '390,390,390,994,994,307,376,377,375,227,229,226,875,376,307,375,876', '654,654,654,654,654,654,654,654,654,654,654,654,654,654,877,434,654', '654,654,435,654,654,766,696,654,434,696,654,654,435,654,374,654,433', '654,789,654,654,374,654,654,654,654,654,440,654,307,654,40,227,229,440', '440,440,376,37,375,440,440,336,440,654,336,432,654,654,654,654,373,654', '430,654,362,344,344,373,654,654,39,766,440,440,38,440,440,440,440,440', '907,1020,916,418,920,519,933,372,374,22,418,24,519,1021,372,936,1022', '1,24,418,942,519,440,440,440,440,440,440,440,440,440,440,440,440,440', '440,362,39,440,440,440,38,440,362,945,373,440,39,362,440,946,38,362', '323,440,951,440,952,440,440,953,440,440,440,440,440,97,440,418,440,519', '362,372,97,97,97,24,954,97,97,97,365,97,440,478,955,440,440,365,440', '97,440,97,97,97,957,15,365,440,440,323,362,97,97,965,97,97,97,97,97', '323,593,968,969,970,355,478,971,593,973,478,478,355,478,478,464,465', '593,466,467,1030,355,97,97,97,97,97,97,97,97,97,97,97,97,97,97,365,325', '97,97,97,310,97,97,325,489,97,493,310,97,97,402,97,325,97,408,97,310', '97,97,509,97,97,97,97,97,593,97,100,97,355,510,513,515,978,100,100,100', '79,520,100,100,100,97,100,13,97,97,97,97,79,97,100,97,100,100,100,523', '97,97,79,12,325,532,100,100,310,100,100,100,100,100,44,44,126,684,533', '308,534,126,126,535,684,547,308,548,836,684,836,836,836,684,836,308', '100,100,100,100,100,100,100,100,100,100,100,100,100,100,44,44,100,100', '100,550,100,100,551,552,100,561,993,100,100,836,100,569,100,573,100', '576,100,100,836,100,100,100,100,100,768,100,684,100,308,578,995,768', '768,768,367,582,583,768,768,584,768,100,585,358,100,100,100,100,356', '100,352,100,737,602,351,612,100,100,452,411,768,768,620,768,768,768', '768,768,622,628,340,306,338,738,637,337,333,642,306,327,738,647,324', '655,656,738,657,306,659,738,768,768,768,768,768,768,768,768,768,768', '768,768,768,768,737,413,768,768,768,663,768,737,665,667,768,669,737', '768,320,416,737,677,768,679,768,318,768,768,442,768,768,768,768,768', '57,768,306,768,738,737,682,57,57,57,313,1006,57,57,57,225,57,768,685', '686,768,768,225,768,312,768,57,57,57,689,1007,225,768,768,691,737,57', '57,309,57,57,57,57,57,1009,47,698,935,713,941,420,715,47,722,935,728', '941,10,731,303,302,47,301,935,299,941,57,57,57,57,57,57,57,57,57,57', '57,57,57,57,225,16,57,57,57,462,298,57,16,7,57,740,463,57,57,361,57', '16,57,286,57,744,57,57,283,57,57,57,57,57,47,57,935,57,941,282,763,462', '975,268,765,462,462,235,463,975,231,57,463,463,57,57,57,57,975,57,484', '57,774,230,228,795,57,484,484,484,16,361,484,484,484,1015,484,805,361', '809,812,699,813,361,923,484,484,361,820,821,822,699,826,827,923,829', '484,484,830,484,484,484,484,484,832,835,361,975,930,,930,930,930,930', '930,608,608,,,608,608,608,,930,699,699,,923,923,699,,477,923,,,,361', '484,,28,,,,,484,930,28,28,28,484,484,28,28,28,,28,930,930,,,,930,,477', ',28,28,477,477,,477,477,484,484,,28,28,,28,28,28,28,28,,,,,484,,,484', ',,,562,484,562,562,562,,562,,484,,,28,28,28,28,28,28,28,28,28,28,28', '28,28,28,,,28,28,28,,,28,,28,28,,562,28,28,,28,,28,,28,562,28,28,,28', '28,28,28,28,,28,436,28,332,332,332,332,332,436,436,436,,,436,436,436', '28,436,,28,28,,28,,28,,436,436,436,,891,28,891,891,891,,891,436,436', ',436,436,436,436,436,838,,838,838,838,711,838,711,711,711,992,711,992', '992,992,986,992,986,986,986,,986,436,436,436,436,436,436,436,436,436', '436,436,436,436,436,,838,436,436,436,,711,436,,436,436,992,,436,436', '711,436,,436,,436,,436,436,,436,436,436,436,436,,436,436,436,896,,896', '896,896,896,896,297,297,297,297,297,,436,,896,436,436,446,436,,436,', ',,446,446,446,436,,446,446,446,,446,529,958,896,958,958,958,,958,446', '446,446,446,,896,896,,529,529,896,446,446,,446,446,446,446,446,956,', '956,956,956,529,956,529,,529,529,958,529,529,,,529,,529,,,,446,446,446', '446,446,446,446,446,446,446,446,446,446,446,,956,446,446,446,,,446,', ',446,,,446,446,,446,,446,,446,,446,446,,446,446,446,446,446,,446,446', '446,,,906,,906,906,906,,906,,,,,446,,,446,446,446,446,,446,27,446,,', ',,446,27,27,27,,,27,27,27,482,27,906,6,6,6,6,6,,,27,27,27,,,,482,482', ',,,27,27,,27,27,27,27,27,,,,482,,482,,482,482,,482,482,,,482,,482,507', '507,507,507,507,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,898', ',898,898,898,898,898,,,,,,,27,,898,27,27,445,27,,27,,,,445,445,445,27', ',445,445,445,,445,470,,898,,,,,,445,445,445,445,,898,898,,470,470,898', '445,445,,445,445,445,445,445,,,,,,470,,,,470,470,,470,470,,,,,,,,,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,601,601', '601,601,601,601,,,,601,601,,,,601,,601,601,601,601,601,601,601,,,,,', '601,601,601,601,601,601,601,,,601,,,,,423,601,601,601,601,601,601,601', '601,601,601,601,601,,601,601,601,,601,601,601,601,601,423,423,423,423', '423,423,423,423,423,423,423,,423,423,,,423,423,,601,,,601,,,601,601', ',,601,,601,423,,423,601,423,423,,423,423,423,423,423,601,423,,,,601', '601,601,601,,601,601,601,601,,,,,601,601,,423,,423,,,601,,601,601,601', '349,349,349,349,349,349,,,,349,349,,,,349,,349,349,349,349,349,349,349', ',,,,,349,349,349,349,349,349,349,,,349,,,,,429,349,349,349,349,349,349', '349,349,349,349,349,349,,349,349,349,,349,349,349,349,349,429,429,429', '429,429,429,429,429,429,429,429,,429,429,,,429,429,,349,,,349,,,349', '349,,,349,,349,429,,429,349,429,429,,429,429,429,429,429,349,429,,,', '349,349,349,349,,349,349,349,349,,,,,349,349,,429,,,,,349,,349,349,349', '811,811,811,811,811,811,,,,811,811,,,,811,,811,811,811,811,811,811,811', ',,,,,811,811,811,811,811,811,811,,,811,,,,,,811,811,811,811,811,811', '811,811,811,811,811,811,,811,811,811,,811,811,811,811,811,481,481,481', '481,481,481,481,481,481,481,481,,481,481,,,481,481,,811,,,811,,,811', '811,,,811,,811,481,,481,811,481,481,,481,481,481,481,481,811,481,,,', '811,811,811,811,,811,811,811,811,,,,,811,811,481,481,,,,,811,,811,811', '811,305,305,305,305,305,305,,,,305,305,,,,305,,305,305,305,305,305,305', '305,,,,,,305,305,305,305,305,305,305,,,305,,,,,,305,305,305,305,305', '305,305,305,305,305,305,305,,305,305,305,,305,305,305,305,305,530,530', '530,530,530,530,530,530,530,530,530,,530,530,,,530,530,,305,,,305,,', '305,305,,,305,,305,530,,530,305,530,530,,530,530,530,530,530,305,530', ',,,305,305,305,305,,305,305,305,305,,,,,305,305,,530,,,,,305,,305,305', '305,938,938,938,938,938,938,,,,938,938,,,,938,,938,938,938,938,938,938', '938,,,,,,938,938,938,938,938,938,938,,,938,,,,,,938,938,938,938,938', '938,938,938,938,938,938,938,,938,938,938,,938,938,938,938,938,280,280', '280,280,280,280,280,280,280,280,280,,280,280,,,280,280,,938,,,938,,', '938,938,,,938,,938,280,,280,938,280,280,,280,280,280,280,280,938,280', ',,,938,938,938,938,,938,938,938,938,,,,,938,938,,280,,,,,938,,938,938', '938,755,755,755,755,755,755,,,,755,755,,,,755,,755,755,755,755,755,755', '755,,,,,,755,755,755,755,755,755,755,,,755,,,,,,755,755,755,755,755', '755,755,755,755,755,755,755,,755,755,755,,755,755,755,755,755,771,771', '771,771,771,771,771,771,771,771,771,,771,771,,,771,771,,755,,,755,,', '755,755,,,755,,755,771,,771,755,771,771,,771,771,771,771,771,755,771', ',,,755,755,755,755,,755,755,755,755,,,,,755,755,,771,,,,,755,,755,755', '755,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,865,865', '865,865,865,865,865,865,865,865,865,,865,865,,,865,865,,300,,,300,,', '300,300,,,300,,300,865,,865,300,865,865,,865,865,865,865,865,300,865', ',,,300,300,300,300,,300,300,300,300,,,,,300,300,,865,,,,,300,,300,300', '300,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,21,21', '21,21,21,21,21,21,21,21,21,,21,21,,,21,21,,745,,,745,,,745,745,,,745', ',745,21,,21,745,21,21,,21,21,21,21,21,745,21,,,,745,745,745,745,,745', '745,745,745,,,,,745,745,,21,,,,,745,,745,745,745,800,800,800,800,800', '800,,,,800,800,,,,800,,800,800,800,800,800,800,800,,,,,,800,800,800', '800,800,800,800,,,800,,,,,,800,800,800,800,800,800,800,800,800,800,800', '800,,800,800,800,,800,800,800,800,800,473,473,473,473,473,473,473,,', '473,473,,,,,,473,473,,800,,,800,,,800,800,,,800,,800,473,,473,800,473', '473,,473,473,473,473,473,800,473,,,,800,800,800,800,,800,800,800,800', ',,,,800,800,,,,,,,800,,800,800,800,348,348,348,348,348,348,,,,348,348', ',,,348,,348,348,348,348,348,348,348,,,,,,348,348,348,348,348,348,348', ',,348,,,,,,348,348,348,348,348,348,348,348,348,348,348,348,,348,348', '348,,348,348,348,348,348,460,460,460,460,460,460,460,460,460,460,460', ',460,460,,,460,460,,348,,,348,,,348,348,,,348,,348,460,,460,348,460', '460,,460,460,460,460,460,348,460,,,,348,348,348,348,,348,348,348,348', ',,,,348,348,,,,,,,348,,348,348,348,852,852,852,852,852,852,,,,852,852', ',,,852,,852,852,852,852,852,852,852,,,,,,852,852,852,852,852,852,852', ',,852,,,,,,852,852,852,852,852,852,852,852,852,852,852,852,,852,852', '852,,852,852,852,852,852,474,474,474,474,474,474,474,,,474,474,,,,,', '474,474,,852,,,852,,,852,852,,,852,,852,474,,474,852,474,474,,474,474', '474,474,474,852,474,,,,852,852,852,852,,852,852,852,852,,,,,852,852', ',,,,,,852,,852,852,852,890,890,890,890,890,890,,,,890,890,,,,890,,890', '890,890,890,890,890,890,,,,,,890,890,890,890,890,890,890,,,890,,,,,', '890,890,890,890,890,890,890,890,890,890,890,890,,890,890,890,,890,890', '890,890,890,475,475,475,475,475,475,475,,,475,475,,,,,,475,475,,890', ',,890,,,890,890,,,890,,890,475,,475,890,475,475,,475,475,475,475,475', '890,475,,,,890,890,890,890,,890,890,890,890,,,,,890,890,,,,,,,890,,890', '890,890,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,461', '461,461,461,461,461,461,461,461,461,461,,461,461,,,461,461,,741,,,741', ',,741,741,,,741,,741,461,,461,741,461,461,,461,461,461,461,461,741,461', ',,,741,741,741,741,,741,741,741,741,,,,,741,741,,,,,,,741,,741,741,741', '736,736,736,736,736,736,,,,736,736,,,,736,,736,736,736,736,736,736,736', ',,,,,736,736,736,736,736,736,736,,,736,,,,,,736,736,736,736,736,736', '736,736,736,736,736,736,,736,736,736,,736,736,736,736,736,476,476,476', '476,476,476,476,,,476,476,,,,,,476,476,,736,,,736,,,736,736,,,736,,736', '476,,476,736,476,476,,476,476,476,476,476,736,476,,,,736,736,736,736', ',736,736,736,736,,,,,736,736,,,,,,,736,,736,736,736,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,480,480,480,480,480,480,480', '480,,480,480,,,,,,480,480,,234,,,234,,,234,234,,,234,,234,480,,480,234', '480,480,,480,480,480,480,480,234,480,,,,234,234,234,234,,234,234,234', '234,,,,,234,234,,,,,,,234,,234,234,234,846,846,846,846,846,846,,,,846', '846,,,,846,,846,846,846,846,846,846,846,,,,,,846,846,846,846,846,846', '846,,,846,,,,,,846,846,846,846,846,846,846,846,846,846,846,846,,846', '846,846,,846,846,846,846,846,471,471,471,471,471,471,471,,,471,471,', ',,,,471,471,,846,,,846,,,846,846,,,846,,846,471,,471,846,471,471,,471', '471,471,471,471,846,471,,,,846,846,846,846,,846,846,846,846,,,,,846', '846,,,,,,,846,,846,846,846,33,33,33,33,33,33,,,,33,33,,,,33,,33,33,33', '33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33', '33,33,33,33,33,,33,33,33,,33,33,33,33,33,472,472,472,472,472,472,472', ',,472,472,,,,,,472,472,,33,,,33,,,33,33,,,33,,33,472,,472,33,472,472', ',472,472,472,472,472,33,472,,,,33,33,33,33,,33,33,33,33,,,,,33,33,,', ',,,,33,,33,33,33,0,0,0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0', '0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,479,479,479', '479,479,479,479,,,479,479,,,,,,479,479,,0,,,0,,,0,0,,,0,,0,479,,479', '0,479,479,,479,479,479,479,479,0,479,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,,', ',,,0,,0,0,0,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,577', '468,,,,,,,,,,,,,,,,468,468,,577,,,577,,,577,577,,,577,,577,468,,468', '577,468,468,,468,468,,,,577,,,,,577,577,577,577,,577,577,577,577,,,', ',577,577,,,,,,,577,,577,577,577,889,889,889,889,889,889,,,,889,889,', ',,889,,889,889,889,889,889,889,889,,,,,,889,889,889,889,889,889,889', ',,889,,,,,,889,889,889,889,889,889,889,889,889,889,889,889,,889,889', '889,,889,889,889,889,889,469,,,,,,,,,,,,,,,,469,469,,889,,,889,,,889', '889,,,889,,889,469,,469,889,469,469,,469,469,,,,889,,,,,889,889,889', '889,,889,889,889,889,,,,,889,889,,,,,,,889,,889,889,889,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,,,,,331,331,,,,,,,331,,331,331,331,124,124,124,124,124,124', ',,,124,124,,,,124,,124,124,124,124,124,124,124,,,,,,124,124,124,124', '124,124,124,,,124,,,,,,124,124,124,124,124,124,124,124,124,124,124,124', ',124,124,124,,124,124,124,124,124,,,,,,,,,,,,,,,,,,,,124,,,124,,,124', '124,,,124,,124,,,,124,,,,,,,,,124,,,,,124,124,124,124,,124,124,124,124', ',,,,124,124,,,,,,,124,,124,124,124,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,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,964,964,964,964,964,964,,,,964,964,,,,964', ',964,964,964,964,964,964,964,,,,,,964,964,964,964,964,964,964,,,964', ',,,,,964,964,964,964,964,964,964,964,964,964,964,964,,964,964,964,,964', '964,964,964,964,,,,,,,,,,,,,,,,,,,,964,,,964,,,964,964,,,964,,964,,', ',964,,,,,,,,,964,,,,,964,964,964,964,,964,964,964,964,,,,,964,964,,', ',,,,964,,964,964,964,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,209,209,,,,,209,209,,,,,,,209', ',209,209,209,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,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,,959,959,959,959,,,,,959,959,,,,,,,959,,959', '959,959,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,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,580,580,,580,580,580,580,,,,,580,580,,,,,,,580,,580,580,580', '866,866,866,866,866,866,,,,866,866,,,,866,,866,866,866,866,866,866,866', ',,,,,866,866,866,866,866,866,866,,,866,,,,,,866,866,866,866,866,866', '866,866,866,866,866,866,,866,866,866,,866,866,866,866,866,,,,,,,,,,', ',,,,,,,,,866,,,866,,,866,866,,,866,,866,,,,866,,,,,,,,,866,,,,,866,866', '866,866,,866,866,866,866,,,,,866,866,,,,790,790,790,866,790,866,866', '866,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', ',,,788,788,788,790,788,790,790,790,788,788,,,,788,,788,788,788,788,788', '788,788,,,,,,788,788,788,788,788,788,788,,,788,,,,,,,788,,,788,788,788', '788,788,788,788,788,,788,788,788,,788,788,788,788,788,,,,,,,,,,,,,,', ',,,,,788,,,788,,,788,788,,,788,,,,,,788,,,,,,,,,788,,,,,788,788,788', '788,,788,788,788,788,,,,,788,788,,,,787,787,787,788,787,788,788,788', '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', ',,,786,786,786,787,786,787,787,787,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,,,,785,785,785,786,785,786,786,786', '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', ',,,772,772,772,785,772,785,785,785,772,772,,,,772,,772,772,772,772,772', '772,772,,,,,,772,772,772,772,772,772,772,,,772,,,,,,,772,,,772,772,772', '772,772,772,772,772,,772,772,772,,772,772,772,772,772,,,,,,,,,,,,,,', ',,,,,772,,,772,,,772,772,,,772,,,,,,772,,,,,,,,,772,,,,,772,772,772', '772,,772,772,772,772,,,,,772,772,,,,233,233,233,772,233,772,772,772', '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', ',,,236,236,236,233,236,233,233,233,236,236,,,,236,,236,236,236,236,236', '236,236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236', '236,236,236,236,236,,236,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,236,237,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', ',,,238,238,238,237,238,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,,,,239,239,239,238,239,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', ',,,240,240,240,239,240,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,,,,241,241,241,240,241,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', ',,,242,242,242,241,242,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,,,,243,243,243,242,243,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', ',,,244,244,244,243,244,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,,,,245,245,245,244,245,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', ',,,246,246,246,245,246,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,,,,247,247,247,246,247,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', ',,,248,248,248,247,248,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,,,,249,249,249,248,249,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', ',,,250,250,250,249,250,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,,,,251,251,251,250,251,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', ',,,252,252,252,251,252,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,,,,253,253,253,252,253,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', ',,,254,254,254,253,254,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,,,,255,255,255,254,255,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', ',,,256,256,256,255,256,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,,,,257,257,257,256,257,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', ',,,262,262,262,257,262,257,257,257,262,262,,,,262,,262,262,262,262,262', '262,262,,,,,,262,262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262', '262,262,262,262,262,,262,262,262,,262,262,262,262,262,,,,,,,,,,,,,,', ',,,,,262,,,262,,,262,262,,,262,,,,,,262,,,,,,,,,262,,,,,262,262,262', '262,,262,262,262,262,,,,,262,262,,,,764,764,764,262,764,262,262,262', '764,764,,,,764,,764,764,764,764,764,764,764,,,,,,764,764,764,764,764', '764,764,,,764,,,,,,,764,,,764,764,764,764,764,764,764,764,,764,764,764', ',764,764,764,764,764,,,,,,,,,,,,,,,,,,,,764,,,764,,,764,764,,,764,,', ',,,764,,,,,,,,,764,,,,,764,764,764,764,,764,764,764,764,,,,,764,764', ',,,269,269,269,764,269,764,764,764,269,269,,,,269,,269,269,269,269,269', '269,269,,,,,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269,269,269', '269,269,269,269,269,269,269,269,269,,269,269,269,269,269,,,,,,,,,,,', ',,,,,,,,269,,,269,,,269,269,,,269,,269,,269,,269,,,269,,,,,,269,,,,', '269,269,269,269,,269,269,269,269,,,,,269,269,,,,270,270,270,269,270', '269,269,269,270,270,,,,270,,270,270,270,270,270,270,270,,,,,,270,270', '270,270,270,270,270,,,270,,,,,,,270,,,270,270,270,270,270,270,270,270', '270,270,270,270,,270,270,270,270,270,,,,,,,,,,,,,,,,,,,,270,,,270,,', '270,270,,,270,,270,,270,,270,,,270,,,,,,270,,,,,270,270,270,270,,270', '270,270,270,,,,,270,270,,,,278,278,278,270,278,270,270,270,278,278,', ',,278,,278,278,278,278,278,278,278,,,,,,278,278,278,278,278,278,278', ',,278,,,,,,,278,,,278,278,278,278,278,278,278,278,278,278,278,278,,278', '278,278,278,278,,,,,,,,,,,,,,,,,,,,278,,,278,,,278,278,,,278,,278,,278', ',278,,,278,,,,,,278,,,,,278,278,278,278,,278,278,278,278,,,,,278,278', '278,,,285,285,285,278,285,278,278,278,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,,,,742,742,742,285,742,285,285', '285,742,742,,,,742,,742,742,742,742,742,742,742,,,,,,742,742,742,742', '742,742,742,,,742,,,,,,,742,,,742,742,742,742,742,742,742,742,,742,742', '742,,742,742,742,742,742,,,,,,,,,,,,,,,,,,,,742,,,742,,,742,742,,,742', ',,,,,742,,,,,,,,,742,,,,,742,742,742,742,,742,742,742,742,,,,,742,742', ',,,287,287,287,742,287,742,742,742,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,287,290,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', ',,,291,291,291,290,291,290,290,290,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,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,,,,565,565,565,296,565,296,296,296,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,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5,,,5', ',,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,,,,5', ',,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,,979', '979,979,5,979,5,5,5,979,979,,,,979,,979,979,979,979,979,979,979,,,,', ',979,979,979,979,979,979,979,,,979,,,,,,,979,,,979,979,979,979,979,979', '979,979,979,979,979,979,,979,979,979,979,979,,,,,,,,,,,,,,,,,,,,979', ',,979,,,979,979,,,979,,979,,979,,979,,,979,,,,,,979,,,,,979,979,979', '979,,979,979,979,979,,,,,979,979,,,,20,20,20,979,20,979,979,979,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,,,,934,934,934,20,934,20,20,20,934,934,,,,934,,934,934', '934,934,934,934,934,,,,,,934,934,934,934,934,934,934,,,934,,,,,,,934', ',,934,934,934,934,934,934,934,934,,934,934,934,,934,934,,,934,,,,,,', ',,,,,,,,,,,,,934,,,934,,,934,934,,,934,,,,,,,,,,,,,,,,,,,,934,934,934', '934,,934,934,934,934,,,,,934,934,,,,29,29,29,934,29,934,934,934,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,,,,,,29,,,,,29,29,29,29,', '29,29,29,29,,,,,29,29,,,,30,30,30,29,30,29,29,29,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,30,,,,31,31,31,30,31,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,,,,34,34', '34,31,34,31,31,31,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34', '34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,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,34,35,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,,,900,,900,900,900,900,900,,,,,,,,,900,,35,35,35,35,,35', '35,35,35,,,,,35,35,,,,35,,900,35,,35,35,35,887,887,887,,887,900,900', ',887,887,900,,,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,,,,878,878', '878,887,878,887,887,887,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,,,,42,42,42,878,42,878,878,878,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,,,,43', '43,43,42,43,42,42,42,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,,,,45,45,45,43,45,43,43,43,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,,,,864,864,864,45,864,45,45,45,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,864,864,864,,864,864,864,864,,,,,864,864,,,,863,863,863,864,863', '864,864,864,863,863,,,,863,,863,863,863,863,863,863,863,,,,,,863,863', '863,863,863,863,863,,,863,,,,,,,863,,,863,863,863,863,863,863,863,863', '863,863,863,863,,863,863,863,863,863,,,,,,,,,,,,,,,,,,,,863,,,863,,', '863,863,,,863,,,,863,,863,,,863,,,,,,863,,,,,863,863,863,863,,863,863', '863,863,,,,,863,863,,,,,,,863,,863,863,863,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,59,59,,59,59', '59,59,,,,,59,59,,,,60,60,60,59,60,59,59,59,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,,,,,60,60,', ',,61,61,61,60,61,60,60,60,61,61,,,,61,,61,61,61,61,61,61,61,,,,,,61', '61,61,61,61,61,61,,,61,,,,,,,61,,,61,61,61,61,61,61,61,61,61,61,61,61', ',61,61,61,61,61,,,,,,,,,,,,,,,,,,,,61,,,61,,,61,61,,,61,,,,,,61,,,61', ',,,,,61,,,,,61,61,61,61,,61,61,61,61,,,,,61,61,,,,64,64,64,61,64,61', '61,61,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,,,,,64,64,,,,65,65,65,64,65,64,64,64,65,65,,,,65,,65', '65,65,65,65,65,65,,,,,,65,65,65,65,65,65,65,,,65,,,,,,,65,,,65,65,65', '65,65,65,65,65,,65,65,65,,65,65,65,65,65,,,,,,,,,,,,,,,,,,,,65,,,65', ',,65,65,,,65,,,,,,65,,,,,,,,,65,,,,,65,65,65,65,,65,65,65,65,,,,,65', '65,,,,68,68,68,65,68,65,65,65,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,68,68,68,,,,,68,68,68,,,,,68,68,,68,68', '68,69,69,69,,69,,,,69,69,,,,69,,69,69,69,69,69,69,69,,,,,,69,69,69,69', '69,69,69,,,69,,,,,,,69,,,69,69,69,69,69,69,69,69,,69,69,69,,69,69,,', '69,,,,,,,,,,,,,,,,,,,,69,,,69,,,69,69,,,69,,69,,,,,,,,,,,,,,,,,,69,69', '69,69,,69,69,69,69,,,,,69,69,,,,70,70,70,69,70,69,69,69,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,70,71,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,,,707,,707,707,707', '707,707,,,,,,,,,707,,71,71,71,71,,71,71,71,71,,,,,71,71,,,,,,707,71', ',71,71,71,113,113,113,113,113,707,707,,113,113,707,,,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,113,113,,,,,113,113,,,,,,113,113,', '113,113,113,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,118,119,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', ',,,120,120,120,119,120,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,,,,121,121,121,120,121,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,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,,,,845,845,845', '122,845,122,122,122,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,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,845,,,,842,842,842,845,842,845,845,845,842,842,,,,842', ',842,842,842,842,842,842,842,,,,,,842,842,842,842,842,842,842,,,842', ',,,,,,842,,,842,842,842,842,842,842,842,842,,842,842,842,,842,842,842', '842,842,,,,,,,,,,,,,,,,,,,,842,,,842,,,842,842,,,842,,,,,,842,,,,,,', ',,842,,,,,842,842,842,842,,842,842,842,842,,,,,842,842,,,,210,210,210', '842,210,842,842,842,210,210,,,,210,,210,210,210,210,210,210,210,,,,', ',210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210,210,210', '210,210,,210,210,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,210,211,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,,,,212,212', '212,211,212,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,212,213,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,213,214,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,,,,215,215,215,214,215,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,,,,220,220,220,215,220,215,215,215,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,220,221,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', ',,,222,222,222,221,222,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,,,692,692,692,222,692,222,222,222', '692,692,,,,692,,692,692,692,692,692,692,692,,,,,,692,692,692,692,692', '692,692,,,692,,,,,,,692,,,692,692,692,692,692,692,692,692,,692,692,692', ',692,692,692,692,692,,,,,,,,,,,,,,,,,,,,692,,,692,,,692,692,,,692,,692', ',,,692,,,,,,,,,692,,,,,692,692,692,692,,692,692,692,692,,,,,692,692', ',,,687,687,687,692,687,692,692,692,687,687,,,,687,,687,687,687,687,687', '687,687,,,,,,687,687,687,687,687,687,687,,,687,,,,,,,687,,,687,687,687', '687,687,687,687,687,,687,687,687,,687,687,,,687,,,,,,,,,,,,,,,,,,,,687', ',,687,,,687,687,,,687,,,,,,,,,,,,,,,,,,,,687,687,687,687,,687,687,687', '687,,,,,687,687,,,,676,676,676,687,676,687,687,687,676,676,,,,676,,676', '676,676,676,676,676,676,,,,,,676,676,676,676,676,676,676,,,676,,,,,', ',676,,,676,676,676,676,676,676,676,676,,676,676,676,,676,676,,,676,', ',,,,,,,,,,,,,,,,,,676,,,676,,,676,676,,,676,,,,,,,,,,,,,,,,,,,,676,676', '676,676,,676,676,676,676,,,,,676,676,,,,673,673,673,676,673,676,676', '676,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,,,673,673,,,673', ',,,,,673,,,,,,,,,673,,,,,673,673,673,673,,673,673,673,673,,,,,673,673', ',,,321,321,321,673,321,673,673,673,321,321,,,,321,,321,321,321,321,321', '321,321,,,,,,321,321,321,321,321,321,321,,,321,,,,,,,321,,,321,321,321', '321,321,321,321,321,,321,321,321,,321,321,,,321,,,,,,,,,,,,,,,,,,,,321', ',,321,,,321,321,,,321,,,,,,,,,,,,,,,,,,,,321,321,321,321,,321,321,321', '321,,,,,321,321,,,,670,670,670,321,670,321,321,321,670,670,,,,670,,670', '670,670,670,670,670,670,,,,,,670,670,670,670,670,670,670,,,670,,,,,', ',670,,,670,670,670,670,670,670,670,670,,670,670,670,,670,670,670,670', '670,,,,,,,,,,,,,,,,,,,,670,,,670,,,670,670,,,670,,,,,,670,,,,,,,,,670', ',,,,670,670,670,670,,670,670,670,670,,,,,670,670,,,,646,646,646,670', '646,670,670,670,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,,,,328,328,328,646,328,646,646,646,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,,,,330,330,330,328', '330,328,328,328,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,,,,645,645,645,330,645,330,330,330,645,645,,,,645,,645', '645,645,645,645,645,645,,,,,,645,645,645,645,645,645,645,,,645,,,,,', ',645,,,645,645,645,645,645,645,645,645,,645,645,645,,645,645,645,645', '645,,,,,,,,,,,,,,,,,,,,645,,,645,,,645,645,,,645,,,,,,645,,,,,,,,,645', ',,,,645,645,645,645,,645,645,645,645,,,,,645,645,,,,641,641,641,645', '641,645,645,645,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,641,640,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,,,,639,639,639,640', '639,640,640,640,639,639,,,,639,,639,639,639,639,639,639,639,,,,,,639', '639,639,639,639,639,639,,,639,,,,,,,639,,,639,639,639,639,639,639,639', '639,639,639,639,639,,639,639,639,639,639,,,,,,,,,,,,,,,,,,,,639,,,639', ',,639,639,,,639,,,,639,,639,,,639,,,,,,639,,,,,639,639,639,639,,639', '639,639,639,,,,,639,639,,,,638,638,638,639,638,639,639,639,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', ',,,635,635,635,638,635,638,638,638,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,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,,,,631,631,631,634,631,634,634,634,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', ',,,630,630,630,631,630,631,631,631,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,,,,629,629,629,630,629,630,630,630', '629,629,,,,629,,629,629,629,629,629,629,629,,,,,,629,629,629,629,629', '629,629,,,629,,,,,,,629,,,629,629,629,629,629,629,629,629,,629,629,629', ',629,629,629,629,629,,,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629,,629', ',,,629,,,,,,,,,629,,,,,629,629,629,629,,629,629,629,629,,,,,629,629', ',,,347,347,347,629,347,629,629,629,347,347,,,,347,,347,347,347,347,347', '347,347,,,,,,347,347,347,347,347,347,347,,,347,,,,,,,347,,,347,347,347', '347,347,347,347,347,,347,347,347,,347,347,347,347,347,,,,,,,,,,,,,,', ',,,,,347,,,347,,,347,347,,,347,,,,,,347,,,,,,,,,347,,,,,347,347,347', '347,,347,347,347,347,,,,,347,347,,,,597,597,597,347,597,347,347,347', '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,,,,587,587,587,597,587,597,597,597,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,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,,,,586,586,586', '587,586,587,587,587,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,,,,368,368,368,586,368,586,586,586,368,368,,,,368', ',368,368,368,368,368,368,368,,,,,,368,368,368,368,368,368,368,,,368', ',,,,,,368,,,368,368,368,368,368,368,368,368,,368,368,368,,368,368,368', '368,368,,,,,,,,,,,,,,,,,,,,368,,,368,,,368,368,,,368,,,,,,368,,,,,,', ',,368,,,,,368,368,368,368,,368,368,368,368,,,,,368,368,,,,540,540,540', '368,540,368,368,368,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,,,,537,537,537,540,537,540,540,540,537,537,', ',,537,,537,537,537,537,537,537,537,,,,,,537,537,537,537,537,537,537', ',,537,,,,,,,537,,,537,537,537,537,537,537,537,537,537,537,537,537,,537', '537,537,537,537,,,,,,,,,,,,,,,,,,,,537,,,537,,,537,537,,,537,,537,,', ',537,,,537,,,,,,537,,,,,537,537,537,537,,537,537,537,537,,,,,537,537', ',,,531,531,531,537,531,537,537,537,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,,,,526,526,526,531,526,531,531,531', '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', ',,,525,525,525,526,525,526,526,526,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,,,,522,522,522,525,522,525,525,525', '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', '522,516,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,,,,384,384,384,516,384,516,516,516', '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', ',,,514,514,514,384,514,384,384,384,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,,,1025,,1025,1025,1025,1025,1025,,,,,,,,,1025', ',514,514,514,514,,514,514,514,514,,,,,514,514,,,,,,1025,514,,514,514', '514,506,506,506,506,506,1025,1025,,506,506,1025,,,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,,506,506,506,506,,,,,506,506,,,,,,506,506,,506,506', '506,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,,,,498,498,498,500,498,500,500,500,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', ',,,496,496,496,498,496,498,498,498,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,496,,,,,496,496,,,,459,459,459,496,459', '496,496,496,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,459,458,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,,,,457,457,457,458,457', '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,,,,455,455,455,457,455,457,457,457,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,,,,412,412,412', '455,412,455,455,455,412,412,,,,412,,412,412,412,412,412,412,412,,,,', ',412,412,412,412,412,412,412,,,412,,,,,,,412,,,412,412,412,412,412,412', '412,412,,412,412,412,,412,412,412,412,412,,,,,,,,,,,,,,,,,,,,412,,,412', ',,412,412,,,412,,,,,,412,,,,,,,,,412,,,,,412,412,412,412,,412,412,412', '412,,,,,412,412,,,,304,304,304,412,304,412,412,412,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,,,999,,999,999,999,999,999', ',,,,,,,,999,,304,304,304,304,,304,304,304,304,,,,,304,304,,,,304,,999', '304,,304,304,304,709,709,709,,709,999,999,,709,709,999,,,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,709,,709,709,709,709,,,,,709,709,,,,,,,709,,709,709,709', '8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8', '8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8,8,,,,8,8', '8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8,8,,,8,8,,,,,,,,,,,,,,8,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,9,9,,,9,9,,,,,,,,,,,,,,9,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,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,626,,,,,,,,,,,,,,626,626', ',626,626,626,626,626,626,626,626,626,626,626,626,,,626,626,,,,,,,,,', ',,,,626,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,,,,,,,,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,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72', '72,72,72,72,72,72,72,,,,72,72,72,72,72,72,72,72,72,72,,,,,,72,72,72', '72,72,72,72,72,72,72,72,72,,72,,,,,,72,72,,72,72,72,72,72,72,72,,,72', '72,,,,72,72,72,72,,,,,,72,,,,,,,,72,72,,72,72,72,72,72,72,72,72,72,72', '72,72,,,72,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748', '748,748,748,748,748,748,748,748,748,,,,748,748,748,748,748,748,748,748', '748,748,,,,,,748,748,748,748,748,748,748,748,748,,,748,,,,,,,,748,748', ',748,748,748,748,748,748,748,,,748,748,,,,748,748,748,748,798,,798,798', '798,798,798,,,,,,,748,748,798,748,748,748,748,748,748,748,748,748,748', '748,748,,,748,,,,,,,798,,980,980,,,980,,,798,798,798,798,,980,980,798', '980,980,980,980,980,980,980,,,980,980,,,,980,980,980,980,,,,,,980,,798', ',,,,,980,980,,980,980,980,980,980,980,980,980,980,980,980,980,527,527', '980,,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,518,518,527,,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,981,981,518,,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,454', '454,981,,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,265,265,454,,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,976,976,265,,976,,,,,,,,976', '976,,976,976,976,976,976,976,976,,,976,976,,,,976,976,976,976,,,,,,976', ',,,,,,,976,976,,976,976,976,976,976,976,976,976,976,976,976,976,528', '528,976,,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,528,528,528,595,595,528,,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,596,596,595,,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', '517,517,596,,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,633,633,517,,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,632,632,633,,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,453,453,632,,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,588,588,453,,588,,,,,,,,588,588,,588,588', '588,588,588,588,588,,,588,588,,,,588,588,588,588,,,,,,588,,,,,,,,588', '588,,588,588,588,588,588,588,588,588,588,588,588,588,216,216,588,,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,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,589,589,217,,589,,,,,,,,589,589,,589', '589,589,589,589,589,589,,,589,589,,,,589,589,589,589,,,,,,589,,,,,,', ',589,589,,589,589,589,589,589,589,589,589,589,589,589,589,,926,589,926', '926,926,926,926,,997,,997,997,997,997,997,926,,,,,,,,997,,894,,894,894', '894,894,894,,,,,,926,,,894,,,,,997,926,926,926,926,,,,926,997,997,997', '997,,,,997,894,,746,,746,746,746,746,746,894,894,894,894,,,,894,746', ',747,,747,747,747,747,747,,545,,545,545,545,545,545,747,,,,,746,,,545', ',,,,,746,746,746,746,,,,746,747,,,,,,,,545,747,747,747,747,,,,747,545', '545,545,545,,,703,545,703,703,703,703,703,1001,,1001,1001,1001,1001', '1001,1003,703,1003,1003,1003,1003,1003,987,1001,987,987,987,987,987', ',1003,,,,,,,987,703,,,,,,,1001,,703,703,703,703,,1003,,703,,1001,1001', ',987,,1001,,1003,1003,,,,1003,,987,987,,,343,987,343,343,343,343,343', ',705,,705,705,705,705,705,343,,,,,,,,705,,928,,928,928,928,928,928,', ',,,,343,343,,928,,,,,705,343,343,343,343,,,,343,705,705,705,705,,,,705', '928,,,,,,,,,928,928,928,928,,,,928' ] racc_action_check = arr = ::Array.new(24615, 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 = [ 4203, 573, nil, 189, nil, 11121, 1528, 931, 22475, 22603, 899, nil, 624, 608, -16, 566, 958, -82, nil, -74, 11383, 2803, 538, nil, 490, nil, 6, 1549, 1169, 11645, 11776, 11907, nil, 4063, 12038, 12169, nil, 390, 464, 460, 461, 283, 12570, 12701, 707, 12832, 235, 922, nil, nil, nil, nil, nil, nil, nil, nil, nil, 954, nil, 13233, 13364, 13495, -13, nil, 13626, 13757, nil, nil, 13888, 14027, 14158, 14289, 22987, nil, nil, nil, nil, nil, nil, 628, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 622, nil, nil, 734, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 195, nil, 14428, nil, nil, nil, nil, 14567, 14698, 14829, 14960, 15099, nil, 4763, nil, 727, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -32, nil, 5183, 15492, 15623, 15754, 15885, 16016, 16147, 24087, 24148, nil, nil, 16278, 16409, 16540, nil, nil, 892, 319, 374, 1039, 375, 950, 994, nil, 6520, 3783, 988, 6651, 6782, 6913, 7044, 7175, 7306, 7437, 7568, 7699, 7830, 7961, 8092, 8223, 8354, 8485, 8616, 8747, 8878, 9009, 9140, 9271, 9402, nil, nil, nil, nil, 9533, nil, nil, 23477, nil, nil, 977, 9795, 9926, nil, nil, nil, nil, nil, nil, nil, 10057, nil, 2383, nil, 936, 925, nil, 10188, 966, 10450, nil, nil, 10581, 10712, nil, nil, 112, nil, 10851, 1363, 928, 875, 2663, 886, 924, 880, 22197, 2243, 814, 372, 706, 937, 630, nil, 889, 834, -8, nil, nil, nil, 856, 264, 805, 17195, nil, 523, 836, 626, nil, 833, 17588, nil, 17719, 4623, 1244, 766, nil, -68, 397, 801, 779, 128, 803, nil, nil, 24485, 505, 48, 47, 19168, 3083, 1963, 49, 858, 735, 3, -18, 594, 813, 28, 839, nil, nil, 1024, 515, 298, nil, 560, nil, 747, 19692, nil, nil, nil, 486, 459, 422, 382, 380, 316, 275, 176, 152, nil, 140, nil, 20740, nil, 197, 260, 295, 301, 327, -30, -41, 308, nil, nil, nil, nil, nil, nil, nil, nil, 604, 22859, nil, nil, nil, nil, 608, nil, nil, 746, 22066, 792, nil, nil, 796, nil, 482, 145, 961, nil, nil, 1823, nil, nil, nil, nil, nil, 1963, 408, nil, 398, 368, 350, 354, 1281, nil, nil, nil, 512, 132, 859, nil, nil, 1681, 1413, nil, nil, nil, 55, nil, 788, 23965, 23416, 21935, 142, 21804, 21673, 21542, 3083, 3503, 973, 980, 615, 616, 618, 619, 4343, 4483, 1632, 3923, 4063, 2943, 3223, 3363, 3643, 1095, 574, 4203, 3783, 2103, 1498, nil, 1090, nil, nil, nil, nil, 581, nil, nil, nil, 583, nil, nil, 21411, nil, 21280, nil, 21149, nil, 257, nil, nil, nil, 21010, 1571, nil, 596, 604, nil, nil, 605, 20871, 609, 20609, 23782, 23294, 484, 656, nil, 20478, 630, nil, 20347, 20216, 23233, 23599, 1364, 2243, 20085, 762, 773, 654, 697, nil, 19954, nil, nil, 19823, nil, nil, nil, nil, 24360, nil, 656, 658, nil, 686, 689, 690, nil, nil, nil, nil, nil, nil, nil, nil, 682, 1173, nil, nil, 10982, nil, nil, nil, 780, nil, nil, nil, 782, nil, nil, 784, 4343, 837, nil, 5463, 61, 846, 847, 843, 853, 19561, 19430, 24026, 24209, 21, nil, nil, 590, nil, 23660, 23721, 19299, nil, nil, 151, 1823, 784, nil, -14, nil, nil, nil, 1092, nil, nil, nil, 756, nil, nil, 255, nil, 159, nil, nil, 748, nil, 754, nil, nil, nil, 22731, nil, 756, 19037, 18906, 18775, 23904, 23843, 18644, 18505, 304, 800, 18374, 18243, 18112, 17981, 801, nil, nil, 17850, 17457, 805, nil, nil, nil, 288, 292, 264, 402, 773, 772, 897, nil, 881, -15, nil, nil, 816, -56, 923, nil, 800, nil, 848, 17326, nil, nil, 17064, nil, -109, 16933, 808, nil, 813, 90, 166, 871, 165, 704, 883, 840, 16802, nil, 917, 157, 974, 16671, nil, nil, nil, 361, 0, 870, 1055, nil, nil, -36, 24412, nil, 24493, nil, 14336, nil, 22336, nil, 1279, nil, 869, 195, 875, nil, nil, nil, nil, 75, nil, 993, nil, nil, nil, nil, nil, 1000, nil, 14, 882, 30, 31, 33, 5, 3643, 847, 816, nil, 915, 3503, 10319, nil, 1046, 2803, 24335, 24352, 23100, nil, nil, nil, nil, nil, nil, 2523, nil, nil, nil, nil, nil, nil, nil, 937, 9664, 944, 404, 127, 844, 0, nil, 2523, 6389, nil, 959, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 6258, 6127, 5996, 5865, 360, 5734, nil, 43, nil, nil, 982, nil, nil, 23133, nil, 2943, nil, nil, nil, nil, 974, 136, nil, nil, 1101, nil, 2103, 977, 1025, nil, nil, nil, nil, nil, nil, 983, 1029, 987, nil, nil, nil, 989, 990, nil, 992, 995, nil, 1001, nil, nil, 1005, 741, -95, 1274, nil, 39, nil, 15361, 177, nil, 15230, 3923, 26, 203, nil, 212, 167, 3223, nil, 218, 121, 62, nil, 141, 178, 270, nil, nil, 13094, 12963, 2663, 5603, nil, 275, 279, nil, 291, 315, 317, nil, 354, 337, 339, 12439, nil, nil, nil, nil, 4903, nil, nil, -11, 12308, nil, 4483, 3363, 1259, nil, nil, 24296, nil, 1344, nil, 1612, nil, 12216, nil, nil, nil, nil, 259, 1478, 423, nil, 35, nil, nil, 313, nil, nil, nil, 549, nil, nil, nil, 471, nil, nil, 1058, nil, nil, 24271, nil, 24510, nil, 1087, nil, nil, 453, 11514, 924, 516, nil, 2383, -7, 20, 926, 521, -10, nil, 487, 597, -84, nil, nil, nil, 478, 480, 483, 500, 508, 1406, 518, 1380, 5323, nil, nil, nil, nil, 5043, 527, nil, nil, 535, 536, 537, 540, nil, 542, nil, 995, 23538, nil, 733, 11252, 23172, 23355, 32, nil, nil, nil, 1289, 24433, nil, nil, nil, nil, 1284, 693, 441, 841, nil, 24279, nil, 22244, nil, 24419, nil, 24426, nil, nil, 876, 895, nil, 868, 23, -1, 21, -9, nil, 972, 230, nil, nil, 255, 424, 436, 439, 46, nil, 20918, nil, nil, nil, nil, 553, nil ] racc_action_default = [ -3, -607, -1, -593, -4, -607, -7, -607, -607, -607, -607, -30, -607, -607, -34, -607, -607, -289, -46, -595, -607, -51, -55, -56, -57, -61, -266, -266, -266, -302, -331, -332, -73, -12, -77, -85, -87, -607, -497, -498, -607, -607, -607, -607, -225, -607, -595, -239, -280, -281, -282, -283, -284, -285, -286, -287, -288, -581, -291, -295, -606, -571, -310, -393, -607, -607, -53, -53, -593, -607, -607, -607, -607, -333, -334, -336, -438, -439, -440, -441, -442, -463, -445, -446, -465, -467, -450, -455, -459, -461, -477, -463, -479, -481, -482, -483, -484, -579, -486, -487, -580, -489, -490, -491, -492, -493, -494, -495, -496, -501, -502, -607, -2, -594, -602, -603, -604, -6, -607, -607, -607, -607, -607, -8, -3, -18, -607, -116, -117, -118, -119, -120, -121, -122, -123, -124, -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, -197, -198, -23, -125, -12, -607, -607, -607, -607, -607, -256, -607, -607, -591, -592, -607, -607, -595, -596, -50, -607, -497, -498, -607, -289, -607, -607, -231, -607, -12, -607, -210, -211, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -240, -241, -242, -243, -607, -402, -404, -607, -589, -590, -62, -256, -607, -309, -408, -417, -419, -68, -414, -69, -595, -70, -246, -261, -270, -270, -265, -607, -271, -607, -463, -573, -607, -607, -71, -72, -593, -13, -607, -16, -607, -75, -12, -595, -607, -78, -81, -12, -93, -94, -607, -607, -101, -302, -305, -595, -607, -331, -332, -335, -415, -607, -83, -607, -89, -299, -480, -607, -219, -220, -607, -232, -607, -12, -293, -595, -247, -599, -599, -607, -607, -599, -607, -311, -312, -529, -52, -607, -607, -607, -12, -12, -593, -607, -594, -497, -498, -607, -607, -289, -607, -346, -347, -111, -112, -607, -114, -607, -289, -505, -607, -497, -498, -324, -116, -117, -158, -159, -160, -176, -181, -188, -191, -326, -607, -569, -607, -443, -607, -607, -607, -607, -607, -607, -607, -607, 1032, -5, -605, -24, -25, -26, -27, -28, -607, -607, -20, -21, -22, -126, -607, -31, -33, -276, -607, -607, -275, -32, -607, -35, -607, -289, -43, -45, -199, -251, -271, -47, -48, -36, -200, -251, -595, -257, -270, -270, -582, -583, -266, -412, -584, -585, -583, -582, -266, -411, -413, -584, -585, -42, -207, -49, -595, -308, -607, -607, -607, -256, -299, -607, -607, -607, -208, -209, -212, -213, -214, -215, -216, -217, -221, -222, -223, -224, -226, -227, -228, -229, -230, -233, -234, -235, -236, -595, -244, -423, -266, -582, -583, -59, -63, -595, -267, -421, -423, -595, -304, -262, -607, -263, -607, -268, -607, -272, -607, -576, -578, -11, -594, -15, -17, -595, -74, -297, -90, -79, -607, -595, -256, -607, -607, -100, -607, -480, -607, -86, -91, -607, -607, -607, -607, -245, -237, -607, -430, -607, -595, -607, -248, -601, -600, -250, -601, -300, -301, -572, -394, -529, -397, -568, -568, -512, -514, -514, -514, -528, -530, -531, -532, -533, -534, -535, -536, -537, -607, -539, -541, -543, -548, -550, -551, -553, -558, -560, -561, -563, -564, -565, -607, -12, -337, -338, -12, -607, -607, -607, -607, -607, -607, -256, -607, -607, -299, -53, -111, -112, -113, -607, -607, -256, -320, -503, -607, -12, -507, -328, -595, -444, -464, -469, -607, -471, -447, -466, -607, -468, -449, -607, -452, -607, -454, -457, -607, -458, -607, -478, -9, -19, -607, -29, -279, -607, -607, -256, -607, -607, -607, -607, -416, -607, -258, -260, -607, -607, -64, -255, -409, -607, -607, -66, -410, -307, -597, -582, -583, -582, -583, -595, -607, -607, -424, -58, -405, -421, -253, -607, -382, -607, -303, -270, -269, -273, -607, -574, -575, -607, -14, -76, -607, -82, -88, -595, -582, -583, -254, -586, -99, -607, -84, -607, -206, -218, -595, -606, -606, -292, -294, -296, -599, -607, -595, -607, -510, -511, -607, -607, -521, -607, -524, -607, -526, -607, -348, -607, -350, -352, -359, -595, -542, -552, -562, -566, -606, -339, -606, -54, -340, -341, -315, -316, -607, -318, -607, -595, -582, -583, -586, -298, -12, -111, -112, -115, -595, -12, -607, -322, -607, -12, -529, -529, -607, -570, -470, -473, -474, -475, -476, -12, -448, -451, -453, -456, -460, -462, -127, -277, -607, -595, -582, -583, -583, -582, -44, -252, -607, -598, -270, -38, -202, -39, -203, -65, -40, -205, -41, -204, -67, -607, -607, -607, -607, -416, -607, -403, -382, -407, -406, -607, -418, -383, -595, -385, -12, -420, -264, -274, -577, -80, -416, -92, -306, -606, -344, -12, -431, -606, -432, -433, -249, -395, -398, -400, -387, -607, -568, -549, -567, -513, -514, -514, -540, -514, -514, -559, -514, -537, -554, -595, -607, -357, -607, -538, -607, -342, -607, -607, -317, -607, -12, -416, -607, -416, -607, -607, -12, -325, -607, -595, -607, -329, -607, -278, -416, -37, -201, -259, -607, -238, -12, -60, -568, -568, -364, -366, -366, -366, -381, -607, -595, -537, -545, -546, -556, -422, -10, -12, -437, -345, -607, -607, -435, -12, -12, -607, -396, -509, -607, -517, -607, -519, -607, -522, -607, -525, -527, -349, -351, -355, -607, -360, -313, -607, -314, -273, -606, -319, -321, -504, -607, -327, -506, -508, -507, -472, -425, -607, -362, -363, -372, -374, -607, -377, -607, -379, -384, -607, -607, -544, -607, -436, -12, -497, -498, -607, -607, -289, -434, -607, -607, -595, -389, -391, -392, -514, -514, -514, -514, -353, -607, -358, -607, -12, -426, -427, -428, -323, -12, -568, -547, -365, -366, -366, -366, -366, -557, -366, -386, -555, -607, -299, -430, -256, -607, -607, -299, -399, -401, -388, -607, -607, -515, -518, -520, -523, -607, -356, -606, -607, -361, -607, -369, -607, -371, -607, -375, -607, -378, -380, -298, -586, -429, -595, -582, -583, -586, -298, -390, -514, -354, -343, -330, -366, -366, -366, -366, -416, -516, -607, -367, -370, -373, -376, -366, -368 ] clist = [ '221,216,334,303,381,130,130,264,16,266,272,276,341,16,691,281,281,281', '116,317,317,585,436,442,636,6,430,330,225,497,6,546,345,346,745,533', '350,225,225,225,428,16,308,308,414,415,448,265,488,344,344,348,349,344', '317,317,317,224,135,135,523,553,282,282,282,324,668,16,668,130,112,484', '225,225,302,123,225,355,365,365,489,320,113,116,332,594,397,398,399', '400,125,208,386,335,577,580,840,133,133,828,663,2,393,344,344,344,344', '299,536,539,700,701,543,421,561,301,421,268,275,277,907,16,421,283,283', '283,225,225,225,225,16,671,16,427,800,351,948,809,6,447,821,831,715', '872,117,904,950,401,389,6,611,613,616,616,336,339,390,972,657,391,279', '292,293,827,392,829,755,665,843,615,617,367,371,671,742,826,823,966', '750,497,661,1,626,723,328,403,337,410,957,360,207,674,660,882,383,338', '342,425,426,358,437,281,598,382,331,534,449,450,668,668,453,333,741', '852,446,601,602,16,225,418,225,225,418,225,748,402,972,920,418,225,225', '1014,874,698,876,947,544,817,993,343,875,950,16,413,413,697,889,409', '420,789,408,420,395,677,728,281,281,420,873,436,442,686,866,553,281', '890,655,904,483,491,795,968,671,806,1016,302,492,225,225,792,960,813', '886,448,385,428,225,387,388,317,524,835,,517,520,,828,,272,502,,,276', '282,16,744,317,,16,116,527,282,308,16,535,581,561,739,933,,,507,828', '682,,847,,679,,308,831,,344,682,849,451,,,,16,588,302,,521,,,302,,,', '513,688,964,600,951,225,16,16,961,860,,505,,,283,116,508,266,,604,1017', ',283,506,299,,225,,758,299,758,,509,,,893,969,515,970,582,583,494,225', ',682,,,,731,828,130,490,682,632,,603,,,740,493,,637,,802,510,805,,584', ',,643,,779,,,,648,784,,710,,924,925,668,855,856,,437,436,442,,281,765', ',,850,,,,854,,446,,135,,,,1019,,,1008,,656,225,553,553,776,778,643,816', ',781,783,,561,,561,,,846,,,,524,,625,,,,,,524,133,,,,671,,,317,,437', '281,,,,,317,,,,437,,,16,446,690,561,561,,802,,308,,225,446,814,642,996', ',308,,421,647,,,,,,225,,,421,421,,,,421,421,,,,,704,706,708,916,,,775', '777,,,649,780,782,,,,877,922,,437,281,,659,736,,710,,437,837,962,281', ',16,446,,16,,667,,446,,946,225,724,,862,,,,662,1023,,225,666,,,16,794', '776,778,783,781,743,437,281,720,730,,722,675,130,,,,,678,,446,696,,', '815,938,637,,418,225,,,16,,793,524,,694,418,418,,,,418,418,,807,,959', '770,637,317,,,,561,643,420,995,648,,,317,,421,,135,420,420,820,857,', '420,420,308,,,,,,862,861,,26,,308,,877,26,877,,,,710,,710,,,762,,851', ',637,26,,133,,749,,,,637,26,26,26,413,26,344,,,,,774,,,,,,,,,,,,16,130', '637,,,16,225,884,26,16,,888,,26,26,,,26,,16,,,,,877,,822,,955,710,,', ',848,,820,418,,,,,,682,,,,1009,,,,,,858,,,,,,,808,,,26,,16,420,909,26', '26,26,26,26,29,26,,16,,29,,710,,710,,344,839,895,897,,899,901,,902,29', ',,,,881,,,,29,29,29,,29,225,,885,,16,,,820,,710,16,,,317,,,915,,,869', ',919,317,,16,29,824,,,824,29,29,,,29,,935,912,,,,16,,,,941,,16,16,,', ',26,26,26,26,26,26,26,,,,,26,26,26,,,,317,,,,878,937,,980,26,985,29', '945,,,,29,29,29,29,29,,29,,975,,,,16,,903,,,,,,988,989,990,991,,,,,26', '26,437,281,,16,918,,,26,16,446,,870,,,446,978,830,,832,,,,,225,,26,637', ',,26,965,,,869,26,869,994,869,,,,,,,,,39,927,929,931,,39,,,1024,,,,', ',26,29,29,29,29,29,29,29,,,,,29,29,29,,26,26,26,39,307,307,,,878,,29', '878,,878,,878,,,,,,26,,,,,,,869,39,869,,869,871,869,,,26,,354,370,370', '370,,,29,29,,,,,,,,29,,869,,,,824,,,870,,870,,870,998,1000,1002,1004', '29,1005,,,29,,,,,29,878,39,878,,878,,878,,,,39,,39,,,,,,,,,,,,,29,26', ',878,,,,,,,,,1026,1027,1028,1029,29,29,29,,,,952,1031,953,,954,870,', '870,,870,,870,,,,29,,,,,,,,,,,,,,,26,29,,870,971,,973,,,,26,,,,,,,,', ',39,,,,,26,,,,,,,,,,,,,,,,,,,,39,,,,,,,,,,,,,,,,,,1015,,,,,,,,26,29', '1020,26,1021,,1022,,,,26,,,,,,,,,,26,,,,26,,,,,,1030,,38,,,,39,38,,', '39,,,,307,39,,,,,,,29,26,26,,,26,,,,307,29,26,26,38,306,306,26,26,,39', ',,,,,29,,,,,,,,,,,39,39,,38,,,,,,,,,,353,369,369,369,,,,,,,,,,,,,,,', ',,,29,,,29,,,,,,,29,,,,,,,,,,29,,38,,29,,,,,,,38,,38,,,26,,,,,26,26', ',,26,,,,,,,,29,29,26,,29,,,,,,29,29,,,,29,29,,,26,,,,,,,,,,,,,,,,,,', ',,,340,,,,,,26,,,,,,,,,,,26,,,,,,,38,,,,,39,,,,,,,,307,,,,,,,,307,,', '26,38,,,26,,,,,,26,,,,,,,29,,,,,29,29,26,,29,,,,,,,,,17,29,,,,17,26', ',,,,,26,26,,,,39,29,,39,,,,,,,,38,,,,38,17,310,310,306,38,,,,39,,,,', '29,,,,,,,306,,,,29,,17,,26,,38,,,411,424,,357,366,366,,,39,,,,,,38,38', '26,,,,,26,29,,,,29,,,,,,29,,,,26,,,,,,,,,,29,17,,,307,,,,,,17,,17,,', '307,,29,,,,,,29,29,,,,,499,,501,,,503,504,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,39,,,,,39,,,29,39,13,,,,,13,,,,39,,,,,,,,,,29,,,,17,29,419,,,419,', ',,,13,419,,,,,29,,,,,,,,,17,,,,38,,39,,,,,13,306,,,,,39,,,306,359,,', ',,,,,,,,,,628,,,,,,,,,,,,,,,,,,39,,,,,,39,,,,17,,,13,17,,,,310,17,39', ',13,38,13,,38,,,,,,370,,,310,,39,,,,940,,39,39,17,,38,,,,,,,,,,,,,,', '17,17,,,669,,340,,672,,,15,,,,,15,,38,,,,,,,,370,,,,39,,,,,,,,,,,,,', '15,669,,13,340,416,,39,416,,,,39,,416,,306,,,,,,,,,,15,306,13,716,,', ',,,,,,,,,,,,,,,,,,424,,,,,,,,,,,,,,,,,,,,,,,,,,38,,,,15,38,,,,38,,,', '15,13,15,,763,13,38,,,,13,,,669,340,,,,,,,,,,,17,,,,,,,,310,,,13,,,', ',310,,,,803,,,804,,,38,,13,13,,,,,,,,38,,,,,812,,,,,,,,,,,,,,,,,834', ',,15,,15,,,15,,,,17,38,15,17,,,,38,,,,,,,,,15,,,,,38,,,17,,,,,,,754', ',369,,,,,38,,,,939,859,38,38,,,,,,,,419,,,,17,,,,,,419,419,,,,419,419', ',,,,,,,,15,,,,15,,,,,15,,369,,,,38,,,,,,310,,,,,,,,,,,310,,,15,38,13', ',,,38,,,,,911,,,,,,15,15,,,,,,,,,,,340,,,,,,,,,,,,,,,,,17,,,,,17,,,', '17,,,,,,,,,,17,,,,,,,,13,,,13,,,,,,419,,,,,,,,,,,,,,,13,,,,,,,,,,,,', '17,,,,,,,,,,,17,,,,,416,,,,13,,,,,,416,416,,,,416,416,,,,,,,,,,,,,,17', ',,,,,17,,,,,,,,,,,,,15,17,,,,,,,,,,,,366,,,,,17,,,,943,,17,17,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,13,,,,13,,,366,,15,,17,15,,13,,,,,,', ',,,,,,,,,,416,17,15,,,,17,,,,,,,,,,,,,,,,,,,,,,13,,,15,,,,15,,,,13,', '15,15,,,,15,15,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,232,13,,,,,,,,280,280', '280,,,,13,,,,,,,326,327,,329,,,,,,,13,,,,944,,13,13,280,280,,,,,,,,', ',,,,,,,,15,,,,,15,,,,15,,,,,,,,,,15,,,,,,,,,,13,,,,,,,15,,,,,,,,,,,', ',,13,,,,,13,,,,,,,,,15,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,15,,,,,,15,,,,,,,,,,,,,,15,,280,423,,,429,280,,,,,429,,,,,15,,,,,', '15,15,232,,,460,461,462,463,464,465,466,467,468,469,470,471,472,473', '474,475,476,477,478,479,480,481,,,,,482,,,,,,,280,280,,,,,,,,280,,15', ',,,,280,,280,,,280,280,,,,,,,,,,15,,,,,15,,,,,,,,,,,,,,,,,,,,,,529,', '530,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,280,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,280,', '429,429,429,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,280,,280,,280,,,,,,', ',,,,,,,,,280,,,,,,,,,429,689,,,,,,,,,,,280,,,280,,,,,,,,,,,,,,,,,,,', ',,,,,280,,,,,,,,,,,,,,,,,,,,,280,280,,,,,,,,,,280,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,280,429,280,,,,771,,,280,280,429,429,,,,429,429,,,,,,,', ',,,,,,,,,,,,,,,,280,,,280,,,,,,,,,,,,,,,,,,,280,,,,,,,,,,,,,,,,,280', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,280,,,,,,,,429', ',,,,,,,,,,,,429,429,429,429,,865,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,280,,,,,,,,,,,,,,,,,,280,429,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,280' ] racc_goto_table = arr = ::Array.new(3567, 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 = [ '34,32,77,56,63,64,64,141,29,32,81,81,96,29,11,39,39,39,104,73,73,101', '43,43,31,7,30,34,29,83,7,140,18,18,105,9,18,29,29,29,70,29,29,29,23', '23,70,42,45,25,25,36,36,25,73,73,73,21,68,68,58,170,78,78,78,71,84,29', '84,64,4,43,29,29,10,8,29,29,29,29,30,57,6,104,7,61,18,18,18,18,16,16', '158,78,99,99,100,67,67,176,46,2,158,25,25,25,25,52,79,79,123,123,79', '19,175,53,19,44,44,44,119,29,19,80,80,80,29,29,29,29,29,185,29,27,130', '4,134,12,7,27,132,181,118,128,5,116,135,7,161,7,163,163,163,163,80,80', '164,182,144,165,51,51,51,129,166,129,168,144,12,162,162,62,62,185,169', '174,178,179,167,83,48,1,69,37,74,26,76,24,119,20,17,15,82,13,94,95,98', '25,25,102,81,39,103,106,107,108,25,25,84,84,32,109,110,111,64,112,113', '29,29,29,29,29,29,29,114,2,182,115,29,29,29,134,120,140,126,133,136', '137,119,138,132,135,29,78,78,139,142,21,21,31,10,21,5,58,101,39,39,21', '129,43,43,58,130,170,39,143,30,116,145,147,46,128,185,31,119,10,148', '29,29,151,152,153,154,70,157,70,29,159,160,73,56,118,,32,34,,176,,81', '158,,,81,78,29,9,73,,29,104,32,78,29,29,34,18,175,61,132,,,7,176,43', ',31,,30,,29,181,,25,43,31,54,,,,29,32,10,,71,,,10,,,,57,70,105,25,129', '29,29,29,12,31,,4,,,80,104,8,32,,25,100,,80,6,52,,29,,163,52,163,,53', ',,123,129,53,129,10,10,54,29,,43,,,,30,176,64,51,43,32,,42,,,30,51,', '34,,83,54,58,,4,,,81,,45,,,,81,45,,117,,123,123,84,140,140,,81,43,43', ',39,30,,,9,,,,9,,64,,68,,,,129,,,11,,34,29,170,170,70,70,81,79,,70,70', ',175,,175,,,99,,,,56,,16,,,,,,56,67,,,,185,,,73,,81,39,,,,,73,,,,81', ',,29,64,25,175,175,,83,,29,,29,64,23,44,123,,29,,19,44,,,,,,29,,,19', '19,,,,19,19,,,,,173,173,173,9,,,27,27,,,54,27,27,,,,175,9,,81,39,,44', '36,,117,,81,117,101,39,,29,64,,29,,80,,64,,9,29,104,,70,,,,54,31,,29', '54,,,29,96,70,70,70,70,104,81,39,10,78,,10,54,64,,,,,54,,64,80,,,77', '99,34,,29,29,,,29,,141,56,,54,29,29,,,,29,29,,56,,99,7,34,73,,,,175', '81,21,9,81,,,73,,19,,68,21,21,34,63,,21,21,29,,,,,,70,27,,47,,29,,175', '47,175,,,,117,,117,,,16,,18,,34,47,,67,,54,,,,34,47,47,47,78,47,25,', ',,,80,,,,,,,,,,,,29,64,34,,,29,29,77,47,29,,77,,47,47,,,47,,29,,,,,175', ',122,,117,117,,,,10,,34,29,,,,,,43,,,,30,,,,,,10,,,,,,,54,,,47,,29,21', '18,47,47,47,47,47,50,47,,29,,50,,117,,117,,25,54,173,173,,173,173,,173', '50,,,,,10,,,,50,50,50,,50,29,,10,,29,,,34,,117,29,,,73,,,104,,,122,', '104,73,,29,50,124,,,124,50,50,,,50,,29,10,,,,29,,,,29,,29,29,,,,47,47', '47,47,47,47,47,,,,,47,47,47,,,,73,,,,177,10,,32,47,34,50,10,,,,50,50', '50,50,50,,50,,29,,,,29,,54,,,,,,173,173,173,173,,,,,47,47,81,39,,29', '54,,,47,29,64,,124,,,64,10,127,,127,,,,,29,,47,34,,,47,122,,,122,47', '122,10,122,,,,,,,,,60,125,125,125,,60,,,173,,,,,,47,50,50,50,50,50,50', '50,,,,,50,50,50,,47,47,47,60,60,60,,,177,,50,177,,177,,177,,,,,,47,', ',,,,,122,60,122,,122,127,122,,,47,,60,60,60,60,,,50,50,,,,,,,,50,,122', ',,,124,,,124,,124,,124,125,125,125,125,50,125,,,50,,,,,50,177,60,177', ',177,,177,,,,60,,60,,,,,,,,,,,,,50,47,,177,,,,,,,,,125,125,125,125,50', '50,50,,,,127,125,127,,127,124,,124,,124,,124,,,,50,,,,,,,,,,,,,,,47', '50,,124,127,,127,,,,47,,,,,,,,,,60,,,,,47,,,,,,,,,,,,,,,,,,,,60,,,,', ',,,,,,,,,,,,,127,,,,,,,,47,50,127,47,127,,127,,,,47,,,,,,,,,,47,,,,47', ',,,,,127,,59,,,,60,59,,,60,,,,60,60,,,,,,,50,47,47,,,47,,,,60,50,47', '47,59,59,59,47,47,,60,,,,,,50,,,,,,,,,,,60,60,,59,,,,,,,,,,59,59,59', '59,,,,,,,,,,,,,,,,,,,50,,,50,,,,,,,50,,,,,,,,,,50,,59,,50,,,,,,,59,', '59,,,47,,,,,47,47,,,47,,,,,,,,50,50,47,,50,,,,,,50,50,,,,50,50,,,47', ',,,,,,,,,,,,,,,,,,,,,75,,,,,,47,,,,,,,,,,,47,,,,,,,59,,,,,60,,,,,,,', '60,,,,,,,,60,,,47,59,,,47,,,,,,47,,,,,,,50,,,,,50,50,47,,50,,,,,,,,', '33,50,,,,33,47,,,,,,47,47,,,,60,50,,60,,,,,,,,59,,,,59,33,33,33,59,59', ',,,60,,,,,50,,,,,,,59,,,,50,,33,,47,,59,,,75,75,,33,33,33,,,60,,,,,', '59,59,47,,,,,47,50,,,,50,,,,,,50,,,,47,,,,,,,,,,50,33,,,60,,,,,,33,', '33,,,60,,50,,,,,,50,50,,,,,75,,75,,,75,75,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,60,,,,,60,,,50,60,22,,,,,22,,,,60,,,,,,,,,,50,,,,33,50,33,,,33,,,', ',22,33,,,,,50,,,,,,,,,33,,,,59,,60,,,,,22,59,,,,,60,,,59,22,,,,,,,,', ',,,,75,,,,,,,,,,,,,,,,,,60,,,,,,60,,,,33,,,22,33,,,,33,33,60,,22,59', '22,,59,,,,,,60,,,33,,60,,,,60,,60,60,33,,59,,,,,,,,,,,,,,,33,33,,,75', ',75,,75,,,28,,,,,28,,59,,,,,,,,60,,,,60,,,,,,,,,,,,,,28,75,,22,75,22', ',60,22,,,,60,,22,,59,,,,,,,,,,28,59,22,75,,,,,,,,,,,,,,,,,,,,,75,,,', ',,,,,,,,,,,,,,,,,,,,,,59,,,,28,59,,,,59,,,,28,22,28,,75,22,59,,,,22', ',,75,75,,,,,,,,,,,33,,,,,,,,33,,,22,,,,,33,,,,75,,,75,,,59,,22,22,,', ',,,,,59,,,,,75,,,,,,,,,,,,,,,,,75,,,28,,28,,,28,,,,33,59,28,33,,,,59', ',,,,,,,,28,,,,,59,,,33,,,,,,,33,,59,,,,,59,,,,59,75,59,59,,,,,,,,33', ',,,33,,,,,,33,33,,,,33,33,,,,,,,,,28,,,,28,,,,,28,,59,,,,59,,,,,,33', ',,,,,,,,,,33,,,28,59,22,,,,59,,,,,75,,,,,,28,28,,,,,,,,,,,75,,,,,,,', ',,,,,,,,,33,,,,,33,,,,33,,,,,,,,,,33,,,,,,,,22,,,22,,,,,,33,,,,,,,,', ',,,,,,22,,,,,,,,,,,,,33,,,,,,,,,,,33,,,,,22,,,,22,,,,,,22,22,,,,22,22', ',,,,,,,,,,,,,33,,,,,,33,,,,,,,,,,,,,28,33,,,,,,,,,,,,33,,,,,33,,,,33', ',33,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22,,,,,22,,,,22,,,33,,28,,33,28', ',22,,,,,,,,,,,,,,,,,22,33,28,,,,33,,,,,,,,,,,,,,,,,,,,,,22,,,28,,,,28', ',,,22,,28,28,,,,28,28,,,,,,,,,,,,,,,,,,,,,,,,,,,22,,,,,35,22,,,,,,,', '35,35,35,,,,22,,,,,,,35,35,,35,,,,,,,22,,,,22,,22,22,35,35,,,,,,,,,', ',,,,,,,28,,,,,28,,,,28,,,,,,,,,,28,,,,,,,,,,22,,,,,,,28,,,,,,,,,,,,', ',22,,,,,22,,,,,,,,,28,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',28,,,,,,28,,,,,,,,,,,,,,28,,35,35,,,35,35,,,,,35,,,,,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,,28,,,,,35,,35,,,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,,,,35,35,,,,', ',,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,35,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,35,,', ',,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,35' ] racc_goto_check = arr = ::Array.new(3567, 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, 181, 101, nil, 67, 139, 79, 25, 68, -296, 41, -518, -554, -616, nil, -315, 82, 181, -32, -98, 120, 37, 1756, -166, -23, -15, 60, -81, 1929, 8, -189, -406, -15, 1570, -19, 2587, -15, -398, nil, -14, nil, nil, 23, -194, 91, -220, -391, 693, -307, nil, 816, 131, 74, 82, 113, nil, -31, 46, -261, 1302, 1010, -278, 101, -68, -3, nil, nil, 89, 50, -225, -174, 24, nil, -15, 140, 1426, 126, -58, 33, -227, 94, -16, -292, -254, -430, nil, nil, nil, nil, nil, nil, nil, nil, nil, 122, 134, -50, nil, 133, -251, -624, -330, 130, -165, 15, -568, 131, 146, -127, 152, -386, -530, -156, -165, -379, -630, -691, -133, -420, -718, -566, nil, 71, -437, 177, 140, -564, 275, -655, -540, -530, nil, -558, -656, -755, -745, -107, -460, 176, -299, -312, -15, -572, -554, -325, 5, nil, -4, 2, nil, nil, -379, -632, -411, -531, nil, nil, 205, 11, 203, 203, 62, -220, -237, 69, 71, 75, -430, -443, -425, -282, nil, nil, 3, -528, -229, -604, 125, -523, -746, nil, -564, -771, nil, nil, -367 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 352, 297, nil, nil, 532, nil, 841, nil, 294, 295, nil, nil, nil, 11, 12, 18, 230, nil, nil, 14, nil, 417, 231, 325, nil, nil, 596, 229, 452, 21, nil, nil, 347, 22, 23, 24, nil, 685, nil, nil, nil, 314, nil, 25, 311, 431, 32, nil, nil, 34, 37, 36, nil, 226, 227, 364, nil, 132, 439, 131, 134, 77, 78, nil, 422, 92, 44, 47, 262, 286, nil, 810, 432, nil, 433, 444, 644, 495, 284, 270, 48, 49, 50, 51, 52, 53, 54, 55, 56, nil, 271, 62, nil, nil, nil, nil, nil, nil, 578, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 712, 560, nil, 713, 967, 868, 548, nil, 549, nil, nil, 550, nil, 552, nil, 797, nil, nil, nil, 558, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 443, nil, nil, 664, 658, nil, nil, nil, nil, 76, 79, 80, nil, nil, nil, nil, nil, 606, nil, nil, nil, nil, nil, nil, 825, 747, 547, nil, 551, 833, 563, 565, 566, 879, 569, 570, 880, 573, 576, 289 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 146, :_reduce_none, 2, 147, :_reduce_2, 0, 148, :_reduce_3, 1, 148, :_reduce_4, 3, 148, :_reduce_5, 2, 148, :_reduce_6, 1, 150, :_reduce_none, 2, 150, :_reduce_8, 3, 153, :_reduce_9, 4, 154, :_reduce_10, 2, 155, :_reduce_11, 0, 159, :_reduce_12, 1, 159, :_reduce_13, 3, 159, :_reduce_14, 2, 159, :_reduce_15, 1, 160, :_reduce_none, 2, 160, :_reduce_17, 0, 171, :_reduce_18, 4, 152, :_reduce_19, 3, 152, :_reduce_20, 3, 152, :_reduce_21, 3, 152, :_reduce_22, 2, 152, :_reduce_23, 3, 152, :_reduce_24, 3, 152, :_reduce_25, 3, 152, :_reduce_26, 3, 152, :_reduce_27, 3, 152, :_reduce_28, 4, 152, :_reduce_29, 1, 152, :_reduce_none, 3, 152, :_reduce_31, 3, 152, :_reduce_32, 3, 152, :_reduce_33, 1, 152, :_reduce_none, 3, 164, :_reduce_35, 3, 164, :_reduce_36, 6, 164, :_reduce_37, 5, 164, :_reduce_38, 5, 164, :_reduce_39, 5, 164, :_reduce_40, 5, 164, :_reduce_41, 3, 164, :_reduce_42, 1, 172, :_reduce_none, 3, 172, :_reduce_44, 1, 172, :_reduce_none, 1, 170, :_reduce_none, 3, 170, :_reduce_47, 3, 170, :_reduce_48, 3, 170, :_reduce_49, 2, 170, :_reduce_50, 1, 170, :_reduce_none, 1, 163, :_reduce_none, 0, 183, :_reduce_53, 3, 181, :_reduce_54, 1, 166, :_reduce_none, 1, 166, :_reduce_none, 1, 185, :_reduce_none, 4, 185, :_reduce_58, 0, 193, :_reduce_59, 4, 190, :_reduce_60, 1, 192, :_reduce_none, 2, 184, :_reduce_62, 3, 184, :_reduce_63, 4, 184, :_reduce_64, 5, 184, :_reduce_65, 4, 184, :_reduce_66, 5, 184, :_reduce_67, 2, 184, :_reduce_68, 2, 184, :_reduce_69, 2, 184, :_reduce_70, 2, 184, :_reduce_71, 2, 184, :_reduce_72, 1, 165, :_reduce_73, 3, 165, :_reduce_74, 1, 198, :_reduce_75, 3, 198, :_reduce_76, 1, 197, :_reduce_none, 2, 197, :_reduce_78, 3, 197, :_reduce_79, 5, 197, :_reduce_80, 2, 197, :_reduce_81, 4, 197, :_reduce_82, 2, 197, :_reduce_83, 4, 197, :_reduce_84, 1, 197, :_reduce_85, 3, 197, :_reduce_86, 1, 201, :_reduce_none, 3, 201, :_reduce_88, 2, 200, :_reduce_89, 3, 200, :_reduce_90, 1, 203, :_reduce_91, 3, 203, :_reduce_92, 1, 202, :_reduce_93, 1, 202, :_reduce_94, 4, 202, :_reduce_95, 3, 202, :_reduce_96, 3, 202, :_reduce_97, 3, 202, :_reduce_98, 3, 202, :_reduce_99, 2, 202, :_reduce_100, 1, 202, :_reduce_101, 1, 167, :_reduce_102, 1, 167, :_reduce_103, 4, 167, :_reduce_104, 3, 167, :_reduce_105, 3, 167, :_reduce_106, 3, 167, :_reduce_107, 3, 167, :_reduce_108, 2, 167, :_reduce_109, 1, 167, :_reduce_110, 1, 206, :_reduce_111, 1, 206, :_reduce_none, 2, 207, :_reduce_113, 1, 207, :_reduce_114, 3, 207, :_reduce_115, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 211, :_reduce_121, 1, 211, :_reduce_none, 1, 161, :_reduce_none, 1, 161, :_reduce_none, 1, 162, :_reduce_125, 0, 214, :_reduce_126, 4, 162, :_reduce_127, 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_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_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, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 3, 180, :_reduce_199, 3, 180, :_reduce_200, 6, 180, :_reduce_201, 5, 180, :_reduce_202, 5, 180, :_reduce_203, 5, 180, :_reduce_204, 5, 180, :_reduce_205, 4, 180, :_reduce_206, 3, 180, :_reduce_207, 3, 180, :_reduce_208, 3, 180, :_reduce_209, 2, 180, :_reduce_210, 2, 180, :_reduce_211, 3, 180, :_reduce_212, 3, 180, :_reduce_213, 3, 180, :_reduce_214, 3, 180, :_reduce_215, 3, 180, :_reduce_216, 3, 180, :_reduce_217, 4, 180, :_reduce_218, 2, 180, :_reduce_219, 2, 180, :_reduce_220, 3, 180, :_reduce_221, 3, 180, :_reduce_222, 3, 180, :_reduce_223, 3, 180, :_reduce_224, 1, 180, :_reduce_none, 3, 180, :_reduce_226, 3, 180, :_reduce_227, 3, 180, :_reduce_228, 3, 180, :_reduce_229, 3, 180, :_reduce_230, 2, 180, :_reduce_231, 2, 180, :_reduce_232, 3, 180, :_reduce_233, 3, 180, :_reduce_234, 3, 180, :_reduce_235, 3, 180, :_reduce_236, 3, 180, :_reduce_237, 6, 180, :_reduce_238, 1, 180, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 3, 217, :_reduce_244, 3, 217, :_reduce_245, 1, 220, :_reduce_none, 1, 221, :_reduce_none, 2, 221, :_reduce_none, 4, 221, :_reduce_249, 2, 221, :_reduce_250, 1, 215, :_reduce_none, 3, 215, :_reduce_252, 3, 226, :_reduce_253, 0, 227, :_reduce_254, 1, 227, :_reduce_none, 0, 175, :_reduce_256, 1, 175, :_reduce_none, 2, 175, :_reduce_none, 4, 175, :_reduce_259, 2, 175, :_reduce_260, 1, 196, :_reduce_261, 2, 196, :_reduce_262, 2, 196, :_reduce_263, 4, 196, :_reduce_264, 1, 196, :_reduce_265, 0, 230, :_reduce_266, 2, 189, :_reduce_267, 2, 229, :_reduce_268, 2, 228, :_reduce_269, 0, 228, :_reduce_270, 1, 223, :_reduce_271, 2, 223, :_reduce_272, 3, 223, :_reduce_273, 4, 223, :_reduce_274, 1, 169, :_reduce_275, 1, 169, :_reduce_none, 3, 168, :_reduce_277, 4, 168, :_reduce_278, 2, 168, :_reduce_279, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_290, 0, 252, :_reduce_291, 4, 218, :_reduce_292, 0, 253, :_reduce_293, 4, 218, :_reduce_294, 0, 254, :_reduce_295, 4, 218, :_reduce_296, 3, 218, :_reduce_297, 3, 218, :_reduce_298, 2, 218, :_reduce_299, 3, 218, :_reduce_300, 3, 218, :_reduce_301, 1, 218, :_reduce_302, 4, 218, :_reduce_303, 3, 218, :_reduce_304, 1, 218, :_reduce_305, 5, 218, :_reduce_306, 4, 218, :_reduce_307, 3, 218, :_reduce_308, 2, 218, :_reduce_309, 1, 218, :_reduce_none, 2, 218, :_reduce_311, 2, 218, :_reduce_312, 6, 218, :_reduce_313, 6, 218, :_reduce_314, 4, 218, :_reduce_315, 4, 218, :_reduce_316, 5, 218, :_reduce_317, 4, 218, :_reduce_318, 6, 218, :_reduce_319, 0, 255, :_reduce_320, 6, 218, :_reduce_321, 0, 256, :_reduce_322, 7, 218, :_reduce_323, 0, 257, :_reduce_324, 5, 218, :_reduce_325, 0, 258, :_reduce_326, 6, 218, :_reduce_327, 0, 259, :_reduce_328, 0, 260, :_reduce_329, 9, 218, :_reduce_330, 1, 218, :_reduce_331, 1, 218, :_reduce_332, 1, 218, :_reduce_333, 1, 218, :_reduce_334, 1, 174, :_reduce_none, 1, 195, :_reduce_336, 1, 244, :_reduce_none, 1, 244, :_reduce_none, 2, 244, :_reduce_339, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 245, :_reduce_none, 5, 245, :_reduce_343, 1, 157, :_reduce_none, 2, 157, :_reduce_345, 1, 247, :_reduce_none, 1, 247, :_reduce_none, 1, 261, :_reduce_348, 3, 261, :_reduce_349, 1, 264, :_reduce_350, 3, 264, :_reduce_351, 1, 263, :_reduce_none, 4, 263, :_reduce_353, 6, 263, :_reduce_354, 3, 263, :_reduce_355, 5, 263, :_reduce_356, 2, 263, :_reduce_357, 4, 263, :_reduce_358, 1, 263, :_reduce_359, 3, 263, :_reduce_360, 4, 265, :_reduce_361, 2, 265, :_reduce_362, 2, 265, :_reduce_363, 1, 265, :_reduce_364, 2, 270, :_reduce_365, 0, 270, :_reduce_366, 6, 271, :_reduce_367, 8, 271, :_reduce_368, 4, 271, :_reduce_369, 6, 271, :_reduce_370, 4, 271, :_reduce_371, 2, 271, :_reduce_none, 6, 271, :_reduce_373, 2, 271, :_reduce_374, 4, 271, :_reduce_375, 6, 271, :_reduce_376, 2, 271, :_reduce_377, 4, 271, :_reduce_378, 2, 271, :_reduce_379, 4, 271, :_reduce_380, 1, 271, :_reduce_none, 0, 275, :_reduce_382, 1, 275, :_reduce_383, 3, 276, :_reduce_384, 1, 276, :_reduce_385, 4, 276, :_reduce_386, 1, 277, :_reduce_387, 4, 277, :_reduce_388, 1, 278, :_reduce_389, 3, 278, :_reduce_390, 1, 279, :_reduce_391, 1, 279, :_reduce_none, 0, 283, :_reduce_393, 0, 284, :_reduce_394, 4, 243, :_reduce_395, 4, 281, :_reduce_396, 1, 281, :_reduce_397, 0, 287, :_reduce_398, 4, 282, :_reduce_399, 0, 288, :_reduce_400, 4, 282, :_reduce_401, 0, 290, :_reduce_402, 4, 286, :_reduce_403, 2, 186, :_reduce_404, 4, 186, :_reduce_405, 5, 186, :_reduce_406, 5, 186, :_reduce_407, 2, 242, :_reduce_408, 4, 242, :_reduce_409, 4, 242, :_reduce_410, 3, 242, :_reduce_411, 3, 242, :_reduce_412, 3, 242, :_reduce_413, 2, 242, :_reduce_414, 1, 242, :_reduce_415, 4, 242, :_reduce_416, 0, 292, :_reduce_417, 4, 241, :_reduce_418, 0, 293, :_reduce_419, 4, 241, :_reduce_420, 0, 294, :_reduce_421, 3, 191, :_reduce_422, 0, 295, :_reduce_423, 0, 296, :_reduce_424, 4, 289, :_reduce_425, 5, 246, :_reduce_426, 1, 297, :_reduce_427, 1, 297, :_reduce_none, 6, 156, :_reduce_429, 0, 156, :_reduce_430, 1, 298, :_reduce_431, 1, 298, :_reduce_none, 1, 298, :_reduce_none, 2, 299, :_reduce_434, 1, 299, :_reduce_none, 2, 158, :_reduce_436, 1, 158, :_reduce_none, 1, 231, :_reduce_none, 1, 231, :_reduce_none, 1, 231, :_reduce_none, 1, 232, :_reduce_441, 1, 301, :_reduce_442, 2, 301, :_reduce_443, 3, 302, :_reduce_444, 1, 302, :_reduce_445, 1, 302, :_reduce_446, 3, 233, :_reduce_447, 4, 234, :_reduce_448, 3, 235, :_reduce_449, 0, 306, :_reduce_450, 3, 306, :_reduce_451, 1, 307, :_reduce_452, 2, 307, :_reduce_453, 3, 237, :_reduce_454, 0, 309, :_reduce_455, 3, 309, :_reduce_456, 3, 236, :_reduce_457, 3, 238, :_reduce_458, 0, 310, :_reduce_459, 3, 310, :_reduce_460, 0, 311, :_reduce_461, 3, 311, :_reduce_462, 0, 303, :_reduce_463, 2, 303, :_reduce_464, 0, 304, :_reduce_465, 2, 304, :_reduce_466, 0, 305, :_reduce_467, 2, 305, :_reduce_468, 1, 308, :_reduce_469, 2, 308, :_reduce_470, 0, 313, :_reduce_471, 4, 308, :_reduce_472, 1, 312, :_reduce_473, 1, 312, :_reduce_474, 1, 312, :_reduce_475, 1, 312, :_reduce_none, 1, 212, :_reduce_477, 3, 213, :_reduce_478, 1, 300, :_reduce_479, 2, 300, :_reduce_480, 1, 216, :_reduce_481, 1, 216, :_reduce_482, 1, 216, :_reduce_483, 1, 216, :_reduce_484, 1, 204, :_reduce_485, 1, 204, :_reduce_486, 1, 204, :_reduce_487, 1, 204, :_reduce_488, 1, 204, :_reduce_489, 1, 205, :_reduce_490, 1, 205, :_reduce_491, 1, 205, :_reduce_492, 1, 205, :_reduce_493, 1, 205, :_reduce_494, 1, 205, :_reduce_495, 1, 205, :_reduce_496, 1, 239, :_reduce_497, 1, 239, :_reduce_498, 1, 173, :_reduce_499, 1, 173, :_reduce_500, 1, 178, :_reduce_501, 1, 178, :_reduce_502, 0, 314, :_reduce_503, 4, 248, :_reduce_504, 0, 248, :_reduce_505, 3, 250, :_reduce_506, 0, 316, :_reduce_507, 3, 250, :_reduce_508, 4, 315, :_reduce_509, 2, 315, :_reduce_510, 2, 315, :_reduce_511, 1, 315, :_reduce_512, 2, 318, :_reduce_513, 0, 318, :_reduce_514, 6, 285, :_reduce_515, 8, 285, :_reduce_516, 4, 285, :_reduce_517, 6, 285, :_reduce_518, 4, 285, :_reduce_519, 6, 285, :_reduce_520, 2, 285, :_reduce_521, 4, 285, :_reduce_522, 6, 285, :_reduce_523, 2, 285, :_reduce_524, 4, 285, :_reduce_525, 2, 285, :_reduce_526, 4, 285, :_reduce_527, 1, 285, :_reduce_528, 0, 285, :_reduce_529, 1, 280, :_reduce_530, 1, 280, :_reduce_531, 1, 280, :_reduce_532, 1, 280, :_reduce_533, 1, 262, :_reduce_none, 1, 262, :_reduce_535, 1, 320, :_reduce_536, 1, 321, :_reduce_537, 3, 321, :_reduce_538, 1, 272, :_reduce_539, 3, 272, :_reduce_540, 1, 322, :_reduce_541, 2, 323, :_reduce_542, 1, 323, :_reduce_543, 2, 324, :_reduce_544, 1, 324, :_reduce_545, 1, 266, :_reduce_546, 3, 266, :_reduce_547, 1, 317, :_reduce_548, 3, 317, :_reduce_549, 1, 325, :_reduce_none, 1, 325, :_reduce_none, 2, 267, :_reduce_552, 1, 267, :_reduce_553, 3, 326, :_reduce_554, 3, 327, :_reduce_555, 1, 273, :_reduce_556, 3, 273, :_reduce_557, 1, 319, :_reduce_558, 3, 319, :_reduce_559, 1, 328, :_reduce_none, 1, 328, :_reduce_none, 2, 274, :_reduce_562, 1, 274, :_reduce_563, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 2, 269, :_reduce_566, 2, 268, :_reduce_567, 0, 268, :_reduce_568, 1, 251, :_reduce_none, 3, 251, :_reduce_570, 0, 240, :_reduce_571, 2, 240, :_reduce_none, 1, 225, :_reduce_573, 3, 225, :_reduce_574, 3, 330, :_reduce_575, 2, 330, :_reduce_576, 4, 330, :_reduce_577, 2, 330, :_reduce_578, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 291, :_reduce_none, 1, 291, :_reduce_none, 1, 291, :_reduce_none, 1, 187, :_reduce_none, 1, 187, :_reduce_none, 1, 177, :_reduce_591, 1, 177, :_reduce_592, 0, 149, :_reduce_none, 1, 149, :_reduce_none, 0, 179, :_reduce_none, 1, 179, :_reduce_none, 2, 199, :_reduce_597, 2, 176, :_reduce_598, 0, 224, :_reduce_none, 1, 224, :_reduce_none, 1, 224, :_reduce_none, 1, 249, :_reduce_602, 1, 249, :_reduce_none, 1, 151, :_reduce_none, 2, 151, :_reduce_none, 0, 222, :_reduce_606 ] racc_reduce_n = 607 racc_shift_n = 1032 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tDSTAR => 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, :tREGEXP_OPT => 119, :tWORDS_BEG => 120, :tQWORDS_BEG => 121, :tSYMBOLS_BEG => 122, :tQSYMBOLS_BEG => 123, :tSTRING_DBEG => 124, :tSTRING_DVAR => 125, :tSTRING_END => 126, :tSTRING_DEND => 127, :tSTRING => 128, :tSYMBOL => 129, :tNL => 130, :tEH => 131, :tCOLON => 132, :tCOMMA => 133, :tSPACE => 134, :tSEMI => 135, :tLAMBDA => 136, :tLAMBEG => 137, :tCHARACTER => 138, :tRATIONAL => 139, :tIMAGINARY => 140, :tLABEL_END => 141, :tANDDOT => 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tDSTAR", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING_DEND", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tANDDOT", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "begin_block", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "lhs", "mrhs", "mrhs_arg", "expr", "@1", "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "opt_nl", "arg", "expr_value_do", "do", "@2", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "brace_body", "fcall", "@3", "operation", "k_return", "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", "@4", "arg_rhs", "simple_numeric", "rel_expr", "primary", "relop", "arg_value", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@5", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "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", "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@15", "@16", "f_args", "do_block", "@17", "@18", "do_body", "@19", "operation3", "@20", "@21", "@22", "@23", "@24", "cases", "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", "@25", "@26", "args_tail", "@27", "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", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], *val[1]) result end def _reduce_9(val, _values, result) result = val result end def _reduce_10(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :error, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_11(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_12(val, _values, result) result = [] result end def _reduce_13(val, _values, result) result = [ val[0] ] result end def _reduce_14(val, _values, result) result = val[0] << val[2] result end def _reduce_15(val, _values, result) result = [ val[1] ] result end # reduce 16 omitted def _reduce_17(val, _values, result) diagnostic :error, :begin_in_method, nil, val[0] result end def _reduce_18(val, _values, result) @lexer.state = :expr_fname result end def _reduce_19(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_20(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_21(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_22(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_23(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_24(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_25(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_26(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_27(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_28(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_29(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 30 omitted def _reduce_31(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_32(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_33(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end # reduce 34 omitted def _reduce_35(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_36(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_37(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_38(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_39(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_40(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_41(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_42(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end # reduce 43 omitted def _reduce_44(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end # reduce 45 omitted # reduce 46 omitted def _reduce_47(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_48(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_49(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_50(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) @lexer.cond.push(true) result end def _reduce_54(val, _values, result) @lexer.cond.pop result = [ val[1], val[2] ] result end # reduce 55 omitted # reduce 56 omitted # reduce 57 omitted def _reduce_58(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_59(val, _values, result) @context.push(:block) result end def _reduce_60(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end # reduce 61 omitted def _reduce_62(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_63(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_64(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_65(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_66(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_67(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_68(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_69(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_70(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_71(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_72(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_73(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_74(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_75(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_76(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 77 omitted def _reduce_78(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_79(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_80(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_81(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_82(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_83(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_84(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_85(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_86(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 87 omitted def _reduce_88(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_89(val, _values, result) result = [ val[0] ] result end def _reduce_90(val, _values, result) result = val[0] << val[1] result end def _reduce_91(val, _values, result) result = [ val[0] ] result end def _reduce_92(val, _values, result) result = val[0] << val[2] result end def _reduce_93(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_94(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_95(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_96(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_97(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_98(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_99(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_100(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_101(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_102(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_103(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_104(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_105(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_106(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_107(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_108(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_109(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_110(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_111(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 112 omitted def _reduce_113(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_114(val, _values, result) result = @builder.const(val[0]) result end def _reduce_115(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 116 omitted # reduce 117 omitted # reduce 118 omitted # reduce 119 omitted # reduce 120 omitted def _reduce_121(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 122 omitted # reduce 123 omitted # reduce 124 omitted def _reduce_125(val, _values, result) result = [ val[0] ] result end def _reduce_126(val, _values, result) @lexer.state = :expr_fname result end def _reduce_127(val, _values, result) result = val[0] << val[3] result end # 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 # reduce 197 omitted # reduce 198 omitted def _reduce_199(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_200(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_201(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_202(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_203(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_204(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_205(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_206(val, _values, result) const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) result end def _reduce_207(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.range_inclusive(val[0], val[1], nil) result end def _reduce_211(val, _values, result) result = @builder.range_exclusive(val[0], val[1], nil) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_214(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_215(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_218(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) result end def _reduce_219(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_220(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end # reduce 225 omitted def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_229(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_230(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_231(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_232(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_233(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_235(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_236(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_237(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_238(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 239 omitted # reduce 240 omitted # reduce 241 omitted # reduce 242 omitted # reduce 243 omitted def _reduce_244(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_245(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end # reduce 246 omitted # reduce 247 omitted # reduce 248 omitted def _reduce_249(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_250(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end # reduce 251 omitted def _reduce_252(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_253(val, _values, result) result = val result end def _reduce_254(val, _values, result) result = [ nil, [], nil ] result end # reduce 255 omitted def _reduce_256(val, _values, result) result = [] result end # reduce 257 omitted # reduce 258 omitted def _reduce_259(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_260(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_261(val, _values, result) result = [ val[0] ] result end def _reduce_262(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_263(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_264(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_265(val, _values, result) result = [ val[0] ] result end def _reduce_266(val, _values, result) # When branch gets invoked by RACC's lookahead # and command args start with '[' or '(' # we need to put `true` to the cmdarg stack # **before** `false` pushed by lexer # m [], n # ^ # Right here we have cmdarg [...0] because # lexer pushed it on '[' # We need to modify cmdarg stack to [...10] # # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack # and later lexer pushes corresponding bits on top of it. last_token = @last_token[0] lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.push(true) @lexer.cmdarg.push(top) else @lexer.cmdarg.push(true) end result end def _reduce_267(val, _values, result) # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) # but the push must be done after cmdarg.pop() in the parser. # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, # cmdarg.pop() to pop 1 pushed by command_args, # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. last_token = @last_token[0] lookahead = last_token == :tLBRACE_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.pop @lexer.cmdarg.push(top) else @lexer.cmdarg.pop end result = val[1] result end def _reduce_268(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_269(val, _values, result) result = [ val[1] ] result end def _reduce_270(val, _values, result) result = [] result end def _reduce_271(val, _values, result) result = [ val[0] ] result end def _reduce_272(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_273(val, _values, result) result = val[0] << val[2] result end def _reduce_274(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_275(val, _values, result) result = @builder.array(nil, val[0], nil) result end # reduce 276 omitted def _reduce_277(val, _values, result) result = val[0] << val[2] result end def _reduce_278(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_279(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end # reduce 280 omitted # reduce 281 omitted # reduce 282 omitted # reduce 283 omitted # reduce 284 omitted # reduce 285 omitted # reduce 286 omitted # reduce 287 omitted # reduce 288 omitted # reduce 289 omitted def _reduce_290(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_291(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_292(val, _values, result) @lexer.cmdarg.pop result = @builder.begin_keyword(val[0], val[2], val[3]) result end def _reduce_293(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_294(val, _values, result) result = @builder.begin(val[0], val[1], val[3]) result end def _reduce_295(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_296(val, _values, result) result = @builder.begin(val[0], nil, val[3]) result end def _reduce_297(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_298(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_299(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_300(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_301(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_302(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_303(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_304(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_305(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_306(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_307(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_308(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_309(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 310 omitted def _reduce_311(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_312(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_313(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_314(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) result end def _reduce_315(val, _values, result) result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) result end def _reduce_316(val, _values, result) result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) result end def _reduce_317(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_318(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_319(val, _values, result) result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) result end def _reduce_320(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:class) result end def _reduce_321(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_322(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:sclass) result end def _reduce_323(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_324(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) result end def _reduce_325(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.cmdarg.pop @static_env.unextend result end def _reduce_326(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:def) result end def _reduce_327(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_328(val, _values, result) @lexer.state = :expr_fname result end def _reduce_329(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:defs) result end def _reduce_330(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_331(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_332(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_333(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_334(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 335 omitted def _reduce_336(val, _values, result) if @context.in_class? diagnostic :error, :invalid_return, nil, val[0] end result end # reduce 337 omitted # reduce 338 omitted def _reduce_339(val, _values, result) result = val[1] result end # reduce 340 omitted # reduce 341 omitted # reduce 342 omitted def _reduce_343(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 344 omitted def _reduce_345(val, _values, result) result = val result end # reduce 346 omitted # reduce 347 omitted def _reduce_348(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_349(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_350(val, _values, result) result = [ val[0] ] result end def _reduce_351(val, _values, result) result = val[0] << val[2] result end # reduce 352 omitted def _reduce_353(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])) result end def _reduce_354(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) result end def _reduce_355(val, _values, result) result = val[0]. push(@builder.restarg(val[2])) result end def _reduce_356(val, _values, result) result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) result end def _reduce_357(val, _values, result) result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_358(val, _values, result) result = [ @builder.restarg(val[0], val[1]), *val[3] ] result end def _reduce_359(val, _values, result) result = [ @builder.restarg(val[0]) ] result end def _reduce_360(val, _values, result) result = [ @builder.restarg(val[0]), *val[2] ] result end def _reduce_361(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_362(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_363(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_364(val, _values, result) result = [ val[0] ] result end def _reduce_365(val, _values, result) result = val[1] result end def _reduce_366(val, _values, result) result = [] result end def _reduce_367(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_368(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_369(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_370(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_371(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 372 omitted def _reduce_373(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_374(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_375(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_376(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_377(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_378(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_379(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_380(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 381 omitted def _reduce_382(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_383(val, _values, result) @lexer.state = :expr_value result end def _reduce_384(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_385(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_386(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_387(val, _values, result) result = [] result end def _reduce_388(val, _values, result) result = val[2] result end def _reduce_389(val, _values, result) result = [ val[0] ] result end def _reduce_390(val, _values, result) result = val[0] << val[2] result end def _reduce_391(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 392 omitted def _reduce_393(val, _values, result) @static_env.extend_dynamic result end def _reduce_394(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_395(val, _values, result) @lexer.cmdarg.pop result = [ val[1], val[3] ] @static_env.unextend result end def _reduce_396(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_397(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_398(val, _values, result) @context.push(:lambda) result end def _reduce_399(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_400(val, _values, result) @context.push(:lambda) result end def _reduce_401(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_402(val, _values, result) @context.push(:block) result end def _reduce_403(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_404(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_405(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_406(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_407(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_408(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_409(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_410(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_411(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_412(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_413(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_414(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_415(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_416(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_417(val, _values, result) @context.push(:block) result end def _reduce_418(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_419(val, _values, result) @context.push(:block) result end def _reduce_420(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_421(val, _values, result) @static_env.extend_dynamic result end def _reduce_422(val, _values, result) result = [ val[1], val[2] ] @static_env.unextend result end def _reduce_423(val, _values, result) @static_env.extend_dynamic result end def _reduce_424(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_425(val, _values, result) result = [ val[2], val[3] ] @static_env.unextend @lexer.cmdarg.pop result end def _reduce_426(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_427(val, _values, result) result = [ val[0] ] result end # reduce 428 omitted def _reduce_429(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_430(val, _values, result) result = [] result end def _reduce_431(val, _values, result) result = [ val[0] ] result end # reduce 432 omitted # reduce 433 omitted def _reduce_434(val, _values, result) result = [ val[0], val[1] ] result end # reduce 435 omitted def _reduce_436(val, _values, result) result = [ val[0], val[1] ] result end # reduce 437 omitted # reduce 438 omitted # reduce 439 omitted # reduce 440 omitted def _reduce_441(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_442(val, _values, result) result = [ val[0] ] result end def _reduce_443(val, _values, result) result = val[0] << val[1] result end def _reduce_444(val, _values, result) string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_445(val, _values, result) string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_446(val, _values, result) result = @builder.character(val[0]) result end def _reduce_447(val, _values, result) string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_448(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_449(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_450(val, _values, result) result = [] result end def _reduce_451(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_452(val, _values, result) result = [ val[0] ] result end def _reduce_453(val, _values, result) result = val[0] << val[1] result end def _reduce_454(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_455(val, _values, result) result = [] result end def _reduce_456(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_457(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_458(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_459(val, _values, result) result = [] result end def _reduce_460(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_461(val, _values, result) result = [] result end def _reduce_462(val, _values, result) result = val[0] << @builder.symbol_internal(val[1]) result end def _reduce_463(val, _values, result) result = [] result end def _reduce_464(val, _values, result) result = val[0] << val[1] result end def _reduce_465(val, _values, result) result = [] result end def _reduce_466(val, _values, result) result = val[0] << val[1] result end def _reduce_467(val, _values, result) result = [] result end def _reduce_468(val, _values, result) result = val[0] << val[1] result end def _reduce_469(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_470(val, _values, result) result = val[1] result end def _reduce_471(val, _values, result) @lexer.cmdarg.push(false) @lexer.cond.push(false) result end def _reduce_472(val, _values, result) @lexer.cmdarg.pop @lexer.cond.pop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_473(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_474(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_475(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 476 omitted def _reduce_477(val, _values, result) @lexer.state = :expr_end result = @builder.symbol(val[0]) result end def _reduce_478(val, _values, result) @lexer.state = :expr_end result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_479(val, _values, result) result = val[0] result end def _reduce_480(val, _values, result) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end result end def _reduce_481(val, _values, result) @lexer.state = :expr_end result = @builder.integer(val[0]) result end def _reduce_482(val, _values, result) @lexer.state = :expr_end result = @builder.float(val[0]) result end def _reduce_483(val, _values, result) @lexer.state = :expr_end result = @builder.rational(val[0]) result end def _reduce_484(val, _values, result) @lexer.state = :expr_end result = @builder.complex(val[0]) result end def _reduce_485(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_486(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_487(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_488(val, _values, result) result = @builder.const(val[0]) result end def _reduce_489(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_490(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_491(val, _values, result) result = @builder.self(val[0]) result end def _reduce_492(val, _values, result) result = @builder.true(val[0]) result end def _reduce_493(val, _values, result) result = @builder.false(val[0]) result end def _reduce_494(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_495(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_496(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_497(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_498(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_499(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_500(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_501(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_502(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_503(val, _values, result) @lexer.state = :expr_value result end def _reduce_504(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_505(val, _values, result) result = nil result end def _reduce_506(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_507(val, _values, result) result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_508(val, _values, result) @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) result end def _reduce_509(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_510(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_511(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_512(val, _values, result) result = [ val[0] ] result end def _reduce_513(val, _values, result) result = val[1] result end def _reduce_514(val, _values, result) result = [] result end def _reduce_515(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_516(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_517(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_518(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_519(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_520(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_521(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_522(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_523(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_524(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_525(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_526(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_527(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_528(val, _values, result) result = val[0] result end def _reduce_529(val, _values, result) result = [] result end def _reduce_530(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_531(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_532(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_533(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 534 omitted def _reduce_535(val, _values, result) @static_env.declare val[0][0] result = val[0] result end def _reduce_536(val, _values, result) result = val[0] result end def _reduce_537(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_538(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_539(val, _values, result) result = [ val[0] ] result end def _reduce_540(val, _values, result) result = val[0] << val[2] result end def _reduce_541(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] result end def _reduce_542(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_543(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_544(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_545(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_546(val, _values, result) result = [ val[0] ] result end def _reduce_547(val, _values, result) result = val[0] << val[2] result end def _reduce_548(val, _values, result) result = [ val[0] ] result end def _reduce_549(val, _values, result) result = val[0] << val[2] result end # reduce 550 omitted # reduce 551 omitted def _reduce_552(val, _values, result) @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] result end def _reduce_553(val, _values, result) result = [ @builder.kwrestarg(val[0]) ] result end def _reduce_554(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_555(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_556(val, _values, result) result = [ val[0] ] result end def _reduce_557(val, _values, result) result = val[0] << val[2] result end def _reduce_558(val, _values, result) result = [ val[0] ] result end def _reduce_559(val, _values, result) result = val[0] << val[2] result end # reduce 560 omitted # reduce 561 omitted def _reduce_562(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_563(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 564 omitted # reduce 565 omitted def _reduce_566(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_567(val, _values, result) result = [ val[1] ] result end def _reduce_568(val, _values, result) result = [] result end # reduce 569 omitted def _reduce_570(val, _values, result) result = val[1] result end def _reduce_571(val, _values, result) result = [] result end # reduce 572 omitted def _reduce_573(val, _values, result) result = [ val[0] ] result end def _reduce_574(val, _values, result) result = val[0] << val[2] result end def _reduce_575(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_576(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end def _reduce_577(val, _values, result) result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) result end def _reduce_578(val, _values, result) result = @builder.kwsplat(val[0], val[1]) result end # reduce 579 omitted # reduce 580 omitted # reduce 581 omitted # reduce 582 omitted # reduce 583 omitted # reduce 584 omitted # reduce 585 omitted # reduce 586 omitted # reduce 587 omitted # reduce 588 omitted # reduce 589 omitted # reduce 590 omitted def _reduce_591(val, _values, result) result = [:dot, val[0][1]] result end def _reduce_592(val, _values, result) result = [:anddot, val[0][1]] result end # reduce 593 omitted # reduce 594 omitted # reduce 595 omitted # reduce 596 omitted def _reduce_597(val, _values, result) result = val[1] result end def _reduce_598(val, _values, result) result = val[1] result end # reduce 599 omitted # reduce 600 omitted # reduce 601 omitted def _reduce_602(val, _values, result) yyerrok result end # reduce 603 omitted # reduce 604 omitted # reduce 605 omitted def _reduce_606(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby26 end # module Parser parser-2.7.0.2/lib/parser/ruby20.rb0000644000004100000410000075506713617025313016743 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby20 < Parser::Base def version 20 end def default_encoding Encoding::UTF_8 end ##### State transition tables begin ### clist = [ '-569,265,563,-488,265,-100,-101,-569,-569,-569,-286,563,-569,-569,-569', '482,-569,265,214,605,-103,235,563,385,-481,-569,-569,-569,-569,607,584', '-481,-102,-103,573,-98,-569,-569,-101,-569,-569,-569,-569,-569,563,563', '-487,110,-100,574,-286,-102,109,232,211,212,-99,234,233,215,803,-106', '569,-99,-105,260,-569,-569,-569,-569,-569,-569,-569,-569,-569,-569,-569', '-569,-569,-569,965,684,-569,-569,-569,604,770,-569,264,-92,-569,264', '-104,-569,-569,606,-569,-565,-569,-98,-569,511,-569,-569,264,-569,-569', '-569,-569,-569,-289,-569,-569,-569,-91,-92,967,-289,-289,-289,110,713', '713,-289,-289,109,-289,-569,-565,110,-569,-569,-569,-569,109,-569,583', '-569,-103,-102,110,-93,-94,-103,-89,109,-289,-289,215,-289,-289,-289', '-289,-289,-105,-92,-101,-566,-94,110,609,-101,110,110,109,837,-100,109', '109,-102,-97,-100,-90,-96,-102,713,-289,-289,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,683,768,-289,-289,-289,-92,625,612', '-92,-263,-289,-95,769,-289,-92,754,211,212,-289,110,-289,592,-289,-289', '109,-289,-289,-289,-289,-289,-289,-289,969,-289,-94,110,110,-289,-289', '-289,109,109,-289,-289,-289,642,-289,-289,211,212,-289,-289,642,-95', '-101,-289,-289,-289,-289,-104,211,212,-91,265,614,-103,-289,-289,-100', '-289,-289,-289,-289,-289,-94,-473,855,-94,511,215,641,592,-473,-94,642', '594,593,641,-562,110,524,440,618,526,109,747,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,-289,-289,110,619,-289,-289,-289', '109,771,-289,642,641,-289,-488,260,-289,-289,-96,-289,260,-289,-100', '-289,-105,-289,-289,-563,-289,-289,-289,-289,-289,-473,-289,215,-289', '-106,594,593,-473,592,215,264,629,-562,641,215,745,-473,-289,-569,592', '-289,-289,-289,-289,-473,-289,575,-289,-90,-104,576,-473,-473,-473,-99', '-562,-473,-473,-473,702,-473,542,541,540,632,543,-476,79,-473,-480,-473', '-473,-473,-476,832,803,-480,-411,-563,80,-473,-473,-476,-473,-473,-473', '-473,-473,257,81,-569,207,594,593,599,258,215,-569,208,973,969,-563', '-565,594,593,595,-569,206,559,558,-473,-473,-473,-473,-473,-473,-473', '-473,-473,-473,-473,-473,-473,-473,235,-569,-473,-473,-473,-411,-473', '-473,592,-84,-473,620,-411,-473,-473,-70,-473,828,-473,235,-473,-411', '-473,-473,-569,-473,-473,-473,-473,-473,235,-473,702,-473,542,541,540', '592,543,-476,-411,592,-484,110,592,235,-476,-473,109,-484,-473,-473', '-473,-473,-476,-473,215,-473,-92,-473,215,-476,-476,-476,-101,-487,-476', '-476,-476,118,-476,215,594,593,597,-84,-569,257,-476,-479,-476,-476', '-476,-569,258,660,-479,980,-565,215,-476,-476,-569,-476,-476,-476,-476', '-476,621,110,517,594,593,603,109,594,593,608,594,593,590,-569,-89,929', '950,542,541,540,-98,543,-476,-476,-476,-476,-476,-476,-476,-476,-476', '-476,-476,-476,-476,-476,211,212,-476,-476,-476,571,-476,-476,579,235', '-476,-94,572,-476,-476,932,-476,-103,-476,209,-476,570,-476,-476,580', '-476,-476,-476,-476,-476,981,-476,671,-476,784,-478,542,541,540,785', '543,232,-478,110,894,234,233,-476,109,551,-476,-476,-476,-476,-569,-476', '894,-476,579,-476,894,-569,-569,-569,986,578,-97,-569,-569,-290,-569', '547,-106,110,580,677,-290,-483,109,-569,556,555,559,558,-483,-290,524', '552,678,523,-569,-569,-482,-569,-569,-569,-569,-569,524,-482,680,526', '545,-289,542,541,540,549,543,524,-289,952,526,215,686,-566,689,551,690', '-289,-569,-569,-569,-569,-569,-569,-569,-569,-569,-569,-569,-569,-569', '-569,692,549,-569,-569,-569,547,626,211,212,694,-569,551,696,-569,556', '555,559,558,-569,705,-569,552,-569,-569,785,-569,-569,-569,-569,-569', '-290,-569,-569,-569,551,706,702,-290,542,541,540,-279,543,707,559,558', '-290,-569,-279,552,-569,-569,313,-93,709,-569,569,-279,716,-102,286', '69,70,71,9,57,106,559,558,63,64,744,552,698,67,748,65,66,68,30,31,72', '73,113,114,115,116,117,29,28,27,98,97,99,100,749,702,19,542,541,540', '-264,543,8,45,288,10,102,101,103,92,56,94,93,95,755,96,104,105,-566', '90,91,42,43,41,702,473,542,541,540,-565,543,677,698,473,702,-485,542', '541,540,393,543,701,-485,40,395,394,33,211,212,58,59,-485,969,60,929', '35,542,541,540,44,543,698,312,702,215,542,541,540,20,543,899,698,773', '89,79,82,83,254,84,86,85,87,314,315,832,803,80,88,286,69,70,71,9,57', '62,484,81,63,64,486,698,796,67,671,65,66,68,30,31,72,73,113,114,115', '116,117,29,28,27,98,97,99,100,235,702,19,542,541,540,215,543,8,45,288', '10,102,101,103,92,56,94,93,95,260,96,104,105,260,90,91,42,43,41,235', '671,232,235,-486,502,234,233,698,230,231,-486,503,506,507,235,803,701', '215,40,-486,501,33,215,952,58,59,-279,826,60,215,35,232,803,-279,44', '234,233,836,230,231,739,740,-279,20,741,104,105,215,89,79,82,83,215', '84,86,85,87,254,1005,845,-265,80,88,286,69,70,71,9,57,62,1006,81,63', '64,1007,854,969,67,969,65,66,68,30,31,72,73,113,114,115,116,117,29,28', '27,98,97,99,100,969,702,19,542,541,540,215,543,8,45,288,10,102,101,103', '92,56,94,93,95,857,96,104,105,689,90,91,42,43,41,235,702,978,542,541', '540,860,543,698,979,862,864,866,215,514,868,249,250,977,40,869,515,33', '872,874,58,59,875,671,60,438,35,232,877,238,44,234,233,698,230,231,210', '-263,236,20,237,881,883,886,89,79,82,83,689,84,86,85,87,888,890,892', '894,80,88,286,69,70,71,9,57,62,894,81,63,64,215,900,902,67,904,65,66', '68,30,31,72,73,205,204,396,203,439,29,28,27,98,97,99,100,441,442,19', '910,214,913,215,916,8,45,288,10,102,101,103,92,56,94,93,95,-266,96,104', '105,894,90,91,42,43,41,235,-588,-588,-588,-588,241,243,-486,579,-588', '-588,-485,952,926,-486,932,249,250,-485,40,933,934,33,-486,580,58,59', '-485,943,60,944,35,232,473,238,44,234,233,569,230,231,242,240,236,20', '237,484,486,952,89,79,82,83,954,84,86,85,87,493,-69,383,215,80,88,286', '69,70,71,9,57,62,496,81,63,64,497,955,504,67,269,65,66,68,30,31,72,73', '215,260,508,512,513,29,28,27,98,97,99,100,235,960,19,215,527,528,486', '689,8,45,288,10,102,101,103,92,56,94,93,95,963,96,104,105,,90,91,42', '43,41,235,-588,-588,-588,-588,241,243,-290,-289,-588,-588,436,,,-290', '-289,249,250,437,40,-566,,290,-290,-289,58,59,438,,60,,35,232,,238,44', '234,233,,230,231,242,240,236,20,237,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,235,-588,-588,-588,-588,241,243,-332', '-289,-588,-588,,,,-332,-289,249,250,,40,-566,,290,-332,-289,58,59,,', '60,,35,232,,238,44,234,233,,230,231,242,240,236,20,237,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101', '103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,235,239,244,245,246,241', '243,251,,247,248,,,,,,249,250,,40,,,33,,,58,59,,,60,,35,232,,238,44', '234,233,,230,231,242,240,236,20,237,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,235,-588,-588,-588,-588,241,243,,,-588', '-588,,,,,,249,250,,40,,,33,,,58,59,,,60,,35,232,,238,44,234,233,,230', '231,242,240,236,20,237,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69', '70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98', '97,99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,235,,,,,,,,,,,,,,,,249,250,,40,,,33,,,58,59,,,60,,35', '232,,238,44,234,233,,230,231,,,236,20,237,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94', '93,95,,96,104,105,,90,91,42,43,41,235,239,244,245,246,241,243,251,252', '247,248,,-588,-588,,,249,250,,40,,,33,,,58,59,,,60,,35,232,,238,44,234', '233,,230,231,242,240,236,20,237,,,,89,79,82,83,,84,86,85,87,,,,,80,88', '286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28', '27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93,95,,96', '104,105,,90,91,42,43,41,235,239,244,245,246,241,243,251,252,247,248', ',-588,-588,,,249,250,,40,,,33,,,58,59,,,60,,35,232,,238,44,234,233,', '230,231,242,240,236,20,237,,,,89,79,82,83,,84,86,85,87,,,,,80,88,5,69', '70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98', '97,99,100,,,19,,,,,,8,45,7,10,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,235,239,244,245,246,241,243,,,247,248,,,,,,249,250,', '40,,,33,,,58,59,,,60,,35,232,,238,44,234,233,,230,231,242,240,236,20', '237,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70,71,9,57,62,,81,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,', '8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,235', '-588,-588,-588,-588,241,243,,,-588,-588,,,,,,249,250,,40,,,33,,,58,59', ',,60,,35,232,,238,44,234,233,,230,231,242,240,236,20,237,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,5,69,70,71,9,57,62,,81,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,7,10,102,101', '103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,235,,,,,,,,,,,,,,,,249', '250,,40,,,33,,,58,59,,,60,,35,232,,238,44,234,233,,230,231,,,236,20', '237,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70,71,9,57,62,,81,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,', '8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,235', ',,,,,,,,,,,,,,,249,250,,40,,,33,,,58,59,,,60,,35,232,,238,44,234,233', ',230,231,,,236,20,237,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70', '71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97', '99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,235,-588,-588,-588,-588,241,243,,,-588,-588,,,,,,249', '250,,40,,,33,,,58,59,,,60,,35,232,,238,44,234,233,,230,231,242,240,236', '20,237,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70,71,9,57,62,,81', '63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,', ',,,8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41', '235,,,,,,,,,,,,,,,,249,250,,40,,,290,,,58,59,,,60,,35,232,,238,44,234', '233,,230,231,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70', '71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97', '99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,235,,,,,,,,,,,,,,,,249,250,,40,,,33,,,58,59,,,60,,35', '232,,238,44,234,233,,230,231,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,235,,,,,,,,,,,,,,,,249,250,,40,,,33,', ',58,59,,,60,,35,232,,,44,234,233,,230,231,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93,95', ',96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60', ',35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70', '71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97', '99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,', ',,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,5,69,70,71,9,57,62,', '81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19', ',,,,,8,45,7,10,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41', ',,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,286,69,70,71,9,57,62,,81,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,288', '10,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,', ',,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101', '103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40', ',,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,98,97,99,100,,,19,,,,,630,8,45,288,10,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,42,43,41,235,239,244,245,246,241,243,251', '252,247,248,,228,229,,,249,250,,40,,,33,,,58,59,,,60,,35,232,,238,44', '234,233,,230,231,242,240,236,20,237,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,,253,-571,-240,,,62,,81,-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,-570,-571,,-571,,,,-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,-280', '-570,,-570,,,,-280,-280,-280,,,-280,-280,-280,,-280,,,,,,,,,,-280,-280', '-280,,,,,,,,-280,-280,,-280,-280,-280,-280,-280,,,,,,,,,,,,,,,,,,,,', ',,-280,-280,-280,-280,-280,-280,-280,-280,-280,-280,-280,-280,-280,-280', ',,-280,-280,-280,,,-280,,,-280,,,-280,-280,,-280,,-280,,-280,,-280,-280', ',-280,-280,-280,-280,-280,,-280,,-280,,,,,,,,,,,,,,-280,,,-280,-280', '-280,-280,,-280,,-280,286,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,286,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,98,97,99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93,95', ',96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60', ',35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70', '71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97', '99,100,,,19,,,,,,8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,', ',,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70,71,9,57,62', ',81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19', ',,,,,8,45,288,10,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43', '41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,286,69,70,71,9,57,62,,81,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45', '288,10,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,', ',,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103,92', '56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226', ',,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28', '27,98,97,99,100,,,19,,,,,,8,45,7,10,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44', ',,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,', '81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227', ',,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,', ',,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103', '92,56,94,93,95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220', ',,226,,,58,59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56', '94,93,95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226', ',,58,59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58', '59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,', ',,301,302,308,98,97,99,100,,,227,,,,,,,303,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,,,309,,,,,,,,,,,,,,,,,,,,299,,,295,,,58,59,,,60', ',294,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,', '57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97', '99,100,,,227,,,,,615,,303,,,102,101,103,92,56,94,93,95,,96,104,105,', '90,91,,,309,235,239,244,245,246,241,243,251,252,247,248,,228,229,,,249', '250,,299,,,226,,,58,59,,,60,,,232,,238,,234,233,,230,231,242,240,236', ',237,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,253,,311,,,62,,81,69,70', '71,,57,,,,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97', '99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91', '42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,', ',67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,', ',,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,', ',,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68', '305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101', '103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220', ',,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,', ',,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58', '59,,,60,,278,,,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301', '302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,280', '96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60', ',,,,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70', '71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97', '99,100,,,19,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91', '42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,', ',102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,', ',,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,630,,45,,,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,42,43,41,235,239,244,245,246,241,243,251', '252,247,248,,228,229,,,249,250,,220,,,226,,,58,59,,,60,,,232,,238,44', '234,233,,230,231,242,240,236,20,237,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,110,253,,,,109,62,,81,69,70,71,,57,,,,63,64,,,,67,,65,66,68,305', '306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,303,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,,,309,,,,,,,,,,,,,,,,,,,,345,,,33', ',,58,59,,,60,,35,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302', '308,98,97,99,100,,,227,,,,,,,303,,,102,101,103,350,56,94,93,351,,96', '104,105,,90,91,,,309,,,,,,,,,,,,,,,,,357,,,352,,,226,,,58,59,,,60,,', ',,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100', ',,227,,,,,,,303,,,102,101,103,350,56,94,93,351,,96,104,105,,90,91,,', '309,,,,,,,,,,,,,,,,,,,,352,,,226,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,9,57,62,,81,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,7,10,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,235,239,244,245,246', '241,243,251,252,247,248,,228,229,,,249,250,,40,,,33,,,58,59,,,60,,35', '232,,238,44,234,233,,230,231,242,240,236,20,237,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,253,,,,385,62,,81,69,70,71,,57,,,,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,', '81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19', ',,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,', ',,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,69,70,71,9,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,', '29,28,27,98,97,99,100,,,19,,,,,,8,45,,10,102,101,103,92,56,94,93,95', ',96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60', ',35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71', ',57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99', '100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42', '43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,401,,,,44,,,,,,,,,225', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,', ',,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92', '56,94,93,95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94', '93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58', '59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', '69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,401,,,,44', ',,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19', ',,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,', ',,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,215,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100', ',,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43', '41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67', ',65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,', ',,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305', '306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,', ',,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59', ',,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69', '70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308', '98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,', ',,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81', '63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,', '227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41', ',,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65', '66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,', ',,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72', '73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,', '58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302', '308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100', ',,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43', '41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67', ',65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,', ',,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305', '306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,', ',,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59', ',,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69', '70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308', '98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,', ',,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81', '63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,', '227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41', ',,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65', '66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,', ',,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72', '73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,', '58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302', '308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100', ',,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43', '41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67', ',65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,', ',,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305', '306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,', ',,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59', ',,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69', '70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308', '98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,', ',,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81', '63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,', '227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41', ',,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65', '66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,', ',,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72', '73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,', '58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302', '308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227', ',,,,,,45,,,102,101,103,92,56,94,93,95,280,96,104,105,,90,91,42,43,41', ',,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,278,,276,,44,,,281,,,,,,225', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,280,96,104,105,,90,91,42,43,41,,,,,,,,', ',,,,,,,,,,,220,,,226,,,58,59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101', '103,92,56,94,93,95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,', ',220,,,226,,,58,59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,215,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68', '305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101', '103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220', ',,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,', ',,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59', ',,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69', '70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308', '98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,', ',,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81', '63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,', '227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41', ',,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,9,57,62,,81,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45,,10,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,', ',,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73', ',,,,,301,302,308,98,97,99,100,,,227,,,,,,,303,,,102,101,103,92,56,94', '93,95,,96,104,105,,90,91,,,309,235,239,244,245,246,241,243,251,252,247', '248,,228,229,,,249,250,,299,,,226,,,58,59,,,60,,,232,,238,,234,233,', '230,231,242,240,236,,237,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,253', ',499,,,62,,81,69,70,71,,57,,,,63,64,,,,67,,65,66,68,305,306,72,73,,', ',,,301,302,308,98,97,99,100,,,227,,,,,,,303,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,,,309,,,,,,,,,,,,,,,,,,,,299,,,295,,,58,59,,,60', ',,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57', '62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99', '100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42', '43,41,,,,,,,,,,,,,,,,,,,,220,,,226,517,,58,59,,,60,,,,,,44,,,,,,,,,225', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,', ',102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,', ',,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103,92,56,94', '93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58', '59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69', '70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98', '97,99,100,,,19,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90', '91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,', ',,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,', ',45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,', ',,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,', '58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302', '308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227', ',,,,,,45,,,102,101,103,92,56,94,93,95,280,96,104,105,,90,91,42,43,41', ',,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,278,,276,,44,,,281,,,,,,225', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,', ',67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,', ',,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,', ',,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68', '305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101', '103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220', ',,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,', ',,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59', ',,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69', '70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308', '98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,280,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,654,', '276,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70', '71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98', '97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,280,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,276,,44', ',,281,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57', '62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99', '100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42', '43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,9,57,62,,81,63,64,', ',,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,8,45', '288,10,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,235,239', '244,245,246,241,243,251,252,247,248,,228,229,,,249,250,,40,,,33,,,58', '59,,,60,,35,232,,238,44,234,233,,230,231,242,240,236,20,237,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,253,,,,385,62,,81,69,70,71,,57,,,,63,64', ',,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,', ',,,,303,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,,,309,,,,,,', ',,,,,,,,,,,,,299,,,295,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92', '56,94,93,95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72', '73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,303,,,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,,,309,,,,,,,,,,,,,,,,,,,,299,,,295,,,58', '59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70', '71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98', '97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90', '91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,', ',,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63', '64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227', ',,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,', ',,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66', '68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,', ',,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59', ',,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70', '71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98', '97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,280,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,654,,,,44', ',,281,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57', '62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99', '100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,280,96,104,105,,90,91', '42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,281,,,', ',,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63', '64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227', ',,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,', ',,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66', '68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,', ',,220,,,226,,,58,59,,,60,,278,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56', '94,93,95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226', ',,58,59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,280,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58', '59,,,60,,278,,276,,44,,,281,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,', ',,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59', ',,60,,752,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', '69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302', '308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100', ',,227,,,,,,,45,,,102,101,103,92,56,94,93,95,280,96,104,105,,90,91,42', '43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,654,,276,,44,,,281', ',,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81', '63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,', '227,,,,,,,45,,,102,101,103,92,56,94,93,95,280,96,104,105,,90,91,42,43', '41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,276,,44,,,281,,,,,,225', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,', ',,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92', '56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226', ',,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28', '27,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227', ',,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,', ',,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,', '226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,', ',,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93', '95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59', ',,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69', '70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308', '98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,', ',,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81', '63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,', '227,,,,,,,303,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,,,309', ',,,,,,,,,,,,,,,,,,,299,,,295,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68', '305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,303,,,102,101', '103,92,56,94,93,95,,96,104,105,,90,91,,,309,,,,,,,,,,,,,,,,,,,,299,', ',295,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301', '302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96', '104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,401', ',,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,', '57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97', '99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91', '42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,', ',102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,', ',,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,98,97,99,100,,,19,,,,,,,45,,,102,101,103,92,56,94', '93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58', '59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69', '70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308', '98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,', ',,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81', '63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227,', ',,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,', ',,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66', '68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,', ',,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72', '73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,', '58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302', '308,98,97,99,100,,,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104', '105,,90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44', ',,,,,,,,225,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62', ',81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100', ',,227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43', '41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67', ',65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,', ',,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305', '306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,303,,,102,101,103', '92,56,94,93,95,,96,104,105,,90,91,,,309,,,,,,,,,,,,,,,,,,,,871,,,226', ',,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', '69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '98,97,99,100,,,19,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105', ',90,91,42,43,41,,,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,,,,,44,,', ',,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81', '63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,', '227,,,,,,,45,,,102,101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41', ',,,,,,,,,,,,,,,,,,,220,,,226,,,58,59,,,60,,654,,,,44,,,,,,,,,225,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67', ',65,66,68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,280,96,104,105,,90,91,42,43,41,,,,,,,,', ',,,,,,,,,,,220,,,226,,,58,59,,,60,,,,276,,44,,,281,,,,,,225,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66', '68,305,306,72,73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,45,,,102', '101,103,92,56,94,93,95,,96,104,105,,90,91,42,43,41,,,,,,,,,,,,,,,,,', ',,220,,,226,,,58,59,,,60,,,,,,44,,,,,,,,,225,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72', '73,,,,,,301,302,308,98,97,99,100,,,227,,,,,,,303,,,102,101,103,92,56', '94,93,95,,96,104,105,,90,91,,,309,,,,,,,,,,,,,,,,,,,,871,,,226,,,58', '59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70', '71,,57,62,,81,63,64,,,,67,,65,66,68,305,306,72,73,,,,,,301,302,308,98', '97,99,100,,,227,,,,,,,303,,,102,101,103,92,56,94,93,95,,96,104,105,', '90,91,,,309,,,,,,,,,,,,,,,,,,,,940,,,226,,,58,59,,,60,,,,,,,,,,,,,,', ',,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,69,70,71,,57,62,,81,63,64,', ',,67,,65,66,68,30,31,72,73,,,,,,29,28,27,98,97,99,100,,,227,,,,,,,45', ',,102,101,103,92,56,94,93,95,280,96,104,105,,90,91,42,43,41,235,239', '244,245,246,241,243,251,252,247,248,,228,229,,,249,250,,220,,,226,,', '58,59,,,60,,278,232,276,238,44,234,233,281,230,231,242,240,236,225,237', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,215,253,-246,,,,62,,81,-246,-246', '-246,,,-246,-246,-246,,-246,,,,,,,,,-246,-246,-246,,,,,,,,,-246,-246', ',-246,-246,-246,-246,-246,,,,,,,,,,,,,,,,,,,,,,,-246,-246,-246,-246', '-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,,,-246,-246,-246,', ',-246,,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,702,-246,542,541,540,785,543,', ',,-246,-246,,,,551,,,,,,-246,-246,,-246,-246,-246,-246,-246,,,,,,,,', '547,,,,,,,,,,,559,558,,,,552,,,,,,,,,-246,,-410,,,,,-246,,-410,-410', '-410,260,-246,-410,-410,-410,,-410,,,,,,,,,-410,-410,-410,,,,,,-246', '-246,,-410,-410,,-410,-410,-410,-410,-410,,,,,-246,,,-246,,,,,-246,', ',,,,,,,,-410,-410,-410,-410,-410,-410,-410,-410,-410,-410,-410,-410', '-410,-410,,,-410,-410,-410,,,-410,,260,-410,,,-410,-410,,-410,,-410', ',-410,,-410,-410,,-410,-410,-410,-410,-410,-296,-410,-410,-410,,,,-296', '-296,-296,,,-296,-296,-296,,-296,-410,,,-410,-410,,-410,,-410,-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,,269,-296,,,-296,-296,,-296,,-296,,-296,,-296,-296', ',-296,-296,-296,-296,-296,,-296,,-296,,,,,,,,,,,,,,-296,,,-296,-296', ',-296,,-296,170,181,171,194,167,187,177,176,197,198,192,175,174,169', '195,199,200,179,168,182,186,188,180,173,,,,189,196,191,190,183,193,178', '166,185,184,,,,,,165,172,163,164,160,161,162,121,123,120,,122,,,,,,', ',154,155,,151,133,134,135,142,139,141,,,136,137,,,,156,157,143,144,', ',,,,,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138,130,152,131', ',,159,89,,,,,,,,,,,,,,88,170,181,171,194,167,187,177,176,197,198,192', '175,174,169,195,199,200,179,168,182,186,188,180,173,,,,189,196,191,190', '183,193,178,166,185,184,,,,,,165,172,163,164,160,161,162,121,123,,,122', ',,,,,,,154,155,,151,133,134,135,142,139,141,,,136,137,,,,156,157,143', '144,,,,,,,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138,130,152', '131,,,159,89,,,,,,,,,,,,,,88,170,181,171,194,167,187,177,176,197,198', '192,175,174,169,195,199,200,179,168,182,186,188,180,173,,,,189,196,191', '190,183,193,178,166,185,184,,,,,,165,172,163,164,160,161,162,121,123', ',,122,,,,,,,,154,155,,151,133,134,135,142,139,141,,,136,137,,,,156,157', '143,144,,,,,,,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138,130', '152,131,,,159,89,,,,,,,,,,,,,,88,170,181,171,194,167,187,177,176,197', '198,192,175,174,169,195,199,200,179,168,182,186,188,180,173,,,,189,196', '191,190,183,193,178,166,185,184,,,,,,165,172,163,164,160,161,162,121', '123,,,122,,,,,,,,154,155,,151,133,134,135,142,139,141,,,136,137,,,,156', '157,143,144,,,,,,,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138', '130,152,131,,,159,89,,,,,,,,,,,,,,88,170,181,171,194,167,187,177,176', '197,198,192,175,174,169,195,199,200,179,168,182,186,188,180,173,,,,189', '196,191,368,367,369,366,166,185,184,,,,,,165,172,163,164,363,364,365', '361,123,94,93,362,,96,,,,,,154,155,,151,133,134,135,142,139,141,,,136', '137,,,,156,157,143,144,,,,,,373,,,,,,,,148,147,,132,153,150,149,158', '145,146,140,138,130,152,131,,,159,170,181,171,194,167,187,177,176,197', '198,192,175,174,169,195,199,200,179,168,182,186,188,180,173,,,,189,196', '191,190,183,193,178,166,185,184,,,,,,165,172,163,164,160,161,162,121', '123,,,122,,,,,,,,154,155,,151,133,134,135,142,139,141,,,136,137,,,,156', '157,143,144,,,,,,,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138', '130,152,131,,,159,235,239,244,245,246,241,243,251,252,247,248,,228,229', ',,249,250,,,,,,545,,542,541,540,549,543,,,232,,238,,234,233,551,230', '231,242,240,236,,237,235,239,244,245,246,241,243,251,252,247,248,,228', '229,547,734,249,250,,253,,,,556,555,559,558,,,,552,,232,,238,,234,233', ',230,231,242,240,236,,237,235,239,244,245,246,241,243,251,252,247,248', ',228,229,,,249,250,,253,702,,542,541,540,785,543,,,,,,232,,238,551,234', '233,,230,231,242,240,236,,237,235,239,244,245,246,241,243,251,252,247', '248,547,228,229,,,249,250,,253,,,559,558,,,,552,,,,,232,,238,,234,233', ',230,231,242,240,236,,237,235,239,244,245,246,241,243,251,252,247,248', ',228,229,,,249,250,,253,,,,545,,542,541,540,549,543,,,232,,238,,234', '233,551,230,231,242,240,236,,237,235,239,244,245,246,241,243,251,252', '247,248,,228,229,547,531,249,250,,253,,,,556,555,559,558,,,,552,,232', ',238,,234,233,,230,231,242,240,236,,237,235,239,244,245,246,241,243', '251,252,247,248,,228,229,,,249,250,,253,702,,542,541,540,785,543,,,', ',,232,,238,551,234,233,,230,231,242,240,236,,237,235,239,244,245,246', '241,243,251,252,247,248,547,228,229,,,249,250,,253,,,559,558,,,,552', ',,,,232,,238,,234,233,,230,231,242,240,236,,237,235,239,244,245,246', '241,243,251,252,247,248,,228,229,,,249,250,,253,784,,542,541,540,785', '543,,,,,,232,,238,551,234,233,,230,231,242,240,236,,237,235,239,244', '245,246,241,243,251,252,247,248,547,228,229,,,249,250,,253,556,555,559', '558,,,,552,,,,,232,,238,,234,233,,230,231,242,240,236,,237,,,,,,719', '413,,,720,,,,,,,,154,155,253,151,133,134,135,142,139,141,,,136,137,', ',,156,157,143,144,,,,,,260,,,,,,,,148,147,,132,153,150,149,158,145,146', '140,138,130,152,131,664,413,159,,665,,,,,,,,154,155,,151,133,134,135', '142,139,141,,,136,137,,,,156,157,143,144,,,,,,260,,,,,,,,148,147,,132', '153,150,149,158,145,146,140,138,130,152,131,667,420,159,,668,,,,,,,', '154,155,,151,133,134,135,142,139,141,,,136,137,,,,156,157,143,144,,', ',,,260,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138,130,152,131', '633,413,159,,634,,,,,,,,154,155,,151,133,134,135,142,139,141,,,136,137', ',,,156,157,143,144,,,,,,260,,,,,,,,148,147,,132,153,150,149,158,145', '146,140,138,130,152,131,635,420,159,,636,,,,,,,,154,155,,151,133,134', '135,142,139,141,,,136,137,,,,156,157,143,144,,,,,,260,,,,,,,,148,147', ',132,153,150,149,158,145,146,140,138,130,152,131,409,413,159,,410,,', ',,,,,154,155,,151,133,134,135,142,139,141,,,136,137,,,,156,157,143,144', ',,,,,260,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138,130,152', '131,416,420,159,,415,,,,,,,,154,155,,151,133,134,135,142,139,141,,,136', '137,,,,156,157,143,144,,,,,,260,,,,,,,,148,147,,132,153,150,149,158', '145,146,140,138,130,152,131,721,420,159,,722,,,,,,,,154,155,,151,133', '134,135,142,139,141,,,136,137,,,,156,157,143,144,,,,,,260,,,,,,,,148', '147,,132,153,150,149,158,145,146,140,138,130,152,131,471,413,159,,472', ',,,,,,,154,155,,151,133,134,135,142,139,141,,,136,137,,,,156,157,143', '144,,,,,,,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138,130,152', '131,724,420,159,,725,,,,,,,,154,155,,151,133,134,135,142,139,141,,,136', '137,,,,156,157,143,144,,,,,,260,,,,,,,,148,147,,132,153,150,149,158', '145,146,140,138,130,152,131,471,413,159,,472,,,,,,,,154,155,,151,133', '134,135,142,139,141,,,136,137,,,,156,157,143,144,,,,,,260,,,,,,,,148', '147,,132,153,150,149,158,145,146,140,138,130,152,131,633,413,159,,634', ',,,,,,,154,155,,151,133,134,135,142,139,141,,,136,137,,,,156,157,143', '144,,,,,,260,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138,130', '152,131,635,420,159,,636,,,,,,,,154,155,,151,133,134,135,142,139,141', ',,136,137,,,,156,157,143,144,,,,,,260,,,,,,,,148,147,,132,153,150,149', '158,145,146,140,138,130,152,131,975,420,159,,974,,,,,,,,154,155,,151', '133,134,135,142,139,141,,,136,137,,,,156,157,143,144,,,,,,260,,,,,,', ',148,147,,132,153,150,149,158,145,146,140,138,130,152,131,998,413,159', ',999,,,,,,,,154,155,,151,133,134,135,142,139,141,,,136,137,,,,156,157', '143,144,,,,,,260,,,,,,,,148,147,,132,153,150,149,158,145,146,140,138', '130,152,131,1000,420,159,,1001,,,,,,,,154,155,,151,133,134,135,142,139', '141,,,136,137,,,,156,157,143,144,,,,,,260,,,,,,,,148,147,,132,153,150', '149,158,145,146,140,138,130,152,131,,702,159,542,541,540,785,543,,545', ',542,541,540,549,543,551,,,,,,,,551,,784,,542,541,540,785,543,,,,,,547', ',,551,,,,,547,,,559,558,,,,552,556,555,559,558,,,,552,547,,702,,542', '541,540,785,543,556,555,559,558,,,,552,551,,784,,542,541,540,785,543', '702,,542,541,540,549,543,,551,,,,,547,,551,,545,,542,541,540,549,543', '559,558,,,,552,547,,551,,,,,547,,556,555,559,558,,,,552,,559,558,,,', '552,547,,545,,542,541,540,549,543,556,555,559,558,,,,552,551,,545,,542', '541,540,549,543,,545,,542,541,540,549,543,551,,,,,547,,,551,,,,,,556', '555,559,558,,,,552,547,734,,,,,,,547,556,555,559,558,,,,552,556,555', '559,558,,,702,552,542,541,540,549,543,702,,542,541,540,549,543,702,551', '542,541,540,549,543,702,551,542,541,540,549,543,,551,,,,,,,551,547,', ',,,,,547,,,,559,558,,547,,552,,559,558,,547,,552,,559,558,,,,552,,559', '558,,,,552' ] racc_action_table = arr = ::Array.new(24911, 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 = [ '635,26,880,219,645,839,719,635,635,635,58,903,635,635,635,273,635,61', '19,380,999,446,335,341,366,635,635,635,635,381,356,366,721,720,345,342', '635,635,998,635,635,635,635,635,717,336,218,843,1012,347,58,1000,843', '446,589,589,219,446,446,19,908,346,908,343,573,26,635,635,635,635,635', '635,635,635,635,635,635,635,635,635,921,530,635,635,635,380,635,635', '26,664,635,645,722,635,635,381,635,721,635,218,635,439,635,635,61,635', '635,635,635,635,415,635,635,635,839,719,922,415,415,415,880,565,840', '415,415,880,415,635,1000,903,635,635,635,635,903,635,356,635,999,635', '335,721,720,999,342,335,415,415,589,415,415,415,415,415,439,664,998', '722,665,356,391,998,717,336,356,717,1012,717,336,1000,346,1012,343,573', '1000,566,415,415,415,415,415,415,415,415,415,415,415,415,415,415,530', '633,415,415,415,664,415,397,664,399,415,722,634,415,664,616,585,585', '415,584,415,602,415,415,584,415,415,415,415,415,636,415,923,415,665', '565,840,636,636,636,565,840,636,636,636,477,636,415,675,675,415,415', '646,415,633,415,636,636,636,415,433,433,616,304,402,634,636,636,616', '636,636,636,636,636,665,361,772,665,313,405,477,600,361,665,478,602', '602,646,350,566,326,221,407,326,566,602,636,636,636,636,636,636,636', '636,636,636,636,636,636,636,585,408,636,636,636,585,636,636,469,478', '636,39,417,636,636,313,636,304,636,772,636,313,636,636,351,636,636,636', '636,636,350,636,675,636,221,600,600,350,378,45,304,425,350,469,433,600', '350,636,724,376,636,636,636,636,92,636,352,636,39,636,352,92,92,92,39', '350,92,92,92,701,92,701,701,701,435,701,351,77,92,369,92,92,92,351,708', '708,369,798,351,77,92,92,351,92,92,92,92,92,371,77,724,14,378,378,378', '371,927,724,14,927,925,351,724,376,376,376,724,14,689,689,92,92,92,92', '92,92,92,92,92,92,92,92,92,92,447,724,92,92,92,798,92,92,377,659,92', '409,798,92,92,659,92,701,92,448,92,798,92,92,667,92,92,92,92,92,449', '92,899,92,899,899,899,379,899,362,798,382,365,3,375,450,362,92,3,365', '92,92,92,92,95,92,475,92,409,92,479,95,95,95,409,38,95,95,95,7,95,494', '377,377,377,495,667,24,95,368,95,95,95,667,24,498,368,940,667,500,95', '95,667,95,95,95,95,95,410,735,505,379,379,379,735,382,382,382,375,375', '375,667,38,973,899,973,973,973,38,973,95,95,95,95,95,95,95,95,95,95', '95,95,95,95,17,17,95,95,95,344,95,95,870,445,95,410,344,95,95,870,95', '410,95,15,95,344,95,95,870,95,95,95,95,95,945,95,509,95,641,367,641', '641,641,641,641,445,367,339,946,445,445,95,339,641,95,95,95,95,416,95', '947,95,354,95,948,416,416,416,949,354,15,416,416,576,416,641,15,284', '354,518,576,363,284,416,641,641,641,641,363,576,325,641,519,325,416', '416,364,416,416,416,416,416,681,364,521,681,690,1001,690,690,690,690', '690,329,1001,951,329,641,533,1001,534,690,536,1001,416,416,416,416,416', '416,416,416,416,416,416,416,416,416,537,686,416,416,416,690,416,520', '520,538,416,686,545,416,690,690,690,690,416,553,416,690,416,416,857', '416,416,416,416,416,504,416,416,416,857,557,828,504,828,828,828,941', '828,560,686,686,504,416,941,686,416,416,40,416,562,416,567,941,568,416', '959,959,959,959,959,959,1,857,857,959,959,597,857,828,959,605,959,959', '959,959,959,959,959,287,287,287,287,287,959,959,959,959,959,959,959', '607,547,959,547,547,547,613,547,959,959,959,959,959,959,959,959,959', '959,959,959,617,959,959,959,974,959,959,959,959,959,826,622,826,826', '826,975,826,976,547,627,950,296,950,950,950,120,950,547,296,959,120', '120,959,334,334,959,959,296,1014,959,868,959,868,868,868,959,868,826', '37,986,637,986,986,986,959,986,826,950,639,959,959,959,959,644,959,959', '959,959,41,41,988,988,959,959,733,733,733,733,733,733,959,651,959,733', '733,653,986,658,733,661,733,733,733,733,733,733,733,492,492,492,492', '492,733,733,733,733,733,733,733,465,698,733,698,698,698,663,698,733', '733,733,733,733,733,733,733,733,733,733,733,666,733,733,733,669,733', '733,733,733,733,464,670,465,673,297,298,465,465,698,465,465,297,298', '309,309,674,676,698,679,733,297,298,733,685,987,733,733,300,700,733', '703,733,464,710,300,733,464,464,715,464,464,593,593,300,733,593,593', '593,718,733,733,733,733,727,733,733,733,733,22,989,732,751,733,733,728', '728,728,728,728,728,733,990,733,728,728,991,756,992,728,993,728,728', '728,728,728,728,728,6,6,6,6,6,728,728,728,728,728,728,728,994,952,728', '952,952,952,997,952,728,728,728,728,728,728,728,728,728,728,728,728', '774,728,728,728,775,728,728,728,728,728,457,900,939,900,900,900,777', '900,952,939,778,779,781,782,316,783,457,457,939,728,784,316,728,788', '792,728,728,793,797,728,316,728,457,801,457,728,457,457,900,457,457', '16,804,457,728,457,805,808,812,728,728,728,728,813,728,728,728,728,817', '818,820,821,728,728,321,321,321,321,321,321,728,823,728,321,321,825', '827,830,321,833,321,321,321,321,321,321,321,13,12,201,10,220,321,321', '321,321,321,321,321,222,223,321,842,227,846,847,850,321,321,321,321', '321,321,321,321,321,321,321,321,851,321,321,321,1002,321,321,321,321', '321,459,459,459,459,459,459,459,938,931,459,459,937,1003,867,938,931', '459,459,937,321,871,873,321,938,931,321,321,937,884,321,885,321,459', '259,459,321,459,459,340,459,459,459,459,459,321,459,274,277,901,321', '321,321,321,905,321,321,321,321,288,289,106,291,321,321,295,295,295', '295,295,295,321,292,321,295,295,293,906,299,295,302,295,295,295,295', '295,295,295,303,308,310,314,315,295,295,295,295,295,295,295,318,912', '295,323,327,328,330,917,295,295,295,295,295,295,295,295,295,295,295', '295,920,295,295,295,,295,295,295,295,295,461,461,461,461,461,461,461', '980,725,461,461,217,,,980,725,461,461,217,295,725,,295,980,725,295,295', '217,,295,,295,461,,461,295,461,461,,461,461,461,461,461,295,461,,,,295', '295,295,295,,295,295,295,295,,,,,295,295,290,290,290,290,290,290,295', ',295,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,463,463,463,463,463,463,463,46,668', '463,463,,,,46,668,463,463,,290,668,,290,46,668,290,290,,,290,,290,463', ',463,290,463,463,,463,463,463,463,463,290,463,,,,290,290,290,290,,290', '290,290,290,,,,,290,290,649,649,649,649,649,649,290,,290,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,467,467,467,467,467,467,467,467,,467,467,,,,,,467', '467,,649,,,649,,,649,649,,,649,,649,467,,467,649,467,467,,467,467,467', '467,467,649,467,,,,649,649,649,649,,649,649,649,649,,,,,649,649,648', '648,648,648,648,648,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,460,460', '460,460,460,460,460,,,460,460,,,,,,460,460,,648,,,648,,,648,648,,,648', ',648,460,,460,648,460,460,,460,460,460,460,460,648,460,,,,648,648,648', '648,,648,648,648,648,,,,,648,648,643,643,643,643,643,643,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,456,,,,,,,,,,,,,,,,456,456,,643,,,643,', ',643,643,,,643,,643,456,,456,643,456,456,,456,456,,,456,643,456,,,,643', '643,643,643,,643,643,643,643,,,,,643,643,961,961,961,961,961,961,643', ',643,961,961,,,,961,,961,961,961,961,961,961,961,,,,,,961,961,961,961', '961,961,961,,,961,,,,,,961,961,961,961,961,961,961,961,961,961,961,961', ',961,961,961,,961,961,961,961,961,443,443,443,443,443,443,443,443,443', '443,443,,443,443,,,443,443,,961,,,961,,,961,961,,,961,,961,443,,443', '961,443,443,,443,443,443,443,443,961,443,,,,961,961,961,961,,961,961', '961,961,,,,,961,961,953,953,953,953,953,953,961,,961,953,953,,,,953', ',953,953,953,953,953,953,953,,,,,,953,953,953,953,953,953,953,,,953', ',,,,,953,953,953,953,953,953,953,953,953,953,953,953,,953,953,953,,953', '953,953,953,953,444,444,444,444,444,444,444,444,444,444,444,,444,444', ',,444,444,,953,,,953,,,953,953,,,953,,953,444,,444,953,444,444,,444', '444,444,444,444,953,444,,,,953,953,953,953,,953,953,953,953,,,,,953', '953,118,118,118,118,118,118,953,,953,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', '466,466,466,466,466,466,466,,,466,466,,,,,,466,466,,118,,,118,,,118', '118,,,118,,118,466,,466,118,466,466,,466,466,466,466,466,118,466,,,', '118,118,118,118,,118,118,118,118,,,,,118,118,226,226,226,226,226,226', '118,,118,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,462,462,462,462,462,462,462,,', '462,462,,,,,,462,462,,226,,,226,,,226,226,,,226,,226,462,,462,226,462', '462,,462,462,462,462,462,226,462,,,,226,226,226,226,,226,226,226,226', ',,,,226,226,0,0,0,0,0,0,226,,226,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0', '0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,455,,,,,', ',,,,,,,,,,455,455,,0,,,0,,,0,0,,,0,,0,455,,455,0,455,455,,455,455,,', '455,0,455,,,,0,0,0,0,,0,0,0,0,,,,,0,0,203,203,203,203,203,203,0,,0,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,,203', '203,203,,203,203,203,203,203,458,,,,,,,,,,,,,,,,458,458,,203,,,203,', ',203,203,,,203,,203,458,,458,203,458,458,,458,458,,,458,203,458,,,,203', '203,203,203,,203,203,203,203,,,,,203,203,936,936,936,936,936,936,203', ',203,936,936,,,,936,,936,936,936,936,936,936,936,,,,,,936,936,936,936', '936,936,936,,,936,,,,,,936,936,936,936,936,936,936,936,936,936,936,936', ',936,936,936,,936,936,936,936,936,454,454,454,454,454,454,454,,,454', '454,,,,,,454,454,,936,,,936,,,936,936,,,936,,936,454,,454,936,454,454', ',454,454,454,454,454,936,454,,,,936,936,936,936,,936,936,936,936,,,', ',936,936,33,33,33,33,33,33,936,,936,33,33,,,,33,,33,33,33,33,33,33,33', ',,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33,33,33,33,33', '33,,33,33,33,,33,33,33,33,33,452,,,,,,,,,,,,,,,,452,452,,33,,,33,,,33', '33,,,33,,33,452,,452,33,452,452,,452,452,,,,33,,,,,33,33,33,33,,33,33', '33,33,,,,,33,33,877,877,877,877,877,877,33,,33,877,877,,,,877,,877,877', '877,877,877,877,877,,,,,,877,877,877,877,877,877,877,,,877,,,,,,877', '877,877,877,877,877,877,877,877,877,877,877,,877,877,877,,877,877,877', '877,877,451,,,,,,,,,,,,,,,,451,451,,877,,,877,,,877,877,,,877,,877,451', ',451,877,451,451,,451,451,,,,877,,,,,877,877,877,877,,877,877,877,877', ',,,,877,877,844,844,844,844,844,844,877,,877,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,844,844,844,844,,844,844,844,,844,844,844', '844,844,453,,,,,,,,,,,,,,,,453,453,,844,,,844,,,844,844,,,844,,844,453', ',,844,453,453,,453,453,,,,844,,,,,844,844,844,844,,844,844,844,844,', ',,,844,844,586,586,586,586,586,586,844,,844,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,564,564,564', '564,564,564,586,,586,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,561,561,561,561,561,561,564,,564,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,561,561,', ',,,561,561,493,493,493,493,493,493,561,,561,493,493,,,,493,,493,493', '493,493,493,493,493,,,,,,493,493,493,493,493,493,493,,,493,,,,,,493', '493,493,493,493,493,493,493,493,493,493,493,,493,493,493,,493,493,493', '493,493,,,,,,,,,,,,,,,,,,,,493,,,493,,,493,493,,,493,,493,,,,493,,,', ',,,,,493,,,,,493,493,493,493,,493,493,493,493,,,,,493,493,838,838,838', '838,838,838,493,,493,838,838,,,,838,,838,838,838,838,838,838,838,,,', ',,838,838,838,838,838,838,838,,,838,,,,,,838,838,838,838,838,838,838', '838,838,838,838,838,,838,838,838,,838,838,838,838,838,,,,,,,,,,,,,,', ',,,,,838,,,838,,,838,838,,,838,,838,,,,838,,,,,,,,,838,,,,,838,838,838', '838,,838,838,838,838,,,,,838,838,835,835,835,835,835,835,838,,838,835', '835,,,,835,,835,835,835,835,835,835,835,,,,,,835,835,835,835,835,835', '835,,,835,,,,,,835,835,835,835,835,835,835,835,835,835,835,835,,835', '835,835,,835,835,835,835,835,,,,,,,,,,,,,,,,,,,,835,,,835,,,835,835', ',,835,,835,,,,835,,,,,,,,,835,,,,,835,835,835,835,,835,835,835,835,', ',,,835,835,834,834,834,834,834,834,835,,835,834,834,,,,834,,834,834', '834,834,834,834,834,,,,,,834,834,834,834,834,834,834,,,834,,,,,428,834', '834,834,834,834,834,834,834,834,834,834,834,,834,834,834,,834,834,834', '834,834,428,428,428,428,428,428,428,428,428,428,428,,428,428,,,428,428', ',834,,,834,,,834,834,,,834,,834,428,,428,834,428,428,,428,428,428,428', '428,834,428,,,,834,834,834,834,,834,834,834,834,,,,,834,834,,428,421', '428,,,834,,834,421,421,421,,,421,421,421,,421,,,,,,,,,421,421,421,421', ',,,,,,,421,421,,421,421,421,421,421,,,,,,,,,,,,,,,,,,,,,,,421,421,421', '421,421,421,421,421,421,421,421,421,421,421,,,421,421,421,,,421,,,421', ',,421,421,,421,,421,,421,,421,421,,421,421,421,421,421,,421,421,421', ',,,,,,,,,,,,,421,,,421,421,421,421,420,421,,421,,,,420,420,420,,,420', '420,420,,420,,,,,,,,,420,420,420,420,,,,,,,,420,420,,420,420,420,420', '420,,,,,,,,,,,,,,,,,,,,,,,420,420,420,420,420,420,420,420,420,420,420', '420,420,420,,,420,420,420,,,420,,,420,,,420,420,,420,,420,,420,,420', '420,,420,420,420,420,420,,420,420,420,,,,,,,,,,,,,,420,,,420,420,420', '420,56,420,,420,,,,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,56,56,,56,,56,811,811,811', '811,811,811,,,,811,811,,,,811,,811,811,811,811,811,811,811,,,,,,811', '811,811,811,811,811,811,,,811,,,,,,811,811,811,811,811,811,811,811,811', '811,811,811,,811,811,811,,811,811,811,811,811,,,,,,,,,,,,,,,,,,,,811', ',,811,,,811,811,,,811,,811,,,,811,,,,,,,,,811,,,,,811,811,811,811,,811', '811,811,811,,,,,811,811,810,810,810,810,810,810,811,,811,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,810,810,,810,810,810,810,,,,,810,810', '803,803,803,803,803,803,810,,810,803,803,,,,803,,803,803,803,803,803', '803,803,,,,,,803,803,803,803,803,803,803,,,803,,,,,,803,803,803,803', '803,803,803,803,803,803,803,803,,803,803,803,,803,803,803,803,803,,', ',,,,,,,,,,,,,,,,,803,,,803,,,803,803,,,803,,803,,,,803,,,,,,,,,803,', ',,,803,803,803,803,,803,803,803,803,,,,,803,803,791,791,791,791,791', '791,803,,803,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,743,743,743,743,743,743,791,,791,743,743,,,,743', ',743,743,743,743,743,743,743,,,,,,743,743,743,743,743,743,743,,,743', ',,,,,743,743,743,743,743,743,743,743,743,743,743,743,,743,743,743,,743', '743,743,743,743,,,,,,,,,,,,,,,,,,,,743,,,743,,,743,743,,,743,,743,,', ',743,,,,,,,,,743,,,,,743,743,743,743,,743,743,743,743,,,,,743,743,,211', '211,211,,211,743,,743,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,,5,5,5,5,5,211,,211,5,5,,,,5,,5,5,5,5,5,5,5', ',,,,,5,5,5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5', '5,,,,,,,,,,,,,,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,', '5,5,5,5,,,,,5,5,,20,20,20,,20,5,,5,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,,29,29,29,,29,20,', '20,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,,,,,,29,,,,,29,29', '29,29,,29,29,29,29,,,,,29,29,,30,30,30,,30,29,,29,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,30,,31,31,31,,31,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,,34,34,34,,34', '31,,31,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34,34,', ',34,,,,,,,34,,,34,34,34,34,34,34,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,34,,34,35,35,,,,35,,35,35,35,35,35', '35,35,,,,,,35,35,35,35,35,35,35,,,35,,,,,404,,35,,,35,35,35,35,35,35', '35,35,,35,35,35,,35,35,,,35,404,404,404,404,404,404,404,404,404,404', '404,,404,404,,,404,404,,35,,,35,,,35,35,,,35,,,404,,404,,404,404,,404', '404,404,404,404,,404,,,,35,35,35,35,,35,35,35,35,,,,,35,35,,404,,35', ',,35,,35,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,42,42,,,,,42,42,,43,43,43,,43,42,,42,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,,44,44,44,,44,43,,43,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,,,,,44,44,,59,59,59,,59,44,', '44,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,59,,,,,59,59,,60,60,60,,60,59,,59,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', '60,,63,63,63,,63,60,,60,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,,,,,63,63,,64,64,64,,64,63,,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,,,,,64,64,,67,67,67,,67,64,,64,67,67,,,,67,,67,67,67,67,67,67,67', ',,,,,67,67,67,67,67,67,67,,,67,,,,,638,,67,,,67,67,67,67,67,67,67,67', ',67,67,67,,67,67,67,67,67,638,638,638,638,638,638,638,638,638,638,638', ',638,638,,,638,638,,67,,,67,,,67,67,,,67,,,638,,638,67,638,638,,638', '638,638,638,638,67,638,,,,67,67,67,67,,67,67,67,67,,,,,67,67,67,638', ',,,67,67,,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,,68,68,68,68,,,,,68,68,,69,69,69,,69,68,,68,69,69', ',,,69,,69,69,69,69,69,69,69,,,,,,69,69,69,69,69,69,69,,,69,,,,,,,69', ',,69,69,69,69,69,69,69,69,,69,69,69,,69,69,,,69,,,,,,,,,,,,,,,,,69,', ',69,,,69,,,69,69,,,69,,,,,,,,,,,,,,,,,,,,69,69,69,69,,69,69,69,69,,', ',,69,69,,70,70,70,,70,69,,69,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,,108,108,108,108,108,70,,70', '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,760,760,760,760,760,760,760,760,760', '760,760,,760,760,,,760,760,,108,,,108,,,108,108,,,108,,108,760,,760', '108,760,760,,760,760,760,760,760,108,760,,,,108,108,108,108,,108,108', '108,108,,,,,108,108,,760,,,,108,108,,108,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,,113,113,113,113,,,,,113,113,,114,114', '114,,114,113,,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,,115,115,115,,115,114,,114,115,115,,,,115,,115,115,115', '115,115,115,115,,,,,,115,115,115,115,115,115,115,,,115,,,,,,,115,,,115', '115,115,115,115,115,115,115,,115,115,115,,115,115,115,115,115,,,,,,', ',,,,,,,,,,,,,115,,,115,,,115,115,,,115,,,,,,115,,,,,,,,,115,,,,,115', '115,115,115,,115,115,115,115,,,,,115,115,,116,116,116,,116,115,,115', '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,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,,204,204,204,,204,117,,117,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,', '204,204,204,204,204,,,,,,,,,,,,,,,,,,,,204,,,204,,,204,204,,,204,,204', ',,,204,,,,,,,,,204,,,,,204,204,204,204,,204,204,204,204,,,,,204,204', ',205,205,205,,205,204,,204,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,,,,,205,205,,206,206,206,,206,205,,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,206,206,206,,,,,206,206,,209', '209,209,,209,206,,206,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,,210,210,210,,210,209,,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,,,,,210,210,,212,212,212,', '212,210,,210,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,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,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,214', '225,225,225,,225,214,,214,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,,228,228,228,,228,225,,225,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,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', ',230,230,230,,230,229,,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,,,,,230,230,,231,231,231,,231,230,,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,,,,,231,231,,232,232,232,,232,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,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,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,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,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,,237,237,237,,237,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,,238,238,238,,238,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', ',239,239,239,,239,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,,240,240,240,,240,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,,241,241,241,,241,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', ',242,242,242,,242,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,,243,243,243,,243,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,,244,244,244,,244,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', ',245,245,245,,245,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,,246,246,246,,246,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,,247,247,247,,247,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', ',248,248,248,,248,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,,249,249,249,,249,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,,250,250,250,,250,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', ',251,251,251,,251,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,,252,252,252,,252,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,,253,253,253,,253,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', ',260,260,260,,260,253,,253,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,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,,269,269,269,,269,261,,261,269,269,,,,269,,269,269,269,269,269,269', '269,,,,,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269,269,269,269', '269,269,269,269,269,269,269,269,,269,269,269,269,269,,,,,,,,,,,,,,,', ',,,,269,,,269,,,269,269,,,269,,269,,269,,269,,,269,,,,,,269,,,,,269', '269,269,269,,269,269,269,269,,,,,269,269,269,276,276,276,,276,269,,269', '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', ',278,278,278,,278,276,,276,278,278,,,,278,,278,278,278,278,278,278,278', ',,,,,278,278,278,278,278,278,278,,,278,,,,,,,278,,,278,278,278,278,278', '278,278,278,,278,278,278,,278,278,278,278,278,,,,,,,,,,,,,,,,,,,,278', ',,278,,,278,278,,,278,,,,,,278,,,,,,,,,278,,,,,278,278,278,278,,278', '278,278,278,,,,,278,278,,280,280,280,,280,278,,278,280,280,,,,280,,280', '280,280,280,280,280,280,,,,,,280,280,280,280,280,280,280,,,280,,,,,', ',280,,,280,280,280,280,280,280,280,280,,280,280,280,,280,280,280,280', '280,,,,,,,,,,,,,,,,,,,,280,,,280,,,280,280,,,280,,,,,,280,,,,,,,,,280', ',,,,280,280,280,280,,280,280,280,280,,,,,280,280,,281,281,281,,281,280', ',280,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', ',286,286,286,286,286,281,,281,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,,294,294,294,,294,286,,286,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,271,271,271,271,271,271,271,271,271,271,271,,271,271,', ',271,271,,294,,,294,,,294,294,,,294,,,271,,271,,271,271,,271,271,271', '271,271,,271,,,,294,294,294,294,,294,294,294,294,,,,,294,294,,271,,294', ',,294,,294,311,311,311,,311,,,,311,311,,,,311,,311,311,311,311,311,311', '311,,,,,,311,311,311,311,311,311,311,,,311,,,,,,,311,,,311,311,311,311', '311,311,311,311,,311,311,311,,311,311,,,311,,,,,,,,,,,,,,,,,,,,311,', ',311,,,311,311,,,311,,,,,,,,,,,,,,,,,,,,311,311,311,311,,311,311,311', '311,,,,,311,311,,320,320,320,,320,311,,311,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,,322,322,322,,322,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,322,322,,,,,322,322', ',337,337,337,,337,322,,322,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,,338,338,338,,338,337,,337,338,338,,,,338,,338', '338,338,338,338,338,338,,,,,,338,338,338,338,338,338,338,,,338,,,,,', ',338,,,338,338,338,338,338,338,338,338,,338,338,338,,338,338,338,338', '338,,,,,,,,,,,,,,,,,,,,338,,,338,,,338,338,,,338,,,,,,338,,,,,,,,,338', ',,,,338,338,338,338,,338,338,338,338,,,,,338,338,,357,357,357,,357,338', ',338,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', ',373,373,373,,373,357,,357,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,,401,401,401,,401,373,,373,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,,438,438,438,,438,401', ',401,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,438,438,,,,,,,,,,,,,,,,,,,,438,,,438,,,438,438', ',,438,,438,,438,,438,,,438,,,,,,438,,,,,438,438,438,438,,438,438,438', '438,,,,,438,438,,440,440,440,,440,438,,438,440,440,,,,440,,440,440,440', '440,440,440,440,,,,,,440,440,440,440,440,440,440,,,440,,,,,,,440,,,440', '440,440,440,440,440,440,440,,440,440,440,,440,440,440,440,440,,,,,,', ',,,,,,,,,,,,,440,,,440,,,440,440,,,440,,,,,,440,,,,,,,,,440,,,,,440', '440,440,440,,440,440,440,440,,,,,440,440,,441,441,441,,441,440,,440', '441,441,,,,441,,441,441,441,441,441,441,441,,,,,,441,441,441,441,441', '441,441,,,441,,,,,,,441,,,441,441,441,441,441,441,441,441,,441,441,441', ',441,441,441,441,441,,,,,,,,,,,,,,,,,,,,441,,,441,,,441,441,,,441,,', ',,,441,,,,,,,,,441,,,,,441,441,441,441,,441,441,441,441,,,,,441,441', ',442,442,442,,442,441,,441,442,442,,,,442,,442,442,442,442,442,442,442', ',,,,,442,442,442,442,442,442,442,,,442,,,,,,,442,,,442,442,442,442,442', '442,442,442,,442,442,442,,442,442,442,442,442,,,,,,,,,,,,,,,,,,,,442', ',,442,,,442,442,,,442,,,,,,442,,,,,,,,,442,,,,,442,442,442,442,,442', '442,442,442,,,,,442,442,,482,482,482,,482,442,,442,482,482,,,,482,,482', '482,482,482,482,482,482,,,,,,482,482,482,482,482,482,482,,,482,,,,,', ',482,,,482,482,482,482,482,482,482,482,482,482,482,482,,482,482,482', '482,482,,,,,,,,,,,,,,,,,,,,482,,,482,,,482,482,,,482,,482,,482,,482', ',,482,,,,,,482,,,,,482,482,482,482,,482,482,482,482,,,,,482,482,,484', '484,484,,484,482,,482,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,484,,,,,484,484,,486,486,486,,486,484,,484,486,486', ',,,486,,486,486,486,486,486,486,486,,,,,,486,486,486,486,486,486,486', ',,486,,,,,,,486,,,486,486,486,486,486,486,486,486,,486,486,486,,486', '486,486,486,486,,,,,,,,,,,,,,,,,,,,486,,,486,,,486,486,,,486,,,,,,486', ',,,,,,,,486,,,,,486,486,486,486,,486,486,486,486,,,,,486,486,,491,491', '491,491,491,486,,486,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,516,516,516,516', '516,516,516,516,516,516,516,,516,516,,,516,516,,491,,,491,,,491,491', ',,491,,491,516,,516,491,516,516,,516,516,516,516,516,491,516,,,,491', '491,491,491,,491,491,491,491,,,,,491,491,,516,,,,491,491,,491,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', ',501,501,501,,501,499,,499,501,501,,,,501,,501,501,501,501,501,501,501', ',,,,,501,501,501,501,501,501,501,,,501,,,,,,,501,,,501,501,501,501,501', '501,501,501,501,501,501,501,,501,501,501,501,501,,,,,,,,,,,,,,,,,,,', '501,,,501,,,501,501,,,501,,501,,501,,501,,,501,,,,,,501,,,,,501,501', '501,501,,501,501,501,501,,,,,501,501,,508,508,508,,508,501,,501,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,,511,511,511', ',511,508,,508,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,,512,512,512,,512,511,,511,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,,513,513,513,,513,512,,512,513', '513,,,,513,,513,513,513,513,513,513,513,,,,,,513,513,513,513,513,513', '513,,,513,,,,,,,513,,,513,513,513,513,513,513,513,513,,513,513,513,', '513,513,513,513,513,,,,,,,,,,,,,,,,,,,,513,,,513,,,513,513,,,513,,,', ',,513,,,,,,,,,513,,,,,513,513,513,513,,513,513,513,513,,,,,513,513,', '517,517,517,,517,513,,513,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,,523,523,523,,523,517,,517,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,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,523,,526,526,526', ',526,523,,523,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,,549,549,549,,549,526,,526,549,549,,,,549,,549,549,549', '549,549,549,549,,,,,,549,549,549,549,549,549,549,,,549,,,,,,,549,,,549', '549,549,549,549,549,549,549,,549,549,549,,549,549,549,549,549,,,,,,', ',,,,,,,,,,,,,549,,,549,,,549,549,,,549,,,,,,549,,,,,,,,,549,,,,,549', '549,549,549,,549,549,549,549,,,,,549,549,,569,569,569,,569,549,,549', '569,569,,,,569,,569,569,569,569,569,569,569,,,,,,569,569,569,569,569', '569,569,,,569,,,,,,,569,,,569,569,569,569,569,569,569,569,,569,569,569', ',569,569,569,569,569,,,,,,,,,,,,,,,,,,,,569,,,569,,,569,569,,,569,,569', ',,,569,,,,,,,,,569,,,,,569,569,569,569,,569,569,569,569,,,,,569,569', ',570,570,570,,570,569,,569,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,,580,580,580,,580,570,,570,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,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,,,,,580', '580,,614,614,614,,614,580,,580,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,614,,615,615,615,,615,614,,614,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,,,,,615,615,,618,618,618', ',618,615,,615,618,618,,,,618,,618,618,618,618,618,618,618,,,,,,618,618', '618,618,618,618,618,,,618,,,,,,,618,,,618,618,618,618,618,618,618,618', '618,618,618,618,,618,618,618,618,618,,,,,,,,,,,,,,,,,,,,618,,,618,,', '618,618,,,618,,618,,618,,618,,,618,,,,,,618,,,,,618,618,618,618,,618', '618,618,618,,,,,618,618,,619,619,619,,619,618,,618,619,619,,,,619,,619', '619,619,619,619,619,619,,,,,,619,619,619,619,619,619,619,,,619,,,,,', ',619,,,619,619,619,619,619,619,619,619,619,619,619,619,,619,619,619', '619,619,,,,,,,,,,,,,,,,,,,,619,,,619,,,619,619,,,619,,,,619,,619,,,619', ',,,,,619,,,,,619,619,619,619,,619,619,619,619,,,,,619,619,,620,620,620', ',620,619,,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', ',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,,621,621,621,,621,620,,620,621,621,,,,621,,621,621,621,621', '621,621,621,,,,,,621,621,621,621,621,621,621,,,621,,,,,,,621,,,621,621', '621,621,621,621,621,621,,621,621,621,,621,621,621,621,621,,,,,,,,,,', ',,,,,,,,,621,,,621,,,621,621,,,621,,,,,,621,,,,,,,,,621,,,,,621,621', '621,621,,621,621,621,621,,,,,621,621,,625,625,625,,625,621,,621,625', '625,,,,625,,625,625,625,625,625,625,625,,,,,,625,625,625,625,625,625', '625,,,625,,,,,,,625,,,625,625,625,625,625,625,625,625,,625,625,625,', '625,625,625,625,625,,,,,,,,,,,,,,,,,,,,625,,,625,,,625,625,,,625,,,', ',,625,,,,,,,,,625,,,,,625,625,625,625,,625,625,625,625,,,,,625,625,', '626,626,626,,626,625,,625,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,626,,626,626,626,626,626,,,,,,,,,,,,,,,,,,,,626', ',,626,,,626,626,,,626,,,,,,626,,,,,,,,,626,,,,,626,626,626,626,,626', '626,626,626,,,,,626,626,,629,629,629,,629,626,,626,629,629,,,,629,,629', '629,629,629,629,629,629,,,,,,629,629,629,629,629,629,629,,,629,,,,,', ',629,,,629,629,629,629,629,629,629,629,,629,629,629,,629,629,629,629', '629,,,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629,,,,,,629,,,,,,,,,629', ',,,,629,629,629,629,,629,629,629,629,,,,,629,629,,630,630,630,,630,629', ',629,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', ',654,654,654,,654,630,,630,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,,660,660,660,,660,654,,654,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,,,,,660,660,,671,671,671,,671,660,,660,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,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,,696,696,696,,696,677,,677,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,,723,723,723,,723,696,,696,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,', '729,729,729,,729,723,,723,729,729,,,,729,,729,729,729,729,729,729,729', ',,,,,729,729,729,729,729,729,729,,,729,,,,,,,729,,,729,729,729,729,729', '729,729,729,,729,729,729,,729,729,729,729,729,,,,,,,,,,,,,,,,,,,,729', ',,729,,,729,729,,,729,,,,,,729,,,,,,,,,729,,,,,729,729,729,729,,729', '729,729,729,,,,,729,729,,752,752,752,,752,729,,729,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,,754,754,754,,754,752', ',752,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,,,,,754,754', ',768,768,768,,768,754,,754,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,,769,769,769,,769,768,,768,769,769,,,,769,,769', '769,769,769,769,769,769,,,,,,769,769,769,769,769,769,769,,,769,,,,,', ',769,,,769,769,769,769,769,769,769,769,,769,769,769,,769,769,769,769', '769,,,,,,,,,,,,,,,,,,,,769,,,769,,,769,769,,,769,,,,,,769,,,,,,,,,769', ',,,,769,769,769,769,,769,769,769,769,,,,,769,769,,770,770,770,,770,769', ',769,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', ',771,771,771,,771,770,,770,771,771,,,,771,,771,771,771,771,771,771,771', ',,,,,771,771,771,771,771,771,771,,,771,,,,,,,771,,,771,771,771,771,771', '771,771,771,,771,771,771,,771,771,771,771,771,,,,,,,,,,,,,,,,,,,,771', ',,771,,,771,771,,,771,,,,,,771,,,,,,,,,771,,,,,771,771,771,771,,771', '771,771,771,,,,,771,771,,773,773,773,,773,771,,771,773,773,,,,773,,773', '773,773,773,773,773,773,,,,,,773,773,773,773,773,773,773,,,773,,,,,', ',773,,,773,773,773,773,773,773,773,773,,773,773,773,,773,773,773,773', '773,,,,,,,,,,,,,,,,,,,,773,,,773,,,773,773,,,773,,,,,,773,,,,,,,,,773', ',,,,773,773,773,773,,773,773,773,773,,,,,773,773,,785,785,785,,785,773', ',773,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,,832,832', '832,,832,785,,785,832,832,,,,832,,832,832,832,832,832,832,832,,,,,,832', '832,832,832,832,832,832,,,832,,,,,,,832,,,832,832,832,832,832,832,832', '832,,832,832,832,,832,832,832,832,832,,,,,,,,,,,,,,,,,,,,832,,,832,', ',832,832,,,832,,,,,,832,,,,,,,,,832,,,,,832,832,832,832,,832,832,832', '832,,,,,832,832,,837,837,837,,837,832,,832,837,837,,,,837,,837,837,837', '837,837,837,837,,,,,,837,837,837,837,837,837,837,,,837,,,,,,,837,,,837', '837,837,837,837,837,837,837,,837,837,837,,837,837,837,837,837,,,,,,', ',,,,,,,,,,,,,837,,,837,,,837,837,,,837,,837,,,,837,,,,,,,,,837,,,,,837', '837,837,837,,837,837,837,837,,,,,837,837,,854,854,854,,854,837,,837', '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,,,854,,,854,854,,,854', ',,,854,,854,,,854,,,,,,854,,,,,854,854,854,854,,854,854,854,854,,,,', '854,854,,855,855,855,,855,854,,854,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,,869,869,869,,869,855,,855,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,,881,881,881,,881', '869,,869,881,881,,,,881,,881,881,881,881,881,881,881,,,,,,881,881,881', '881,881,881,881,,,881,,,,,,,881,,,881,881,881,881,881,881,881,881,,881', '881,881,,881,881,,,881,,,,,,,,,,,,,,,,,,,,881,,,881,,,881,881,,,881', ',,,,,,,,,,,,,,,,,,,881,881,881,881,,881,881,881,881,,,,,881,881,,977', '977,977,,977,881,,881,977,977,,,,977,,977,977,977,977,977,977,977,,', ',,,977,977,977,977,977,977,977,,,977,,,,,,,977,,,977,977,977,977,977', '977,977,977,977,977,977,977,,977,977,977,977,977,468,468,468,468,468', '468,468,468,468,468,468,,468,468,,,468,468,,977,,,977,,,977,977,,,977', ',977,468,977,468,977,468,468,977,468,468,468,468,468,977,468,,,,977', '977,977,977,,977,977,977,977,,,,,977,977,468,468,411,,,,977,,977,411', '411,411,,,411,411,411,,411,,,,,,,,,411,411,411,,,,,,,,,411,411,,411', '411,411,411,411,,,,,,,,,,,,,,,,,,,,,,,411,411,411,411,411,411,411,411', '411,411,411,411,411,411,,,411,411,411,,,411,,411,411,,,411,411,,411', ',411,,411,,411,411,,411,411,411,411,411,,411,411,411,,,,,,,,,,,,,,411', ',470,411,411,,411,,411,470,470,470,,,470,470,470,969,470,969,969,969', '969,969,,,,470,470,,,,969,,,,,,470,470,,470,470,470,470,470,,,,,,,,', '969,,,,,,,,,,,969,969,,,,969,,,,,,,,,470,,27,,,,,470,,27,27,27,470,470', '27,27,27,,27,,,,,,,,,27,27,27,,,,,,470,470,,27,27,,27,27,27,27,27,,', ',,470,,,470,,,,,470,,,,,,,,,,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', '28,27,27,27,,,,28,28,28,,,28,28,28,,28,27,,,27,27,,27,,27,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,,28,,28,,28', '28,,28,28,28,28,28,,28,,28,,,,,,,,,,,,,,28,,,28,28,,28,,28,8,8,8,8,8', '8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8', '8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8,8,,,,8,8,8,8,,,,', ',,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8,8,,,8,8,,,,,,,,,,,,,,8,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,9,9,,,9,9,,,,,,,,,,,,,,9,392,392,392', '392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392', '392,392,392,392,,,,392,392,392,392,392,392,392,392,392,392,,,,,,392', '392,392,392,392,392,392,392,392,,,392,,,,,,,,392,392,,392,392,392,392', '392,392,392,,,392,392,,,,392,392,392,392,,,,,,,,,,,,,,392,392,,392,392', '392,392,392,392,392,392,392,392,392,392,,,392,392,,,,,,,,,,,,,,392,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,,,611,611,,,,611,611,611,611,,,,,,,,,,,,,,611,611', ',611,611,611,611,611,611,611,611,611,611,611,611,,,611,611,,,,,,,,,', ',,,,611,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,', ',71,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736', '736,736,736,736,736,736,736,736,,,,736,736,736,736,736,736,736,736,736', '736,,,,,,736,736,736,736,736,736,736,736,736,,,736,,,,,,,,736,736,,736', '736,736,736,736,736,736,,,736,736,,,,736,736,736,736,,,,,,,,,,,,,,736', '736,,736,736,736,736,736,736,736,736,736,736,736,736,,,736,423,423,423', '423,423,423,423,423,423,423,423,,423,423,,,423,423,,,,,,915,,915,915', '915,915,915,,,423,,423,,423,423,915,423,423,423,423,423,,423,853,853', '853,853,853,853,853,853,853,853,853,,853,853,915,915,853,853,,423,,', ',915,915,915,915,,,,915,,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,,853', '864,,864,864,864,864,864,,,,,,856,,856,864,856,856,,856,856,856,856', '856,,856,753,753,753,753,753,753,753,753,753,753,753,864,753,753,,,753', '753,,856,,,864,864,,,,864,,,,,753,,753,,753,753,,753,753,753,753,753', ',753,672,672,672,672,672,672,672,672,672,672,672,,672,672,,,672,672', ',753,,,,333,,333,333,333,333,333,,,672,,672,,672,672,333,672,672,672', '672,672,,672,763,763,763,763,763,763,763,763,763,763,763,,763,763,333', '333,763,763,,672,,,,333,333,333,333,,,,333,,763,,763,,763,763,,763,763', '763,763,763,,763,765,765,765,765,765,765,765,765,765,765,765,,765,765', ',,765,765,,763,967,,967,967,967,967,967,,,,,,765,,765,967,765,765,,765', '765,765,765,765,,765,767,767,767,767,767,767,767,767,767,767,767,967', '767,767,,,767,767,,765,,,967,967,,,,967,,,,,767,,767,,767,767,,767,767', '767,767,767,,767,758,758,758,758,758,758,758,758,758,758,758,,758,758', ',,758,758,,767,862,,862,862,862,862,862,,,,,,758,,758,862,758,758,,758', '758,758,758,758,,758,21,21,21,21,21,21,21,21,21,21,21,862,21,21,,,21', '21,,758,862,862,862,862,,,,862,,,,,21,,21,,21,21,,21,21,21,21,21,,21', ',,,,,571,571,,,571,,,,,,,,571,571,21,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,502,502,571,,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,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,514,514,503,,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,515,515,514,,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,515,515,515,207,207,515', ',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,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,572,572,208,,572,,,,,,,,572,572', ',572,572,572,572,572,572,572,,,572,572,,,,572,572,572,572,,,,,,572,', ',,,,,,572,572,,572,572,572,572,572,572,572,572,572,572,572,572,256,256', '572,,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,578,578,256,,578,,,,,,,,578,578,,578,578,578,578,578,578', '578,,,578,578,,,,578,578,578,578,,,,,,578,,,,,,,,578,578,,578,578,578', '578,578,578,578,578,578,578,578,578,579,579,578,,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,436,436', '579,,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,437,437,436,,437,,,,,,,,437,437,,437,437,437,437,437', '437,437,,,437,437,,,,437,437,437,437,,,,,,437,,,,,,,,437,437,,437,437', '437,437,437,437,437,437,437,437,437,437,932,932,437,,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,978', '978,932,,978,,,,,,,,978,978,,978,978,978,978,978,978,978,,,978,978,', ',,978,978,978,978,,,,,,978,,,,,,,,978,978,,978,978,978,978,978,978,978', '978,978,978,978,978,979,979,978,,979,,,,,,,,979,979,,979,979,979,979', '979,979,979,,,979,979,,,,979,979,979,979,,,,,,979,,,,,,,,979,979,,979', '979,979,979,979,979,979,979,979,979,979,979,,965,979,965,965,965,965', '965,,734,,734,734,734,734,734,965,,,,,,,,734,,963,,963,963,963,963,963', ',,,,,965,,,963,,,,,734,,,965,965,,,,965,734,734,734,734,,,,734,963,', '1007,,1007,1007,1007,1007,1007,963,963,963,963,,,,963,1007,,860,,860', '860,860,860,860,694,,694,694,694,694,694,,860,,,,,1007,,694,,531,,531', '531,531,531,531,1007,1007,,,,1007,860,,531,,,,,694,,860,860,860,860', ',,,860,,694,694,,,,694,531,,692,,692,692,692,692,692,531,531,531,531', ',,,531,692,,587,,587,587,587,587,587,,888,,888,888,888,888,888,587,', ',,,692,,,888,,,,,,692,692,692,692,,,,692,587,587,,,,,,,888,587,587,587', '587,,,,587,888,888,888,888,,,890,888,890,890,890,890,890,892,,892,892', '892,892,892,894,890,894,894,894,894,894,981,892,981,981,981,981,981', ',894,,,,,,,981,890,,,,,,,892,,,,890,890,,894,,890,,892,892,,981,,892', ',894,894,,,,894,,981,981,,,,981' ] racc_action_check = arr = ::Array.new(24911, 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 = [ 2438, 768, nil, 347, nil, 5297, 1004, 391, 22433, 22561, 1063, nil, 1034, 1086, 324, 501, 987, 532, nil, -71, 5426, 23521, 987, nil, 434, nil, -24, 22189, 22299, 5555, 5684, 5813, nil, 2825, 5942, 6071, nil, 732, 413, 225, 699, 824, 6208, 6337, 6466, 209, 1402, nil, nil, nil, nil, nil, nil, nil, nil, nil, 4386, nil, -80, 6595, 6724, -8, nil, 6853, 6982, nil, nil, 7111, 7248, 7377, 7506, 22945, nil, nil, nil, nil, nil, 261, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 354, nil, nil, 488, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1274, nil, 7635, nil, nil, nil, nil, 7772, 7901, 8030, 8159, 8288, 2180, nil, 789, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1041, nil, 2567, 8417, 8546, 8675, 23892, 23953, 8804, 8933, 5168, 9062, 9191, 9320, nil, nil, 1277, -40, -83, 1121, 195, 1045, 1099, nil, 9449, 2309, 1099, 9578, 9707, 9836, 9965, 10094, 10223, 10352, 10481, 10610, 10739, 10868, 10997, 11126, 11255, 11384, 11513, 11642, 11771, 11900, 12029, 12158, 12287, 12416, 12545, 12674, 12803, nil, nil, 24075, nil, nil, 1151, 12932, 13061, nil, nil, nil, nil, nil, nil, nil, 13190, nil, 13964, nil, -118, 1127, nil, 13319, 1174, 13448, nil, 13577, 13706, nil, nil, 511, nil, 13835, 746, 1160, 1134, 1406, 1145, 1195, 1156, 13964, 1277, 761, 883, 884, 1236, 906, nil, 1204, 1171, 228, nil, nil, nil, 1213, 908, 1170, 14101, nil, 182, 1238, 1239, 1022, nil, 1247, nil, 14230, 1148, 14359, 1186, nil, 524, 150, 1223, 1205, 547, 1232, nil, nil, 23329, 814, 10, 33, 14488, 14617, 481, 1236, -112, 11, 39, 496, -21, 37, 25, nil, nil, 253, 299, 305, nil, 549, nil, 29, 14746, nil, nil, nil, 188, 396, 568, 583, 399, -53, 526, 436, 302, nil, 321, nil, 14875, nil, 418, 289, 382, 278, 411, -41, -31, 415, nil, nil, nil, nil, nil, nil, nil, nil, 47, 22689, nil, nil, nil, nil, 84, nil, 66, nil, 15004, 121, nil, 6071, 139, nil, 149, 168, 359, 446, 21981, nil, nil, nil, 110, 622, 223, nil, nil, 4252, 4118, nil, 23107, nil, 202, nil, nil, 3986, nil, nil, nil, nil, 214, nil, 284, 24258, 24319, 15133, 15, 15262, 15391, 15520, 1922, 2051, 511, -45, 368, 387, 398, 413, 2954, 2825, 3083, 2696, 2438, 1793, 1019, 2567, 1148, 1664, 1277, 2309, 1406, 890, 860, 2180, 1535, 21849, 234, 22110, nil, nil, nil, nil, 360, nil, 161, 200, 364, nil, nil, 15649, nil, 15778, nil, 15907, nil, nil, nil, nil, 16036, 875, 3599, 375, 376, nil, nil, 386, 16173, 393, 16302, 23648, 23709, 655, 445, nil, nil, 16431, 467, nil, 16560, 16689, 16818, 23770, 23831, 16036, 16947, 636, 647, 673, 578, nil, 17076, nil, nil, 17205, nil, nil, nil, 53, 24669, nil, 549, 551, nil, 553, 569, 578, nil, nil, nil, nil, nil, nil, 575, nil, 747, nil, 17334, nil, nil, nil, 670, nil, nil, nil, 686, nil, nil, 694, 3470, 744, nil, 3341, 95, 149, 742, 751, 17463, 17592, 23587, 24014, 40, nil, nil, 560, nil, 24136, 24197, 17721, nil, nil, nil, 79, 170, 3212, 24725, nil, 18, nil, nil, nil, 944, nil, nil, nil, 654, nil, nil, 211, nil, 151, nil, nil, 643, nil, 663, nil, nil, nil, 22817, nil, 670, 17850, 17979, 119, 723, 18108, 18237, 18366, 18495, 732, nil, nil, 18624, 18753, 740, nil, 18882, 19011, nil, nil, 105, 116, 0, 220, 737, 7111, 743, nil, 551, nil, 1793, 853, -21, 168, nil, 1664, 1535, nil, 765, nil, 815, 19140, nil, nil, nil, 791, 310, 19269, 773, nil, 802, 65, 134, 857, 433, 1403, 861, 824, 19398, 23291, 893, 905, 202, 958, 19527, nil, 844, nil, 536, nil, nil, nil, 849, 647, nil, nil, 319, 619, nil, 24708, nil, 24652, nil, 19656, nil, 876, nil, 851, 318, nil, 856, nil, nil, nil, nil, 371, nil, 975, nil, nil, nil, nil, 985, nil, 32, 874, -18, 9, 8, 68, 19785, 323, 1274, nil, 879, 1019, 19914, nil, nil, 1007, 890, 24572, 403, 23058, nil, nil, nil, nil, nil, nil, 5039, nil, nil, nil, nil, nil, nil, nil, 884, 20043, 23245, 20172, nil, 899, nil, 23475, nil, 7635, nil, nil, 23337, nil, 23383, nil, 23429, 20301, 20430, 20559, 20688, 180, 20817, 942, 946, nil, 958, 962, 963, nil, 988, 968, 965, 966, 20946, nil, nil, 1099, nil, nil, 4910, 996, 1103, nil, nil, nil, 980, 362, nil, nil, 1110, nil, 4781, 994, 1044, nil, nil, 1042, nil, 4652, 4523, 1043, 1005, nil, nil, nil, 1010, 1011, nil, 1012, 1013, nil, 1023, nil, 1030, 776, 1028, 687, nil, 1153, nil, 21075, 1155, 3986, 3857, nil, 21204, 3728, -19, 96, nil, 1178, -83, 3083, nil, 1180, 1060, nil, nil, 1064, 1071, nil, 23153, 21333, 21462, 23199, 670, nil, nil, 24645, nil, 23510, nil, 23234, nil, nil, 1118, 806, 21591, 499, 1179, nil, 1122, nil, nil, nil, 2954, nil, nil, -10, 21720, nil, nil, 1129, 1235, nil, nil, 24733, nil, 24785, nil, 24792, nil, 24799, nil, nil, nil, nil, 415, 1035, 1129, nil, -1, nil, 1258, 1281, nil, 46, nil, nil, nil, 1305, nil, nil, 23145, nil, 1187, nil, nil, 1200, -53, -17, 89, nil, 277, nil, 276, nil, nil, nil, 1145, 24380, nil, nil, nil, 2696, 1148, 1144, 1010, 466, 666, nil, nil, nil, 465, 479, 491, 495, 499, 786, 546, 1005, 2051, nil, nil, nil, nil, nil, 761, nil, 1922, nil, 24589, nil, 24564, nil, 23418, nil, 22074, nil, nil, nil, 496, 732, 743, 827, 21849, 24441, 24502, 1273, 24806, nil, nil, nil, nil, 815, 847, 874, 1006, 1018, 898, 900, 902, 922, nil, nil, 931, 26, 8, 39, 594, 1075, 1093, nil, nil, nil, 24628, nil, nil, nil, nil, 36, nil, 722, nil ] racc_action_default = [ -3, -588, -1, -574, -4, -588, -7, -588, -588, -588, -588, -29, -588, -588, -588, -279, -588, -41, -44, -576, -588, -49, -51, -52, -53, -57, -258, -258, -258, -293, -328, -329, -69, -11, -73, -81, -83, -588, -485, -486, -588, -588, -588, -588, -588, -576, -239, -270, -271, -272, -273, -274, -275, -276, -277, -278, -564, -281, -283, -587, -555, -301, -389, -588, -588, -306, -309, -574, -588, -588, -588, -588, -330, -331, -428, -429, -430, -431, -432, -453, -435, -436, -455, -457, -440, -445, -449, -451, -467, -455, -469, -470, -562, -474, -475, -563, -477, -478, -479, -480, -481, -482, -483, -484, -489, -490, -588, -2, -575, -583, -584, -585, -6, -588, -588, -588, -588, -588, -3, -17, -588, -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, -11, -588, -588, -248, -588, -588, -588, -588, -588, -588, -588, -576, -577, -48, -588, -485, -486, -588, -279, -588, -588, -231, -588, -11, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -397, -399, -588, -572, -573, -58, -248, -588, -300, -403, -412, -414, -64, -409, -65, -576, -66, -240, -253, -262, -262, -257, -588, -263, -588, -557, -588, -588, -67, -68, -574, -12, -588, -15, -588, -71, -11, -576, -588, -74, -77, -11, -89, -90, -588, -588, -97, -293, -296, -576, -588, -328, -329, -332, -410, -588, -79, -588, -85, -290, -471, -472, -588, -216, -217, -232, -588, -11, -588, -576, -241, -580, -580, -588, -588, -580, -588, -302, -303, -517, -50, -588, -588, -588, -588, -574, -588, -575, -485, -486, -588, -588, -279, -588, -342, -343, -107, -108, -588, -110, -588, -279, -588, -588, -485, -486, -321, -112, -113, -154, -155, -156, -172, -177, -184, -187, -323, -588, -553, -588, -433, -588, -588, -588, -588, -588, -588, -588, -588, 1016, -5, -586, -23, -24, -25, -26, -27, -588, -588, -19, -20, -21, -122, -588, -30, -39, -40, -588, -588, -31, -197, -576, -249, -262, -262, -565, -566, -258, -407, -567, -568, -566, -565, -258, -406, -408, -567, -568, -37, -205, -38, -588, -42, -43, -195, -263, -45, -46, -47, -576, -299, -588, -588, -588, -248, -290, -588, -588, -588, -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, -576, -378, -258, -565, -566, -55, -59, -576, -259, -378, -378, -576, -295, -254, -588, -255, -588, -260, -588, -264, -560, -561, -10, -575, -14, -3, -576, -70, -288, -86, -75, -588, -576, -248, -588, -588, -96, -588, -471, -472, -588, -82, -87, -588, -588, -588, -588, -588, -237, -588, -420, -588, -284, -588, -242, -582, -581, -244, -582, -291, -292, -556, -588, -517, -392, -552, -552, -500, -502, -502, -502, -516, -518, -519, -520, -521, -522, -523, -524, -588, -526, -588, -532, -534, -535, -537, -542, -544, -545, -547, -548, -549, -588, -11, -333, -334, -11, -588, -588, -588, -588, -588, -248, -588, -588, -290, -314, -107, -108, -109, -588, -588, -248, -317, -491, -492, -588, -588, -11, -517, -325, -576, -434, -454, -459, -588, -461, -437, -456, -588, -458, -439, -588, -442, -588, -444, -447, -588, -448, -588, -468, -8, -18, -588, -28, -269, -588, -588, -411, -588, -250, -252, -588, -588, -60, -247, -404, -588, -588, -62, -405, -588, -588, -298, -578, -565, -566, -565, -566, -576, -195, -588, -379, -576, -381, -11, -54, -400, -378, -245, -11, -11, -294, -262, -261, -265, -588, -558, -559, -13, -588, -72, -588, -78, -84, -576, -565, -566, -246, -93, -95, -588, -80, -588, -204, -214, -215, -576, -587, -587, -282, -576, -287, -580, -390, -393, -395, -576, -588, -498, -499, -588, -588, -509, -588, -512, -588, -514, -588, -344, -588, -346, -348, -355, -523, -576, -528, -536, -546, -550, -587, -335, -587, -307, -336, -337, -310, -588, -313, -588, -576, -565, -566, -569, -289, -588, -107, -108, -111, -576, -11, -588, -494, -319, -588, -11, -517, -588, -588, -554, -460, -463, -464, -465, -466, -11, -438, -441, -443, -446, -450, -452, -123, -267, -588, -198, -588, -579, -262, -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, -196, -588, -588, -588, -588, -411, -588, -552, -552, -360, -362, -362, -362, -377, -588, -576, -383, -523, -588, -530, -540, -588, -402, -401, -11, -588, -588, -256, -266, -16, -76, -91, -88, -297, -587, -340, -11, -421, -587, -422, -423, -588, -243, -11, -11, -588, -552, -533, -551, -501, -502, -502, -527, -502, -502, -543, -502, -538, -576, -588, -353, -588, -525, -588, -338, -588, -588, -11, -11, -312, -588, -11, -411, -588, -411, -588, -588, -11, -322, -588, -576, -496, -326, -588, -268, -32, -199, -251, -588, -238, -588, -358, -359, -368, -370, -588, -373, -588, -375, -380, -588, -588, -588, -529, -588, -398, -588, -413, -415, -9, -11, -427, -341, -588, -588, -425, -285, -588, -588, -391, -497, -588, -505, -588, -507, -588, -510, -588, -513, -515, -345, -347, -351, -588, -356, -304, -588, -305, -588, -588, -265, -587, -315, -318, -493, -588, -324, -495, -517, -462, -552, -531, -361, -362, -362, -362, -362, -541, -362, -382, -576, -385, -387, -388, -539, -588, -290, -56, -426, -11, -98, -99, -588, -588, -106, -424, -394, -396, -502, -502, -502, -502, -349, -588, -354, -588, -11, -308, -311, -416, -417, -418, -11, -320, -11, -357, -588, -365, -588, -367, -588, -371, -588, -374, -376, -384, -588, -289, -569, -420, -248, -588, -588, -105, -588, -503, -506, -508, -511, -588, -352, -587, -588, -588, -362, -362, -362, -362, -386, -419, -576, -565, -566, -569, -104, -502, -350, -339, -316, -327, -588, -363, -366, -369, -372, -411, -504, -362, -364 ] clist = [ '213,293,324,26,216,124,124,405,26,272,272,272,370,411,417,111,331,519', '119,202,255,539,2,26,568,400,320,127,127,427,676,424,26,26,26,483,26', '652,532,652,263,267,129,129,256,6,655,273,273,273,6,616,434,259,266', '268,307,307,107,522,525,475,470,529,733,108,26,26,124,474,26,310,711', '714,335,336,830,325,339,111,561,564,778,703,577,687,688,819,655,801', '307,307,307,509,898,928,270,282,283,822,291,112,924,901,334,334,930', '480,334,959,289,26,728,274,274,274,26,26,26,26,26,26,340,833,386,387', '388,389,781,495,600,602,376,779,591,844,598,601,601,382,391,586,643', '326,329,356,360,587,736,697,648,649,915,6,334,334,334,334,679,322,321', '371,390,6,780,581,347,332,328,483,782,372,812,652,652,951,645,327,611', '927,1,655,818,530,820,682,272,333,398,403,646,810,811,422,426,469,477', '15,478,956,995,805,15,924,384,421,26,26,26,26,880,930,26,26,26,26,26', '26,374,539,898,412,402,375,377,987,378,392,402,26,15,300,300,379,825', '775,685,380,381,637,272,272,411,417,738,743,729,349,201,272,817,715', '430,431,432,433,657,819,814,918,876,1003,337,26,26,346,355,355,323,867', '834,631,26,338,835,539,723,,510,273,813,661,732,772,505,,,273,,26,670', '819,,26,,822,111,,26,,697,920,663,827,521,15,,,666,798,726,,,647,15', '15,307,650,263,791,666,957,267,,26,26,858,859,476,,498,492,659,307,', ',479,,662,490,26,26,,,,274,491,909,565,566,,111,921,274,922,,1004,494', ',746,26,746,500,520,839,887,819,289,582,,,718,289,841,,,26,666,334,334', '945,727,,,,666,617,,,124,,588,961,,567,,,,585,,15,,610,,,,,,,652,,127', '794,,589,809,655,,272,691,693,695,539,15,842,623,129,737,697,846,697', '628,761,,421,,,766,622,847,,26,797,,627,,,,427,639,412,917,,,775,991', '775,,775,,,,838,,,,510,,,962,,,,,,510,,,,,,272,,15,623,,,15,996,,,300', '15,,26,,26,644,806,,421,949,697,,26,,,,300,,,,421,800,,658,412,794,15', ',26,307,,,,,,,412,,307,,,,,,,,6,,912,829,,,,,,,,,272,,697,,697,,,775', '675,775,272,775,,775,26,,651,26,,421,,,,26,,421,,712,712,,,,,26,,412', ',717,697,26,,,958,412,,,730,731,,292,790,775,,539,757,759,14,681,124', '762,764,14,,426,,,,,617,,807,750,783,26,26,936,217,510,26,26,127,,26', ',,217,217,217,799,14,298,298,789,1012,617,129,26,,953,,,26,26,,,,,990', ',,808,,,897,,,783,,,217,217,,,217,344,354,354,849,,,623,,307,628,,914', ',,15,,15,,,307,,402,300,,,617,889,891,756,893,895,300,896,,617,,,,,', '14,,,,,217,217,217,217,14,14,,26,,,,,26,26,124,840,,26,,852,,843,,,', '878,,26,848,882,,,776,,,,,,26,15,,,15,,783,334,,,,,397,334,,,,,,,,997', ',,,,15,666,,,,,,742,,292,,26,,815,,,815,,,,16,,,26,307,16,14,217,217', '217,26,26,217,217,217,217,217,217,,,,,,,,982,983,984,985,14,,,26,16', '26,26,,15,26,,903,,15,15,26,,,,,712,,,911,292,300,,,,292,,,,,217,217', '300,,,348,,334,,217,,,,,26,,,,,1013,,,,,,307,14,,,,14,777,,,298,14,', '307,,,,,972,,,16,,,,,,298,,,16,16,,,,15,,14,217,421,15,,,,,,,,,26,15', ',,217,217,,,,821,,823,,,,,,26,272,,,,,26,217,26,,,815,,,776,,776,,776', ',421,,617,217,26,,355,,,,38,,15,,,38,412,,,,,,,,15,,,,,,16,15,15,,,', ',425,,,,,,38,296,296,,,,,,,,16,,15,15,,,15,,,,,,15,,,217,,,13,,,,,13', ',342,358,358,358,,,,,,,,,355,,,,,,,776,15,776,,776,941,776,13,,,,,,', ',,16,,,,16,38,,,14,16,14,,,,38,38,298,,217,,,,,,,298,,,776,923,,925', ',,217,16,,,708,,,710,,,15,,,,,,,,,,,946,,947,,948,,15,,,,,13,15,,15', ',,,,,13,13,,14,,,14,861,863,865,,,217,,,,,,,,,,217,,,38,,,14,,,,,,,', ',,,,,,,,,788,,,38,,792,793,,,,992,,993,,994,,,217,217,,,,217,217,,,217', ',1002,,,,,,,,,,,,14,13,,,,14,14,,,,,,,,1014,,,298,,,,,,38,13,,,38,298', ',,296,38,,330,,,,,,,,,,,16,,16,296,,,,,,,,,,38,,850,,,,,964,966,968', '970,,971,,,,,,,,,,217,,,,13,14,217,,13,,14,,,13,,,,,,,14,,,,,,,,873', ',,217,,,,16,,,16,13,879,,,,,,,884,885,,,,,,,,1008,1009,1010,1011,16', ',870,,,,,,14,,,905,906,,,908,,,,1015,14,,,,,,,14,14,,,,,,,,,,399,,,', ',425,429,,,,,217,,14,14,,935,14,,16,,,,14,16,16,,,,,,,,,,,,,,,,,,,,', ',,931,,38,,38,,,,14,,296,,939,,,,,,,296,,,,,485,,487,976,488,489,,,', ',,,,,,,,,,,988,,,39,,,989,,39,,,,16,,,,,16,,13,,13,,14,,,,16,38,,,38', ',,,,39,297,297,,14,,,,,,14,,14,,,,,38,,,,,,,,,,,217,,,,,,,343,359,359', '359,16,,,,,,,,,,,,16,,13,,,13,,16,16,,,,,,,,,,613,,,,,38,39,,,13,38', '38,,16,16,39,39,16,,,,,296,16,,,,,,,,,,296,,,,,,,,,,,,,,,,,,,,,,,16', ',,,942,,,,,,13,,,,,13,13,,,,,,,,,653,,330,,656,,,,,38,,,,,38,,,,,,39', ',,,38,,,,,,,,,,16,,,,,,,653,,39,330,,,,,,,16,,,,,,16,,16,,,,,,,358,704', ',,13,,38,,,13,,,,,,,,,38,13,,429,,,,38,38,,,,,,,,,,,39,,,,39,,,,297', '39,,,38,38,,,38,,,,,,38,,,297,,,,751,13,,,653,330,39,,,,,,,13,,,,,358', ',13,13,,,,,38,,,,937,,,,,,,,,,795,,,,13,13,,,13,,,,,,13,,,,,,,,,804', ',,,,,,,,,,,,,,,,,,824,224,,38,,13,,,,,271,271,271,,,,,,,,38,,,317,318', '319,38,,38,,,,,,,,,,,,271,271,,,,,,,,,,,,,,,851,,,,,,,,13,,,,,,,,,,', ',,,,,,13,,,,,,13,,13,,,,,39,,39,,,,,,297,,,,,,,,,297,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,907,,,,,,,,,,,,,,,,,330,,,,,,39,,,39,,,,,,,,,,,,,,,,,', '271,404,271,,39,423,428,,,,,,,,,,,,,,,224,,,443,444,445,446,447,448', '449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465', '466,467,468,,,,,,,271,271,,,,39,,,,271,39,39,,,,,271,,271,,271,271,297', ',,,,,,,,,,297,,,,,,,,,,,,,,,,,,,,,,,,,,,516,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,39,,,,,39,,,,,,,,,,39,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,271,,', ',,,359,,,,,,39,,,,,,,,,,,,39,,,,,,,39,39,,,,,271,,423,638,404,,,,,,', ',,,,,,,39,39,,,39,,,,,,39,,,,,,,,,,,,,,,,271,,271,,271,,,,,359,,,,,', ',,39,,271,,938,,,,,,,,672,673,674,,,,,,,,,,271,,,271,,,,,,,,,,,,,,,', ',,,,,,,271,,,,,,,,,39,,,,,,,,,,,271,271,,,,,39,,,,,271,39,,39,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,271,753,,,271,271,758,760,,,,763,765,,,638,767', ',,,,,,,,,,,,,,,,,,,,,,,271,,,,,,,,,,,,,,,,,,,,,,,271,,,,,,,,,,,,,,,', ',,,271,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,271,,853', ',,,,,,,,,,,,,758,760,765,763,,856,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,271,,,,,,,,,,,,,,,,,271,853,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,271' ] racc_goto_table = arr = ::Array.new(2878, 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 = [ '31,49,65,41,20,57,57,23,41,33,33,33,56,37,37,93,84,8,15,15,135,160,2', '41,90,27,31,60,60,18,10,27,41,41,41,71,41,72,134,72,69,69,61,61,36,7', '172,66,66,66,7,24,47,38,38,38,63,63,4,67,67,23,37,67,94,6,41,41,57,39', '41,50,89,89,17,17,88,66,17,93,87,87,124,114,54,119,119,164,172,11,63', '63,63,51,112,129,44,44,44,168,46,5,169,115,29,29,130,47,29,105,45,41', '106,68,68,68,41,41,41,41,41,41,4,11,17,17,17,17,127,47,152,152,149,125', '153,107,153,153,153,149,2,108,40,68,68,55,55,109,110,113,40,40,111,7', '29,29,29,29,98,97,96,95,7,7,116,92,91,86,83,71,122,82,127,72,72,115', '70,64,62,128,1,172,125,131,125,132,33,133,20,20,42,136,137,20,20,138', '140,25,141,142,129,143,25,169,5,57,41,41,41,41,144,130,41,41,41,41,41', '41,147,160,112,69,66,148,150,115,151,30,66,41,25,25,25,154,114,118,134', '155,156,23,33,33,37,37,157,158,159,19,16,33,163,90,29,29,29,29,14,164', '165,166,12,115,100,41,41,25,25,25,99,127,101,47,41,102,103,160,104,', '49,66,118,51,8,24,31,,,66,,41,51,164,,41,,168,93,,41,,113,124,23,113', '31,25,,,37,24,54,,,47,25,25,63,47,69,40,37,11,69,,41,41,119,119,44,', '50,7,47,63,,,44,,47,4,41,41,,,,68,6,89,17,17,,93,125,68,125,,88,46,', '153,41,153,46,29,24,119,164,45,93,,,23,45,24,,,41,37,29,29,125,23,,', ',37,31,,,57,,36,94,,4,,,,29,,25,,15,,,,,,,72,,60,71,,29,67,172,,33,162', '162,162,160,25,8,69,61,47,113,8,113,69,39,,57,,,39,38,134,,41,51,,38', ',,,18,31,69,118,,,118,125,118,,118,,,,87,,,,49,,,119,,,,,,49,,,,,,33', ',25,69,,,25,10,,,25,25,,41,,41,38,27,,57,113,113,,41,,,,25,,,,57,47', ',2,69,71,25,,41,63,,,,,,,69,,63,,,,,,,,7,,8,47,,,,,,,,,33,,113,,113', ',,118,29,118,33,118,,118,41,,68,41,,57,,,,41,,57,,93,93,,,,,41,,69,', '66,113,41,,,90,69,,,93,93,,9,84,118,,160,20,20,22,68,57,20,20,22,,20', ',,,,31,,65,15,31,41,41,87,22,49,41,41,60,,41,,,22,22,22,49,22,22,22', '135,24,31,61,41,,87,,,41,41,,,,,8,,,31,,,47,,,31,,,22,22,,,22,22,22', '22,56,,,69,,63,69,,47,,,25,,25,,,63,,66,25,,,31,162,162,68,162,162,25', '162,,31,,,,,,22,,,,,22,22,22,22,22,22,,41,,,,,41,41,57,17,,41,,20,,17', ',,,65,,41,93,65,,,120,,,,,,41,25,,,25,,31,29,,,,,9,29,,,,,,,,23,,,,', '25,37,,,,,,25,,9,,41,,120,,,120,,,,26,,,41,63,26,22,22,22,22,41,41,22', '22,22,22,22,22,,,,,,,,162,162,162,162,22,,,41,26,41,41,,25,41,,17,,25', '25,41,,,,,93,,,93,9,25,,,,9,,,,,22,22,25,,,26,,29,,22,,,,,41,,,,,162', ',,,,,63,22,,,,22,123,,,22,22,,63,,,,,31,,,26,,,,,,22,,,26,26,,,,25,', '22,22,57,25,,,,,,,,,41,25,,,22,22,,,,123,,123,,,,,,41,33,,,,,41,22,41', ',,120,,,120,,120,,120,,57,,31,22,41,,25,,,,52,,25,,,52,69,,,,,,,,25', ',,,,,26,25,25,,,,,26,,,,,,52,52,52,,,,,,,,26,,25,25,,,25,,,,,,25,,,22', ',,21,,,,,21,,52,52,52,52,,,,,,,,,25,,,,,,,120,25,120,,120,25,120,21', ',,,,,,,,26,,,,26,52,,,22,26,22,,,,52,52,22,,22,,,,,,,22,,,120,123,,123', ',,22,26,,,9,,,9,,,25,,,,,,,,,,,123,,123,,123,,25,,,,,21,25,,25,,,,,', '21,21,,22,,,22,121,121,121,,,22,,,,,,,,,,22,,,52,,,22,,,,,,,,,,,,,,', ',,9,,,52,,9,9,,,,123,,123,,123,,,22,22,,,,22,22,,,22,,123,,,,,,,,,,', ',22,21,,,,22,22,,,,,,,,123,,,22,,,,,,52,21,,,52,22,,,52,52,,28,,,,,', ',,,,,26,,26,52,,,,,,,,,,52,,9,,,,,121,121,121,121,,121,,,,,,,,,,22,', ',,21,22,22,,21,,22,,,21,,,,,,,22,,,,,,,,9,,,22,,,,26,,,26,21,9,,,,,', ',9,9,,,,,,,,121,121,121,121,26,,22,,,,,,22,,,9,9,,,9,,,,121,22,,,,,', ',22,22,,,,,,,,,,28,,,,,26,28,,,,,22,,22,22,,9,22,,26,,,,22,26,26,,,', ',,,,,,,,,,,,,,,,,,,22,,52,,52,,,,22,,52,,22,,,,,,,52,,,,,28,,28,9,28', '28,,,,,,,,,,,,,,,9,,,53,,,9,,53,,,,26,,,,,26,,21,,21,,22,,,,26,52,,', '52,,,,,53,53,53,,22,,,,,,22,,22,,,,,52,,,,,,,,,,,22,,,,,,,53,53,53,53', '26,,,,,,,,,,,,26,,21,,,21,,26,26,,,,,,,,,,28,,,,,52,53,,,21,52,52,,26', '26,53,53,26,,,,,52,26,,,,,,,,,,52,,,,,,,,,,,,,,,,,,,,,,,26,,,,26,,,', ',,21,,,,,21,21,,,,,,,,,28,,28,,28,,,,,52,,,,,52,,,,,,53,,,,52,,,,,,', ',,,26,,,,,,,28,,53,28,,,,,,,26,,,,,,26,,26,,,,,,,52,28,,,21,,52,,,21', ',,,,,,,,52,21,,28,,,,52,52,,,,,,,,,,,53,,,,53,,,,53,53,,,52,52,,,52', ',,,,,52,,,53,,,,28,21,,,28,28,53,,,,,,,21,,,,,52,,21,21,,,,,52,,,,52', ',,,,,,,,,28,,,,21,21,,,21,,,,,,21,,,,,,,,,28,,,,,,,,,,,,,,,,,,,28,32', ',52,,21,,,,,32,32,32,,,,,,,,52,,,32,32,32,52,,52,,,,,,,,,,,,32,32,,', ',,,,,,,,,,,,28,,,,,,,,21,,,,,,,,,,,,,,,,,21,,,,,,21,,21,,,,,53,,53,', ',,,,53,,,,,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,28', ',,,,,53,,,53,,,,,,,,,,,,,,,,,,32,32,32,,53,32,32,,,,,,,,,,,,,,,32,,', '32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32', '32,32,32,,,,,,,32,32,,,,53,,,,32,53,53,,,,,32,,32,,32,32,53,,,,,,,,', ',,53,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53,,', ',,53,,,,,,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,53,,,,,', '53,,,,,,,,,,,,53,,,,,,,53,53,,,,,32,,32,32,32,,,,,,,,,,,,,,53,53,,,53', ',,,,,53,,,,,,,,,,,,,,,,32,,32,,32,,,,,53,,,,,,,,53,,32,,53,,,,,,,,32', '32,32,,,,,,,,,,32,,,32,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,53,,,,,,,,,', ',32,32,,,,,53,,,,,32,53,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,32,,,32', '32,32,32,,,,32,32,,,32,32,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,', ',,,,,,32,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,32,,32,,,,,,,,,,,,,,32,32,32,32,,32,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,32', '32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32' ] racc_goto_check = arr = ::Array.new(2878, 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, 180, 22, nil, 55, 96, 62, 45, -304, 566, -488, -587, -541, nil, -235, 10, 239, 11, -181, 179, -16, 1047, 606, -199, -354, 197, 803, -179, 1223, 41, 108, -19, 1900, -20, nil, nil, 20, -194, 27, -190, -327, 3, -283, nil, 67, 77, 67, -162, nil, -33, 36, -218, 986, 1522, -268, 76, -59, -3, nil, nil, 19, 34, -218, 22, 118, -57, 18, -266, 84, 14, -294, -239, -445, nil, nil, nil, nil, nil, nil, nil, nil, nil, 100, 108, -45, nil, 105, -255, -632, -493, -316, 98, -191, 12, -523, 90, 103, 101, -362, 210, 197, -441, 207, -440, -298, -800, -469, -596, -219, -223, -440, -697, -732, -398, -464, -725, -477, nil, -406, -448, 110, 394, -471, 256, -559, -508, nil, -513, -689, -773, -762, -150, -345, 125, -295, -2, -492, -492, -59, nil, -68, -67, -709, -476, -595, nil, nil, 141, 144, 50, 141, 142, -248, -241, 148, 151, 151, -349, -349, -337, -312, nil, -117, -440, -603, -428, -598, nil, -593, -760, nil, nil, -438 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 341, 287, nil, 518, nil, 831, nil, 284, 285, nil, nil, nil, 11, 12, 18, 223, 316, nil, nil, 221, 222, nil, 277, 17, nil, 435, 21, 22, 23, 24, nil, 669, nil, nil, nil, 304, nil, 25, 406, 32, nil, nil, 34, 37, 36, nil, 218, 219, 353, nil, 126, 414, 125, 128, 75, 76, nil, 46, nil, 802, 407, nil, 408, 419, 624, 481, 275, 261, 47, 48, 49, 50, 51, 52, 53, 54, 55, nil, 262, 61, nil, nil, nil, nil, nil, nil, nil, 562, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 699, 546, nil, 700, 919, 774, 534, nil, 535, nil, nil, 536, nil, 538, 640, nil, nil, nil, 544, nil, nil, nil, 735, nil, nil, nil, nil, 418, nil, nil, nil, nil, nil, 74, 77, 78, nil, nil, nil, nil, nil, 596, nil, nil, nil, nil, nil, nil, 816, 533, nil, 537, 548, 550, 786, 553, 554, 787, 557, 560, 279 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 142, :_reduce_none, 2, 143, :_reduce_2, 0, 144, :_reduce_3, 1, 144, :_reduce_4, 3, 144, :_reduce_5, 2, 144, :_reduce_6, 1, 146, :_reduce_none, 4, 146, :_reduce_8, 4, 149, :_reduce_9, 2, 150, :_reduce_10, 0, 154, :_reduce_11, 1, 154, :_reduce_12, 3, 154, :_reduce_13, 2, 154, :_reduce_14, 1, 155, :_reduce_none, 4, 155, :_reduce_16, 0, 171, :_reduce_17, 4, 148, :_reduce_18, 3, 148, :_reduce_19, 3, 148, :_reduce_20, 3, 148, :_reduce_21, 2, 148, :_reduce_22, 3, 148, :_reduce_23, 3, 148, :_reduce_24, 3, 148, :_reduce_25, 3, 148, :_reduce_26, 3, 148, :_reduce_27, 4, 148, :_reduce_28, 1, 148, :_reduce_none, 3, 148, :_reduce_30, 3, 148, :_reduce_31, 6, 148, :_reduce_32, 5, 148, :_reduce_33, 5, 148, :_reduce_34, 5, 148, :_reduce_35, 5, 148, :_reduce_36, 3, 148, :_reduce_37, 3, 148, :_reduce_38, 3, 148, :_reduce_39, 3, 148, :_reduce_40, 1, 148, :_reduce_none, 3, 159, :_reduce_42, 3, 159, :_reduce_43, 1, 170, :_reduce_none, 3, 170, :_reduce_45, 3, 170, :_reduce_46, 3, 170, :_reduce_47, 2, 170, :_reduce_48, 1, 170, :_reduce_none, 1, 158, :_reduce_none, 1, 161, :_reduce_none, 1, 161, :_reduce_none, 1, 175, :_reduce_none, 4, 175, :_reduce_54, 0, 183, :_reduce_55, 5, 180, :_reduce_56, 1, 182, :_reduce_none, 2, 174, :_reduce_58, 3, 174, :_reduce_59, 4, 174, :_reduce_60, 5, 174, :_reduce_61, 4, 174, :_reduce_62, 5, 174, :_reduce_63, 2, 174, :_reduce_64, 2, 174, :_reduce_65, 2, 174, :_reduce_66, 2, 174, :_reduce_67, 2, 174, :_reduce_68, 1, 160, :_reduce_69, 3, 160, :_reduce_70, 1, 187, :_reduce_71, 3, 187, :_reduce_72, 1, 186, :_reduce_none, 2, 186, :_reduce_74, 3, 186, :_reduce_75, 5, 186, :_reduce_76, 2, 186, :_reduce_77, 4, 186, :_reduce_78, 2, 186, :_reduce_79, 4, 186, :_reduce_80, 1, 186, :_reduce_81, 3, 186, :_reduce_82, 1, 190, :_reduce_none, 3, 190, :_reduce_84, 2, 189, :_reduce_85, 3, 189, :_reduce_86, 1, 192, :_reduce_87, 3, 192, :_reduce_88, 1, 191, :_reduce_89, 1, 191, :_reduce_90, 4, 191, :_reduce_91, 3, 191, :_reduce_92, 3, 191, :_reduce_93, 3, 191, :_reduce_94, 3, 191, :_reduce_95, 2, 191, :_reduce_96, 1, 191, :_reduce_97, 1, 167, :_reduce_98, 1, 167, :_reduce_99, 4, 167, :_reduce_100, 3, 167, :_reduce_101, 3, 167, :_reduce_102, 3, 167, :_reduce_103, 3, 167, :_reduce_104, 2, 167, :_reduce_105, 1, 167, :_reduce_106, 1, 195, :_reduce_107, 1, 195, :_reduce_none, 2, 196, :_reduce_109, 1, 196, :_reduce_110, 3, 196, :_reduce_111, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 200, :_reduce_117, 1, 200, :_reduce_none, 1, 156, :_reduce_none, 1, 156, :_reduce_none, 1, 157, :_reduce_121, 0, 203, :_reduce_122, 4, 157, :_reduce_123, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 3, 173, :_reduce_195, 5, 173, :_reduce_196, 3, 173, :_reduce_197, 5, 173, :_reduce_198, 6, 173, :_reduce_199, 5, 173, :_reduce_200, 5, 173, :_reduce_201, 5, 173, :_reduce_202, 5, 173, :_reduce_203, 4, 173, :_reduce_204, 3, 173, :_reduce_205, 3, 173, :_reduce_206, 3, 173, :_reduce_207, 3, 173, :_reduce_208, 3, 173, :_reduce_209, 3, 173, :_reduce_210, 3, 173, :_reduce_211, 3, 173, :_reduce_212, 3, 173, :_reduce_213, 4, 173, :_reduce_214, 4, 173, :_reduce_215, 2, 173, :_reduce_216, 2, 173, :_reduce_217, 3, 173, :_reduce_218, 3, 173, :_reduce_219, 3, 173, :_reduce_220, 3, 173, :_reduce_221, 3, 173, :_reduce_222, 3, 173, :_reduce_223, 3, 173, :_reduce_224, 3, 173, :_reduce_225, 3, 173, :_reduce_226, 3, 173, :_reduce_227, 3, 173, :_reduce_228, 3, 173, :_reduce_229, 3, 173, :_reduce_230, 2, 173, :_reduce_231, 2, 173, :_reduce_232, 3, 173, :_reduce_233, 3, 173, :_reduce_234, 3, 173, :_reduce_235, 3, 173, :_reduce_236, 3, 173, :_reduce_237, 6, 173, :_reduce_238, 1, 173, :_reduce_none, 1, 169, :_reduce_none, 1, 205, :_reduce_none, 2, 205, :_reduce_none, 4, 205, :_reduce_243, 2, 205, :_reduce_244, 3, 210, :_reduce_245, 0, 211, :_reduce_246, 1, 211, :_reduce_none, 0, 164, :_reduce_248, 1, 164, :_reduce_none, 2, 164, :_reduce_none, 4, 164, :_reduce_251, 2, 164, :_reduce_252, 1, 185, :_reduce_253, 2, 185, :_reduce_254, 2, 185, :_reduce_255, 4, 185, :_reduce_256, 1, 185, :_reduce_257, 0, 214, :_reduce_258, 2, 179, :_reduce_259, 2, 213, :_reduce_260, 2, 212, :_reduce_261, 0, 212, :_reduce_262, 1, 207, :_reduce_263, 2, 207, :_reduce_264, 3, 207, :_reduce_265, 4, 207, :_reduce_266, 3, 168, :_reduce_267, 4, 168, :_reduce_268, 2, 168, :_reduce_269, 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_280, 0, 237, :_reduce_281, 4, 204, :_reduce_282, 0, 238, :_reduce_283, 0, 239, :_reduce_284, 6, 204, :_reduce_285, 0, 240, :_reduce_286, 4, 204, :_reduce_287, 3, 204, :_reduce_288, 3, 204, :_reduce_289, 2, 204, :_reduce_290, 3, 204, :_reduce_291, 3, 204, :_reduce_292, 1, 204, :_reduce_293, 4, 204, :_reduce_294, 3, 204, :_reduce_295, 1, 204, :_reduce_296, 5, 204, :_reduce_297, 4, 204, :_reduce_298, 3, 204, :_reduce_299, 2, 204, :_reduce_300, 1, 204, :_reduce_none, 2, 204, :_reduce_302, 2, 204, :_reduce_303, 6, 204, :_reduce_304, 6, 204, :_reduce_305, 0, 241, :_reduce_306, 0, 242, :_reduce_307, 7, 204, :_reduce_308, 0, 243, :_reduce_309, 0, 244, :_reduce_310, 7, 204, :_reduce_311, 5, 204, :_reduce_312, 4, 204, :_reduce_313, 0, 245, :_reduce_314, 0, 246, :_reduce_315, 9, 204, :_reduce_316, 0, 247, :_reduce_317, 6, 204, :_reduce_318, 0, 248, :_reduce_319, 7, 204, :_reduce_320, 0, 249, :_reduce_321, 5, 204, :_reduce_322, 0, 250, :_reduce_323, 6, 204, :_reduce_324, 0, 251, :_reduce_325, 0, 252, :_reduce_326, 9, 204, :_reduce_327, 1, 204, :_reduce_328, 1, 204, :_reduce_329, 1, 204, :_reduce_330, 1, 204, :_reduce_331, 1, 163, :_reduce_none, 1, 228, :_reduce_none, 1, 228, :_reduce_none, 2, 228, :_reduce_335, 1, 230, :_reduce_none, 1, 230, :_reduce_none, 1, 229, :_reduce_none, 5, 229, :_reduce_339, 1, 152, :_reduce_none, 2, 152, :_reduce_341, 1, 232, :_reduce_none, 1, 232, :_reduce_none, 1, 253, :_reduce_344, 3, 253, :_reduce_345, 1, 256, :_reduce_346, 3, 256, :_reduce_347, 1, 255, :_reduce_none, 4, 255, :_reduce_349, 6, 255, :_reduce_350, 3, 255, :_reduce_351, 5, 255, :_reduce_352, 2, 255, :_reduce_353, 4, 255, :_reduce_354, 1, 255, :_reduce_355, 3, 255, :_reduce_356, 4, 257, :_reduce_357, 2, 257, :_reduce_358, 2, 257, :_reduce_359, 1, 257, :_reduce_360, 2, 262, :_reduce_361, 0, 262, :_reduce_362, 6, 263, :_reduce_363, 8, 263, :_reduce_364, 4, 263, :_reduce_365, 6, 263, :_reduce_366, 4, 263, :_reduce_367, 2, 263, :_reduce_none, 6, 263, :_reduce_369, 2, 263, :_reduce_370, 4, 263, :_reduce_371, 6, 263, :_reduce_372, 2, 263, :_reduce_373, 4, 263, :_reduce_374, 2, 263, :_reduce_375, 4, 263, :_reduce_376, 1, 263, :_reduce_none, 0, 181, :_reduce_378, 1, 181, :_reduce_379, 3, 267, :_reduce_380, 1, 267, :_reduce_381, 4, 267, :_reduce_382, 1, 268, :_reduce_383, 4, 268, :_reduce_384, 1, 269, :_reduce_385, 3, 269, :_reduce_386, 1, 270, :_reduce_387, 1, 270, :_reduce_none, 0, 274, :_reduce_389, 3, 227, :_reduce_390, 4, 272, :_reduce_391, 1, 272, :_reduce_392, 0, 277, :_reduce_393, 4, 273, :_reduce_394, 0, 278, :_reduce_395, 4, 273, :_reduce_396, 0, 279, :_reduce_397, 5, 276, :_reduce_398, 2, 176, :_reduce_399, 4, 176, :_reduce_400, 5, 176, :_reduce_401, 5, 176, :_reduce_402, 2, 226, :_reduce_403, 4, 226, :_reduce_404, 4, 226, :_reduce_405, 3, 226, :_reduce_406, 3, 226, :_reduce_407, 3, 226, :_reduce_408, 2, 226, :_reduce_409, 1, 226, :_reduce_410, 4, 226, :_reduce_411, 0, 281, :_reduce_412, 5, 225, :_reduce_413, 0, 282, :_reduce_414, 5, 225, :_reduce_415, 5, 231, :_reduce_416, 1, 283, :_reduce_417, 1, 283, :_reduce_none, 6, 151, :_reduce_419, 0, 151, :_reduce_420, 1, 284, :_reduce_421, 1, 284, :_reduce_none, 1, 284, :_reduce_none, 2, 285, :_reduce_424, 1, 285, :_reduce_none, 2, 153, :_reduce_426, 1, 153, :_reduce_none, 1, 215, :_reduce_none, 1, 215, :_reduce_none, 1, 215, :_reduce_none, 1, 216, :_reduce_431, 1, 287, :_reduce_432, 2, 287, :_reduce_433, 3, 288, :_reduce_434, 1, 288, :_reduce_435, 1, 288, :_reduce_436, 3, 217, :_reduce_437, 4, 218, :_reduce_438, 3, 219, :_reduce_439, 0, 292, :_reduce_440, 3, 292, :_reduce_441, 1, 293, :_reduce_442, 2, 293, :_reduce_443, 3, 221, :_reduce_444, 0, 295, :_reduce_445, 3, 295, :_reduce_446, 3, 220, :_reduce_447, 3, 222, :_reduce_448, 0, 296, :_reduce_449, 3, 296, :_reduce_450, 0, 297, :_reduce_451, 3, 297, :_reduce_452, 0, 289, :_reduce_453, 2, 289, :_reduce_454, 0, 290, :_reduce_455, 2, 290, :_reduce_456, 0, 291, :_reduce_457, 2, 291, :_reduce_458, 1, 294, :_reduce_459, 2, 294, :_reduce_460, 0, 299, :_reduce_461, 4, 294, :_reduce_462, 1, 298, :_reduce_463, 1, 298, :_reduce_464, 1, 298, :_reduce_465, 1, 298, :_reduce_none, 1, 201, :_reduce_467, 3, 202, :_reduce_468, 1, 286, :_reduce_469, 1, 286, :_reduce_470, 2, 286, :_reduce_471, 2, 286, :_reduce_472, 1, 193, :_reduce_473, 1, 193, :_reduce_474, 1, 193, :_reduce_475, 1, 193, :_reduce_476, 1, 193, :_reduce_477, 1, 194, :_reduce_478, 1, 194, :_reduce_479, 1, 194, :_reduce_480, 1, 194, :_reduce_481, 1, 194, :_reduce_482, 1, 194, :_reduce_483, 1, 194, :_reduce_484, 1, 223, :_reduce_485, 1, 223, :_reduce_486, 1, 162, :_reduce_487, 1, 162, :_reduce_488, 1, 166, :_reduce_489, 1, 166, :_reduce_490, 1, 233, :_reduce_491, 0, 300, :_reduce_492, 4, 233, :_reduce_493, 2, 233, :_reduce_494, 3, 235, :_reduce_495, 2, 235, :_reduce_496, 4, 301, :_reduce_497, 2, 301, :_reduce_498, 2, 301, :_reduce_499, 1, 301, :_reduce_500, 2, 303, :_reduce_501, 0, 303, :_reduce_502, 6, 275, :_reduce_503, 8, 275, :_reduce_504, 4, 275, :_reduce_505, 6, 275, :_reduce_506, 4, 275, :_reduce_507, 6, 275, :_reduce_508, 2, 275, :_reduce_509, 4, 275, :_reduce_510, 6, 275, :_reduce_511, 2, 275, :_reduce_512, 4, 275, :_reduce_513, 2, 275, :_reduce_514, 4, 275, :_reduce_515, 1, 275, :_reduce_516, 0, 275, :_reduce_517, 1, 271, :_reduce_518, 1, 271, :_reduce_519, 1, 271, :_reduce_520, 1, 271, :_reduce_521, 1, 254, :_reduce_none, 1, 254, :_reduce_none, 1, 305, :_reduce_524, 3, 305, :_reduce_525, 1, 264, :_reduce_526, 3, 264, :_reduce_527, 2, 306, :_reduce_528, 2, 307, :_reduce_529, 1, 258, :_reduce_530, 3, 258, :_reduce_531, 1, 302, :_reduce_532, 3, 302, :_reduce_533, 1, 308, :_reduce_none, 1, 308, :_reduce_none, 2, 259, :_reduce_536, 1, 259, :_reduce_537, 3, 309, :_reduce_538, 3, 310, :_reduce_539, 1, 265, :_reduce_540, 3, 265, :_reduce_541, 1, 304, :_reduce_542, 3, 304, :_reduce_543, 1, 311, :_reduce_none, 1, 311, :_reduce_none, 2, 266, :_reduce_546, 1, 266, :_reduce_547, 1, 312, :_reduce_none, 1, 312, :_reduce_none, 2, 261, :_reduce_550, 2, 260, :_reduce_551, 0, 260, :_reduce_552, 1, 236, :_reduce_none, 3, 236, :_reduce_554, 0, 224, :_reduce_555, 2, 224, :_reduce_none, 1, 209, :_reduce_557, 3, 209, :_reduce_558, 3, 313, :_reduce_559, 2, 313, :_reduce_560, 2, 313, :_reduce_561, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 178, :_reduce_none, 1, 178, :_reduce_none, 1, 178, :_reduce_none, 1, 178, :_reduce_none, 1, 280, :_reduce_none, 1, 280, :_reduce_none, 1, 280, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 0, 145, :_reduce_none, 1, 145, :_reduce_none, 0, 172, :_reduce_none, 1, 172, :_reduce_none, 2, 188, :_reduce_578, 2, 165, :_reduce_579, 0, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 234, :_reduce_583, 1, 234, :_reduce_none, 1, 147, :_reduce_none, 2, 147, :_reduce_none, 0, 206, :_reduce_587 ] racc_reduce_n = 588 racc_shift_n = 1016 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tDSTAR => 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, :tREGEXP_OPT => 119, :tWORDS_BEG => 120, :tQWORDS_BEG => 121, :tSYMBOLS_BEG => 122, :tQSYMBOLS_BEG => 123, :tSTRING_DBEG => 124, :tSTRING_DVAR => 125, :tSTRING_END => 126, :tSTRING_DEND => 127, :tSTRING => 128, :tSYMBOL => 129, :tNL => 130, :tEH => 131, :tCOLON => 132, :tCOMMA => 133, :tSPACE => 134, :tSEMI => 135, :tLAMBDA => 136, :tLAMBEG => 137, :tCHARACTER => 138, :tEQL => 139, :tLOWEST => 140 } racc_nt_base = 141 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tDSTAR", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING_DEND", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "backref", "lhs", "mrhs", "arg_value", "expr", "@1", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@2", "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", "@3", "primary", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@4", "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", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "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", "@21", "f_args", "do_block", "@22", "@23", "@24", "operation3", "@25", "@26", "cases", "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", "@27", "@28", "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", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_9(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_10(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_11(val, _values, result) result = [] result end def _reduce_12(val, _values, result) result = [ val[0] ] result end def _reduce_13(val, _values, result) result = val[0] << val[2] result end def _reduce_14(val, _values, result) result = [ val[1] ] result end # reduce 15 omitted def _reduce_16(val, _values, result) if @context.indirectly_in_def? diagnostic :error, :begin_in_method, nil, val[0] end result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_17(val, _values, result) @lexer.state = :expr_fname result end def _reduce_18(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_19(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_20(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_21(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_22(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_23(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_25(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_26(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_27(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_28(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 29 omitted def _reduce_30(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_31(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_32(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_33(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_34(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_35(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_36(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_37(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_38(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_39(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_40(val, _values, result) result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end # reduce 41 omitted def _reduce_42(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_43(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end # reduce 44 omitted def _reduce_45(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_46(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_47(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_48(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 49 omitted # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted # reduce 53 omitted def _reduce_54(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_55(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_56(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end # reduce 57 omitted def _reduce_58(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_59(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_60(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_61(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_62(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_63(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_64(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_65(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_66(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_67(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_68(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_69(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_70(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_71(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_72(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 73 omitted def _reduce_74(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_75(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_76(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_77(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_78(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_79(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_80(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_81(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_82(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 83 omitted def _reduce_84(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_85(val, _values, result) result = [ val[0] ] result end def _reduce_86(val, _values, result) result = val[0] << val[1] result end def _reduce_87(val, _values, result) result = [ val[0] ] result end def _reduce_88(val, _values, result) result = val[0] << val[2] result end def _reduce_89(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_90(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_91(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_92(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_93(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_94(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_95(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_96(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_97(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_98(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_99(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_100(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_101(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_102(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_103(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_104(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_105(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_106(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_107(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 108 omitted def _reduce_109(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_110(val, _values, result) result = @builder.const(val[0]) result end def _reduce_111(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted # reduce 115 omitted # reduce 116 omitted def _reduce_117(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 118 omitted # reduce 119 omitted # reduce 120 omitted def _reduce_121(val, _values, result) result = [ val[0] ] result end def _reduce_122(val, _values, result) @lexer.state = :expr_fname result end def _reduce_123(val, _values, result) result = 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 = @builder.assign(val[0], val[1], val[2]) result end def _reduce_196(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) result end def _reduce_197(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_198(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) result end def _reduce_199(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_200(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_201(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_202(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_203(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_204(val, _values, result) const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) result end def _reduce_205(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_207(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_214(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) result end def _reduce_215(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) result end def _reduce_216(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_217(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_218(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_225(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_229(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_230(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_231(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_232(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_233(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_235(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_236(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_237(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_238(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 239 omitted # reduce 240 omitted # reduce 241 omitted # reduce 242 omitted def _reduce_243(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_244(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_245(val, _values, result) result = val result end def _reduce_246(val, _values, result) result = [ nil, [], nil ] result end # reduce 247 omitted def _reduce_248(val, _values, result) result = [] result end # reduce 249 omitted # reduce 250 omitted def _reduce_251(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_252(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_253(val, _values, result) result = [ val[0] ] result end def _reduce_254(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_255(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_256(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_257(val, _values, result) result = [ val[0] ] result end def _reduce_258(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) result end def _reduce_259(val, _values, result) @lexer.cmdarg = val[0] result = val[1] result end def _reduce_260(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_261(val, _values, result) result = [ val[1] ] result end def _reduce_262(val, _values, result) result = [] result end def _reduce_263(val, _values, result) result = [ val[0] ] result end def _reduce_264(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_265(val, _values, result) result = val[0] << val[2] result end def _reduce_266(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_267(val, _values, result) result = val[0] << val[2] result end def _reduce_268(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_269(val, _values, result) result = [ @builder.splat(val[0], 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 # reduce 278 omitted # reduce 279 omitted def _reduce_280(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_281(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_282(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin_keyword(val[0], val[2], val[3]) result end def _reduce_283(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_284(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_285(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) result end def _reduce_286(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_287(val, _values, result) result = @builder.begin(val[0], nil, val[3]) result end def _reduce_288(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_289(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_290(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_291(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_292(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_293(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_294(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_295(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_296(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_297(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_298(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_299(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_300(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 301 omitted def _reduce_302(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_303(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_304(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_305(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) 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 = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_309(val, _values, result) @lexer.cond.push(true) result end def _reduce_310(val, _values, result) @lexer.cond.pop result end def _reduce_311(val, _values, result) result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_312(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_313(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_314(val, _values, result) @lexer.cond.push(true) result end def _reduce_315(val, _values, result) @lexer.cond.pop result end def _reduce_316(val, _values, result) result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_317(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:class) result end def _reduce_318(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_319(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) result end def _reduce_320(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_321(val, _values, result) @static_env.extend_static @lexer.push_cmdarg result end def _reduce_322(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend result end def _reduce_323(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:def) result end def _reduce_324(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_325(val, _values, result) @lexer.state = :expr_fname result end def _reduce_326(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) result end def _reduce_327(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_328(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_329(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_330(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_331(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 332 omitted # reduce 333 omitted # reduce 334 omitted def _reduce_335(val, _values, result) result = val[1] result end # reduce 336 omitted # reduce 337 omitted # reduce 338 omitted def _reduce_339(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 340 omitted def _reduce_341(val, _values, result) result = val result end # reduce 342 omitted # reduce 343 omitted def _reduce_344(val, _values, result) @static_env.declare val[0][0] result = @builder.arg(val[0]) result end def _reduce_345(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_346(val, _values, result) result = [ val[0] ] result end def _reduce_347(val, _values, result) result = val[0] << val[2] result end # reduce 348 omitted def _reduce_349(val, _values, result) @static_env.declare val[3][0] result = val[0]. push(@builder.restarg(val[2], val[3])) result end def _reduce_350(val, _values, result) @static_env.declare val[3][0] result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) result end def _reduce_351(val, _values, result) result = val[0]. push(@builder.restarg(val[2])) result end def _reduce_352(val, _values, result) result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) result end def _reduce_353(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_354(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]), *val[3] ] result end def _reduce_355(val, _values, result) result = [ @builder.restarg(val[0]) ] result end def _reduce_356(val, _values, result) result = [ @builder.restarg(val[0]), *val[2] ] result end def _reduce_357(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_358(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_359(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_360(val, _values, result) result = [ val[0] ] result end def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = [] result end def _reduce_363(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_364(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_365(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_366(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_367(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 368 omitted def _reduce_369(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_370(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_371(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_372(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_373(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_374(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_375(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_376(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 377 omitted def _reduce_378(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_379(val, _values, result) @lexer.state = :expr_value result end def _reduce_380(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_381(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_382(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_383(val, _values, result) result = [] result end def _reduce_384(val, _values, result) result = val[2] result end def _reduce_385(val, _values, result) result = [ val[0] ] result end def _reduce_386(val, _values, result) result = val[0] << val[2] result end def _reduce_387(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 388 omitted def _reduce_389(val, _values, result) @static_env.extend_dynamic result end def _reduce_390(val, _values, result) result = [ val[1], val[2] ] @static_env.unextend result end def _reduce_391(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_392(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_393(val, _values, result) @context.push(:lambda) result end def _reduce_394(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_395(val, _values, result) @context.push(:lambda) result end def _reduce_396(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_397(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_398(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_399(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_400(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_401(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_402(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_403(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_404(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_405(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_406(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_407(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_408(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_409(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_410(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_411(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_412(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_413(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_414(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_415(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_416(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_417(val, _values, result) result = [ val[0] ] result end # reduce 418 omitted def _reduce_419(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_420(val, _values, result) result = [] result end def _reduce_421(val, _values, result) result = [ val[0] ] result end # reduce 422 omitted # reduce 423 omitted def _reduce_424(val, _values, result) result = [ val[0], val[1] ] result end # reduce 425 omitted def _reduce_426(val, _values, result) result = [ val[0], val[1] ] result end # reduce 427 omitted # reduce 428 omitted # reduce 429 omitted # reduce 430 omitted def _reduce_431(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_432(val, _values, result) result = [ val[0] ] result end def _reduce_433(val, _values, result) result = val[0] << val[1] result end def _reduce_434(val, _values, result) result = @builder.string_compose(val[0], val[1], val[2]) result end def _reduce_435(val, _values, result) result = @builder.string(val[0]) result end def _reduce_436(val, _values, result) result = @builder.character(val[0]) result end def _reduce_437(val, _values, result) result = @builder.xstring_compose(val[0], val[1], val[2]) result end def _reduce_438(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_439(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_440(val, _values, result) result = [] result end def _reduce_441(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_442(val, _values, result) result = [ val[0] ] result end def _reduce_443(val, _values, result) result = val[0] << val[1] result end def _reduce_444(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_445(val, _values, result) result = [] result end def _reduce_446(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_447(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_448(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_449(val, _values, result) result = [] result end def _reduce_450(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_451(val, _values, result) result = [] result end def _reduce_452(val, _values, result) result = val[0] << @builder.symbol_internal(val[1]) result end def _reduce_453(val, _values, result) result = [] result end def _reduce_454(val, _values, result) result = val[0] << val[1] result end def _reduce_455(val, _values, result) result = [] result end def _reduce_456(val, _values, result) result = val[0] << val[1] result end def _reduce_457(val, _values, result) result = [] result end def _reduce_458(val, _values, result) result = val[0] << val[1] result end def _reduce_459(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_460(val, _values, result) result = val[1] result end def _reduce_461(val, _values, result) @lexer.cond.push(false) @lexer.cmdarg.push(false) result end def _reduce_462(val, _values, result) @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_463(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_464(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_465(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 466 omitted def _reduce_467(val, _values, result) result = @builder.symbol(val[0]) result end def _reduce_468(val, _values, result) result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_469(val, _values, result) result = @builder.integer(val[0]) result end def _reduce_470(val, _values, result) result = @builder.float(val[0]) result end def _reduce_471(val, _values, result) num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_472(val, _values, result) num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_473(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_474(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_475(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_476(val, _values, result) result = @builder.const(val[0]) result end def _reduce_477(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_478(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_479(val, _values, result) result = @builder.self(val[0]) result end def _reduce_480(val, _values, result) result = @builder.true(val[0]) result end def _reduce_481(val, _values, result) result = @builder.false(val[0]) result end def _reduce_482(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_483(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_484(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_485(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_486(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_487(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_488(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_489(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_490(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_491(val, _values, result) result = nil result end def _reduce_492(val, _values, result) @lexer.state = :expr_value result end def _reduce_493(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_494(val, _values, result) yyerrok result = nil result end def _reduce_495(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_496(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_497(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_498(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_499(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_500(val, _values, result) result = [ val[0] ] result end def _reduce_501(val, _values, result) result = val[1] result end def _reduce_502(val, _values, result) result = [] result end def _reduce_503(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_504(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_505(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_506(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_507(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_508(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_509(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_510(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_511(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_512(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_513(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_514(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_515(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_516(val, _values, result) result = val[0] result end def _reduce_517(val, _values, result) result = [] result end def _reduce_518(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_519(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_520(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_521(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 522 omitted # reduce 523 omitted def _reduce_524(val, _values, result) @static_env.declare val[0][0] result = @builder.arg(val[0]) result end def _reduce_525(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_526(val, _values, result) result = [ val[0] ] result end def _reduce_527(val, _values, result) result = val[0] << val[2] result end def _reduce_528(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_529(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_530(val, _values, result) result = [ val[0] ] result end def _reduce_531(val, _values, result) result = val[0] << val[2] result end def _reduce_532(val, _values, result) result = [ val[0] ] result end def _reduce_533(val, _values, result) result = val[0] << val[2] result end # reduce 534 omitted # reduce 535 omitted def _reduce_536(val, _values, result) @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] result end def _reduce_537(val, _values, result) result = [ @builder.kwrestarg(val[0]) ] result end def _reduce_538(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_539(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_540(val, _values, result) result = [ val[0] ] result end def _reduce_541(val, _values, result) result = val[0] << val[2] result end def _reduce_542(val, _values, result) result = [ val[0] ] result end def _reduce_543(val, _values, result) result = val[0] << val[2] result end # reduce 544 omitted # reduce 545 omitted def _reduce_546(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_547(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 548 omitted # reduce 549 omitted def _reduce_550(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_551(val, _values, result) result = [ val[1] ] result end def _reduce_552(val, _values, result) result = [] result end # reduce 553 omitted def _reduce_554(val, _values, result) result = val[1] result end def _reduce_555(val, _values, result) result = [] result end # reduce 556 omitted def _reduce_557(val, _values, result) result = [ val[0] ] result end def _reduce_558(val, _values, result) result = val[0] << val[2] result end def _reduce_559(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_560(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end def _reduce_561(val, _values, result) result = @builder.kwsplat(val[0], val[1]) result end # 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 # reduce 575 omitted # reduce 576 omitted # reduce 577 omitted def _reduce_578(val, _values, result) result = val[1] result end def _reduce_579(val, _values, result) result = val[1] result end # reduce 580 omitted # reduce 581 omitted # reduce 582 omitted def _reduce_583(val, _values, result) yyerrok result end # reduce 584 omitted # reduce 585 omitted # reduce 586 omitted def _reduce_587(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby20 end # module Parser parser-2.7.0.2/lib/parser/ruby25.y0000644000004100000410000024756713617025313016616 0ustar www-datawww-dataclass Parser::Ruby25 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 tUPLUS tUMINUS tUNARY_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 tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER tRATIONAL tIMAGINARY tLABEL_END tANDDOT prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN begin_block { result = @builder.preexe(val[0], *val[1]) } begin_block: tLCURLY top_compstmt tRCURLY { result = val } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt_or_begin { result = [ val[0] ] } | stmts terms stmt_or_begin { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt_or_begin: stmt | klBEGIN begin_block { diagnostic :error, :begin_in_method, nil, val[0] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL mrhs_arg { result = @builder.multi_assign(val[0], val[1], val[2]) } | expr command_asgn: lhs tEQL command_rhs { result = @builder.assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_rhs { @builder.op_assign(val[0], val[1], val[2]) } command_rhs: command_call =tOP_ASGN | command_call kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | command_asgn expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr expr_value_do: { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop result = [ val[1], val[2] ] } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @context.push(:block) } brace_body tRCURLY { result = [ val[0], *val[2], val[3] ] @context.pop } fcall: operation command: fcall command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | fcall command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value call_op operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value call_op operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | k_return call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 | tDSTAR | 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_rhs { result = @builder.assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | tCOLON3 tCONSTANT tOP_ASGN arg_rhs { const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) } | backref tOP_ASGN arg_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM simple_numeric tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | rel_expr =tCMP | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary relop: tGT | tLT | tGEQ | tLEQ rel_expr: arg relop arg =tGT { result = @builder.binary_op(val[0], val[1], val[2]) } | rel_expr relop arg =tGT { result = @builder.binary_op(val[0], val[1], val[2]) } arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } arg_rhs: arg =tOP_ASGN | arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { # When branch gets invoked by RACC's lookahead # and command args start with '[' or '(' # we need to put `true` to the cmdarg stack # **before** `false` pushed by lexer # m [], n # ^ # Right here we have cmdarg [...0] because # lexer pushed it on '[' # We need to modify cmdarg stack to [...10] # # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack # and later lexer pushes corresponding bits on top of it. last_token = @last_token[0] lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.push(true) @lexer.cmdarg.push(top) else @lexer.cmdarg.push(true) end } call_args { # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) # but the push must be done after cmdarg.pop() in the parser. # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, # cmdarg.pop() to pop 1 pushed by command_args, # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. last_token = @last_token[0] lookahead = last_token == :tLBRACE_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.pop @lexer.cmdarg.push(top) else @lexer.cmdarg.pop end result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs_arg: mrhs { result = @builder.array(nil, val[0], nil) } | arg_value mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN { @lexer.cmdarg.push(false) } bodystmt kEND { @lexer.cmdarg.pop result = @builder.begin_keyword(val[0], val[2], val[3]) } | tLPAREN_ARG stmt { @lexer.state = :expr_endarg } rparen { result = @builder.begin(val[0], val[1], val[3]) } | tLPAREN_ARG { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], nil, val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | k_return { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | fcall brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE expr_value_do compstmt kEND { result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) } | kUNTIL expr_value_do compstmt kEND { result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN expr_value_do compstmt kEND { result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.cmdarg.push(false) } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.cmdarg.pop @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary k_return: kRETURN { if @context.in_class? diagnostic :error, :invalid_return, nil, val[0] end } then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { result = val[0]. push(@builder.restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { result = [ @builder.restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { result = [ @builder.restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.restarg(val[0]), *val[2] ] } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_block_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_block_args_tail: tCOMMA block_args_tail { result = val[1] } | # nothing { result = [] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_block_args_tail { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | block_args_tail opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: opt_nl { result = [] } | opt_nl tSEMI bv_decls opt_nl { result = val[2] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist { @lexer.cmdarg.push(false) } lambda_body { @lexer.cmdarg.pop result = [ val[1], val[3] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @context.push(:block) } do_body kEND { result = [ val[0], *val[2], val[3] ] @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call dot_or_colon operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call dot_or_colon operation2 opt_paren_args brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | block_call dot_or_colon operation2 command_args do_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } method_call: fcall paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value call_op operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value call_op paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @context.push(:block) } brace_body tRCURLY { result = [ val[0], *val[2], val[3] ] @context.pop } | kDO { @context.push(:block) } do_body kEND { result = [ val[0], *val[2], val[3] ] @context.pop } brace_body: { @static_env.extend_dynamic } opt_block_param compstmt { result = [ val[1], val[2] ] @static_env.unextend } do_body: { @static_env.extend_dynamic } { @lexer.cmdarg.push(false) } opt_block_param bodystmt { result = [ val[2], val[3] ] @static_env.unextend @lexer.cmdarg.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tSTRING { string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } symbols: tSYMBOLS_BEG symbol_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } symbol_list: # nothing { result = [] } | symbol_list word tSPACE { result = val[0] << @builder.word(val[1]) } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } qsym_list: # nothing { result = [] } | qsym_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.symbol_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cmdarg.push(false) @lexer.cond.push(false) } compstmt tSTRING_DEND { @lexer.cmdarg.pop @lexer.cond.pop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { @lexer.state = :expr_end result = @builder.symbol(val[0]) } dsym: tSYMBEG string_contents tSTRING_END { @lexer.state = :expr_end result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: simple_numeric { result = val[0] } | tUNARY_NUM simple_numeric =tLOWEST { if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end } simple_numeric: tINTEGER { @lexer.state = :expr_end result = @builder.integer(val[0]) } | tFLOAT { @lexer.state = :expr_end result = @builder.float(val[0]) } | tRATIONAL { @lexer.state = :expr_end result = @builder.rational(val[0]) } | tIMAGINARY { @lexer.state = :expr_end result = @builder.complex(val[0]) } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: tLT { @lexer.state = :expr_value } expr_value term { result = [ val[0], val[2] ] } | # nothing { result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | { result = @lexer.in_kwarg @lexer.in_kwarg = true } f_args term { @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_args_tail: tCOMMA args_tail { result = val[1] } | # nothing { result = [] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | args_tail { result = val[0] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] result = val[0] } f_arg_asgn: f_norm_arg { result = val[0] } f_arg_item: f_arg_asgn { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_label: tLABEL { check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] } f_kw: f_label arg_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kw: f_label primary_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kwarg: f_block_kw { result = [ val[0] ] } | f_block_kwarg tCOMMA f_block_kw { result = val[0] << val[2] } f_kwarg: f_kw { result = [ val[0] ] } | f_kwarg tCOMMA f_kw { result = val[0] << val[2] } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.kwrestarg(val[0]) ] } f_opt: f_arg_asgn tEQL arg_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: f_arg_asgn tEQL primary_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } | tSTRING_BEG string_contents tLABEL_END arg_value { result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) } | tDSTAR arg_value { result = @builder.kwsplat(val[0], val[1]) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: call_op | tCOLON2 call_op: tDOT { result = [:dot, val[0][1]] } | tANDDOT { result = [:anddot, val[0][1]] } opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 25 end def default_encoding Encoding::UTF_8 end parser-2.7.0.2/lib/parser/current_arg_stack.rb0000644000004100000410000000122213617025313021271 0ustar www-datawww-data# frozen_string_literal: true module Parser # Stack that holds names of current arguments, # i.e. while parsing # def m1(a = (def m2(b = def m3(c = 1); end); end)); end # ^ # stack is [:a, :b, :c] # # Emulates `p->cur_arg` in MRI's parse.y # # @api private # class CurrentArgStack attr_reader :stack def initialize @stack = [] freeze end def push(value) @stack << value end def set(value) pop push(value) end def pop @stack.pop end def reset @stack.clear end def top @stack.last end end end parser-2.7.0.2/lib/parser/lexer.rb0000644000004100000410000277252613617025313016740 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # line 1 "lib/parser/lexer.rl" # line 3 "lib/parser/lexer.rl" # # === BEFORE YOU START === # # Read the Ruby Hacking Guide chapter 11, available in English at # http://whitequark.org/blog/2013/04/01/ruby-hacking-guide-ch-11-finite-state-lexer/ # # Remember two things about Ragel scanners: # # 1) Longest match wins. # # 2) If two matches have the same length, the first # in source code wins. # # General rules of making Ragel and Bison happy: # # * `p` (position) and `@te` contain the index of the character # they're pointing to ("current"), plus one. `@ts` contains the index # of the corresponding character. The code for extracting matched token is: # # @source_buffer.slice(@ts...@te) # # * If your input is `foooooooobar` and the rule is: # # 'f' 'o'+ # # the result will be: # # foooooooobar # ^ ts=0 ^ p=te=9 # # * A Ragel lexer action should not emit more than one token, unless # you know what you are doing. # # * All Ragel commands (fnext, fgoto, ...) end with a semicolon. # # * If an action emits the token and transitions to another state, use # these Ragel commands: # # emit($whatever) # fnext $next_state; fbreak; # # If you perform `fgoto` in an action which does not emit a token nor # rewinds the stream pointer, the parser's side-effectful, # context-sensitive lookahead actions will break in a hard to detect # and debug way. # # * If an action does not emit a token: # # fgoto $next_state; # # * If an action features lookbehind, i.e. matches characters with the # intent of passing them to another action: # # p = @ts - 1 # fgoto $next_state; # # or, if the lookbehind consists of a single character: # # fhold; fgoto $next_state; # # * Ragel merges actions. So, if you have `e_lparen = '(' %act` and # `c_lparen = '('` and a lexer action `e_lparen | c_lparen`, the result # _will_ invoke the action `act`. # # e_something stands for "something with **e**mbedded action". # # * EOF is explicit and is matched by `c_eof`. If you want to introspect # the state of the lexer, add this rule to the state: # # c_eof => do_eof; # # * If you proceed past EOF, the lexer will complain: # # NoMethodError: undefined method `ord' for nil:NilClass # class Parser::Lexer # line 85 "lib/parser/lexer.rb" class << self attr_accessor :_lex_trans_keys private :_lex_trans_keys, :_lex_trans_keys= end self._lex_trans_keys = [ 0, 0, 101, 101, 103, 103, 105, 105, 110, 110, 69, 69, 78, 78, 68, 68, 95, 95, 95, 95, 0, 26, 0, 127, 0, 127, 0, 127, 0, 127, 0, 45, 0, 77, 0, 77, 0, 92, 0, 26, 0, 26, 0, 45, 0, 99, 0, 26, 67, 99, 45, 45, 0, 92, 0, 77, 0, 102, 0, 127, 0, 127, 0, 127, 0, 127, 0, 45, 0, 77, 0, 77, 0, 92, 0, 26, 0, 26, 0, 45, 0, 99, 0, 26, 67, 99, 45, 45, 0, 92, 0, 77, 0, 102, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 26, 0, 127, 58, 58, 58, 58, 0, 127, 58, 58, 60, 60, 62, 62, 10, 10, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 115, 115, 99, 99, 117, 117, 101, 101, 108, 116, 101, 101, 115, 115, 115, 115, 105, 105, 108, 108, 105, 105, 108, 108, 58, 58, 0, 127, 10, 10, 0, 127, 9, 92, 10, 10, 9, 92, 58, 58, 98, 98, 101, 101, 103, 103, 105, 105, 110, 110, 0, 122, 61, 61, 9, 92, 9, 92, 9, 92, 9, 92, 9, 92, 10, 10, 0, 127, 0, 127, 61, 126, 93, 93, 0, 127, 0, 127, 10, 10, 34, 34, 10, 10, 39, 39, 0, 127, 10, 96, 96, 96, 0, 45, 0, 77, 0, 77, 0, 92, 0, 26, 0, 26, 0, 45, 0, 99, 0, 26, 67, 99, 45, 45, 0, 92, 0, 77, 0, 102, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 58, 58, 58, 58, 0, 127, 43, 57, 48, 57, 48, 57, 48, 57, 48, 57, 115, 115, 99, 99, 117, 117, 101, 101, 99, 99, 117, 117, 101, 101, 0, 127, 58, 58, 9, 92, 9, 92, 9, 92, 9, 92, 9, 92, 9, 92, 60, 60, 10, 10, 9, 46, 9, 32, 10, 10, 10, 10, 10, 10, 10, 10, 46, 46, 0, 95, 9, 32, 0, 0, 10, 10, 10, 10, 98, 98, 9, 32, 10, 10, 95, 95, 0, 92, 9, 32, 36, 123, 0, 127, 48, 57, 0, 127, 0, 120, 0, 0, 0, 0, 48, 55, 48, 55, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 92, 45, 45, 0, 0, 0, 0, 0, 0, 0, 92, 0, 45, 0, 92, 0, 92, 0, 0, 0, 0, 0, 92, 0, 45, 10, 10, 0, 92, 48, 123, 48, 102, 48, 102, 48, 102, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 0, 48, 102, 0, 0, 0, 92, 36, 123, 0, 127, 48, 57, 0, 127, 0, 120, 0, 0, 0, 0, 48, 55, 48, 55, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 92, 45, 45, 0, 0, 0, 0, 0, 0, 0, 92, 0, 45, 0, 92, 0, 92, 0, 0, 0, 0, 0, 92, 0, 45, 10, 10, 0, 92, 48, 123, 48, 102, 48, 102, 48, 102, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 0, 48, 102, 0, 0, 0, 92, 9, 32, 0, 26, 0, 92, 0, 26, 0, 35, 36, 123, 0, 127, 48, 57, 0, 127, 0, 26, 0, 35, 9, 32, 36, 123, 0, 127, 48, 57, 0, 127, 0, 32, 9, 32, 65, 122, 65, 122, 36, 64, 0, 127, 48, 57, 0, 127, 0, 127, 0, 127, 0, 127, 9, 32, 0, 0, 61, 126, 10, 10, 10, 10, 0, 127, 0, 127, 48, 57, 115, 115, 38, 38, 42, 42, 64, 64, 58, 58, 60, 61, 62, 62, 61, 126, 61, 61, 61, 62, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 93, 93, 10, 10, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 124, 124, 0, 127, 0, 127, 9, 32, 10, 10, 10, 10, 10, 10, 0, 0, 0, 127, 0, 127, 61, 61, 0, 0, 9, 32, 0, 0, 61, 126, 10, 10, 10, 10, 38, 38, 42, 42, 64, 64, 60, 61, 62, 62, 61, 126, 61, 61, 61, 62, 0, 127, 93, 93, 10, 10, 124, 124, 0, 126, 0, 127, 0, 61, 9, 61, 9, 61, 0, 0, 9, 61, 9, 62, 46, 46, 46, 46, 58, 58, 9, 32, 0, 0, 0, 127, 0, 0, 9, 124, 0, 0, 10, 10, 10, 10, 0, 0, 9, 61, 58, 58, 60, 60, 62, 62, 9, 32, 10, 10, 0, 127, 102, 102, 101, 101, 110, 110, 104, 104, 0, 127, 0, 127, 0, 127, 0, 0, 0, 127, 10, 10, 0, 123, 9, 32, 10, 10, 10, 10, 10, 10, 0, 0, 111, 111, 0, 0, 0, 127, 0, 127, 9, 32, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 58, 61, 0, 0, 61, 126, 61, 61, 0, 0, 0, 0, 0, 0, 9, 32, 61, 61, 9, 32, 61, 126, 10, 10, 10, 10, 65, 122, 0, 122, 38, 61, 0, 0, 42, 61, 61, 61, 9, 92, 9, 92, 9, 92, 46, 46, 46, 46, 0, 26, 0, 127, 0, 127, 61, 61, 0, 0, 61, 126, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 61, 126, 0, 127, 48, 57, 38, 38, 42, 42, 64, 64, 60, 61, 62, 62, 61, 61, 61, 62, 0, 127, 48, 57, 0, 127, 124, 124, 64, 64, 60, 61, 0, 0, 10, 34, 10, 39, 96, 96, 62, 62, 61, 126, 61, 62, 0, 122, 0, 0, 0, 127, 0, 127, 0, 120, 0, 0, 0, 0, 48, 55, 48, 55, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 92, 45, 45, 0, 0, 0, 0, 0, 0, 0, 92, 0, 45, 0, 92, 0, 92, 0, 0, 0, 0, 0, 92, 0, 45, 10, 10, 0, 92, 48, 123, 48, 102, 48, 102, 48, 102, 0, 0, 0, 125, 0, 125, 0, 0, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 125, 0, 0, 0, 0, 48, 102, 0, 0, 0, 127, 0, 127, 0, 127, 0, 0, 10, 10, 0, 0, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 61, 126, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 0, 61, 124, 0, 92, 9, 32, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 127, 0, 127, 9, 32, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, 0, 127, 0, 127, 61, 61, 0, 0, 9, 32, 0, 0, 61, 126, 10, 10, 10, 10, 0, 127, 0, 127, 48, 57, 61, 61, 38, 61, 0, 0, 0, 0, 42, 61, 61, 62, 46, 57, 46, 46, 10, 10, 48, 101, 48, 95, 46, 120, 48, 114, 43, 57, 48, 105, 102, 102, 0, 0, 101, 105, 0, 0, 0, 0, 48, 114, 48, 114, 48, 114, 48, 114, 105, 114, 102, 102, 0, 0, 101, 105, 115, 115, 0, 0, 0, 0, 48, 114, 48, 114, 48, 114, 48, 114, 48, 114, 48, 114, 48, 114, 48, 114, 46, 114, 48, 114, 46, 114, 48, 114, 58, 58, 60, 61, 62, 62, 61, 126, 61, 61, 61, 62, 0, 127, 0, 127, 0, 0, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 0, 10, 10, 0, 0, 0, 0, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 9, 92, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 0, 61, 124, 0, 0, 9, 92, 9, 46, 9, 92, 10, 10, 46, 46, 10, 10, 10, 61, 10, 10, 10, 101, 10, 110, 10, 100, 10, 10, 0 ] class << self attr_accessor :_lex_key_spans private :_lex_key_spans, :_lex_key_spans= end self._lex_key_spans = [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 128, 128, 128, 128, 46, 78, 78, 93, 27, 27, 46, 100, 27, 33, 1, 93, 78, 103, 128, 128, 128, 128, 46, 78, 78, 93, 27, 27, 46, 100, 27, 33, 1, 93, 78, 103, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 27, 128, 1, 1, 128, 1, 1, 1, 1, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 128, 1, 128, 84, 1, 84, 1, 1, 1, 1, 1, 1, 123, 1, 84, 84, 84, 84, 84, 1, 128, 128, 66, 1, 128, 128, 1, 1, 1, 1, 128, 87, 1, 46, 78, 78, 93, 27, 27, 46, 100, 27, 33, 1, 93, 78, 103, 128, 128, 128, 128, 128, 128, 1, 1, 128, 15, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 128, 1, 84, 84, 84, 84, 84, 84, 1, 1, 38, 24, 1, 1, 1, 1, 1, 96, 24, 0, 1, 1, 1, 24, 1, 1, 93, 24, 88, 128, 10, 128, 121, 0, 0, 8, 8, 0, 0, 93, 0, 0, 0, 93, 1, 0, 0, 0, 93, 46, 93, 93, 0, 0, 93, 46, 1, 93, 76, 55, 55, 55, 0, 126, 126, 0, 126, 0, 126, 126, 126, 126, 0, 126, 126, 126, 126, 126, 126, 0, 0, 55, 0, 93, 88, 128, 10, 128, 121, 0, 0, 8, 8, 0, 0, 93, 0, 0, 0, 93, 1, 0, 0, 0, 93, 46, 93, 93, 0, 0, 93, 46, 1, 93, 76, 55, 55, 55, 0, 126, 126, 0, 126, 0, 126, 126, 126, 126, 0, 126, 126, 126, 126, 126, 126, 0, 0, 55, 0, 93, 24, 27, 93, 27, 36, 88, 128, 10, 128, 27, 36, 24, 88, 128, 10, 128, 33, 24, 58, 58, 29, 128, 10, 128, 128, 128, 128, 24, 0, 66, 1, 1, 128, 128, 10, 1, 1, 1, 1, 1, 2, 1, 66, 1, 2, 128, 128, 128, 128, 128, 128, 128, 1, 1, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 1, 128, 128, 24, 1, 1, 1, 0, 128, 128, 1, 0, 24, 0, 66, 1, 1, 1, 1, 1, 2, 1, 66, 1, 2, 128, 1, 1, 1, 127, 128, 62, 53, 53, 0, 53, 54, 1, 1, 1, 24, 0, 128, 0, 116, 0, 1, 1, 0, 53, 1, 1, 1, 24, 1, 128, 1, 1, 1, 1, 128, 128, 128, 0, 128, 1, 124, 24, 1, 1, 1, 0, 1, 0, 128, 128, 24, 0, 1, 1, 1, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 4, 0, 66, 1, 0, 0, 0, 24, 1, 24, 66, 1, 1, 58, 123, 24, 0, 20, 1, 84, 84, 84, 1, 1, 27, 128, 128, 1, 0, 66, 2, 0, 0, 0, 0, 66, 128, 10, 1, 1, 1, 2, 1, 1, 2, 128, 10, 128, 1, 1, 2, 0, 25, 30, 1, 1, 66, 2, 123, 0, 128, 128, 121, 0, 0, 8, 8, 0, 0, 93, 0, 0, 0, 93, 1, 0, 0, 0, 93, 46, 93, 93, 0, 0, 93, 46, 1, 93, 76, 55, 55, 55, 0, 126, 126, 0, 126, 0, 126, 126, 126, 126, 0, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 0, 0, 55, 0, 128, 128, 128, 0, 1, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 66, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 64, 93, 24, 0, 1, 1, 1, 0, 128, 128, 24, 0, 1, 1, 1, 0, 128, 128, 1, 0, 24, 0, 66, 1, 1, 128, 128, 10, 1, 24, 0, 0, 20, 2, 12, 1, 1, 54, 48, 75, 67, 15, 58, 1, 0, 5, 0, 0, 67, 67, 67, 67, 10, 1, 0, 5, 1, 0, 0, 67, 67, 67, 67, 67, 67, 67, 67, 69, 67, 69, 67, 1, 2, 1, 66, 1, 2, 128, 128, 0, 128, 128, 128, 128, 128, 128, 0, 1, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 84, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 64, 0, 84, 38, 84, 1, 1, 1, 52, 1, 92, 101, 91, 1 ] class << self attr_accessor :_lex_index_offsets private :_lex_index_offsets, :_lex_index_offsets= end self._lex_index_offsets = [ 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 46, 175, 304, 433, 562, 609, 688, 767, 861, 889, 917, 964, 1065, 1093, 1127, 1129, 1223, 1302, 1406, 1535, 1664, 1793, 1922, 1969, 2048, 2127, 2221, 2249, 2277, 2324, 2425, 2453, 2487, 2489, 2583, 2662, 2766, 2895, 3024, 3153, 3282, 3411, 3540, 3669, 3798, 3927, 4056, 4185, 4314, 4443, 4471, 4600, 4602, 4604, 4733, 4735, 4737, 4739, 4741, 4870, 4999, 5128, 5257, 5386, 5515, 5644, 5773, 5902, 6031, 6160, 6289, 6418, 6547, 6676, 6805, 6934, 7063, 7065, 7067, 7069, 7071, 7081, 7083, 7085, 7087, 7089, 7091, 7093, 7095, 7097, 7226, 7228, 7357, 7442, 7444, 7529, 7531, 7533, 7535, 7537, 7539, 7541, 7665, 7667, 7752, 7837, 7922, 8007, 8092, 8094, 8223, 8352, 8419, 8421, 8550, 8679, 8681, 8683, 8685, 8687, 8816, 8904, 8906, 8953, 9032, 9111, 9205, 9233, 9261, 9308, 9409, 9437, 9471, 9473, 9567, 9646, 9750, 9879, 10008, 10137, 10266, 10395, 10524, 10526, 10528, 10657, 10673, 10684, 10695, 10706, 10717, 10719, 10721, 10723, 10725, 10727, 10729, 10731, 10860, 10862, 10947, 11032, 11117, 11202, 11287, 11372, 11374, 11376, 11415, 11440, 11442, 11444, 11446, 11448, 11450, 11547, 11572, 11573, 11575, 11577, 11579, 11604, 11606, 11608, 11702, 11727, 11816, 11945, 11956, 12085, 12207, 12208, 12209, 12218, 12227, 12228, 12229, 12323, 12324, 12325, 12326, 12420, 12422, 12423, 12424, 12425, 12519, 12566, 12660, 12754, 12755, 12756, 12850, 12897, 12899, 12993, 13070, 13126, 13182, 13238, 13239, 13366, 13493, 13494, 13621, 13622, 13749, 13876, 14003, 14130, 14131, 14258, 14385, 14512, 14639, 14766, 14893, 14894, 14895, 14951, 14952, 15046, 15135, 15264, 15275, 15404, 15526, 15527, 15528, 15537, 15546, 15547, 15548, 15642, 15643, 15644, 15645, 15739, 15741, 15742, 15743, 15744, 15838, 15885, 15979, 16073, 16074, 16075, 16169, 16216, 16218, 16312, 16389, 16445, 16501, 16557, 16558, 16685, 16812, 16813, 16940, 16941, 17068, 17195, 17322, 17449, 17450, 17577, 17704, 17831, 17958, 18085, 18212, 18213, 18214, 18270, 18271, 18365, 18390, 18418, 18512, 18540, 18577, 18666, 18795, 18806, 18935, 18963, 19000, 19025, 19114, 19243, 19254, 19383, 19417, 19442, 19501, 19560, 19590, 19719, 19730, 19859, 19988, 20117, 20246, 20271, 20272, 20339, 20341, 20343, 20472, 20601, 20612, 20614, 20616, 20618, 20620, 20622, 20625, 20627, 20694, 20696, 20699, 20828, 20957, 21086, 21215, 21344, 21473, 21602, 21604, 21606, 21735, 21864, 21993, 22122, 22251, 22380, 22509, 22638, 22767, 22896, 23025, 23154, 23283, 23412, 23541, 23670, 23799, 23928, 24057, 24186, 24315, 24444, 24573, 24702, 24831, 24960, 25089, 25218, 25347, 25476, 25605, 25734, 25863, 25992, 26121, 26250, 26379, 26508, 26637, 26766, 26895, 27024, 27153, 27282, 27411, 27540, 27669, 27798, 27927, 28056, 28185, 28314, 28443, 28572, 28701, 28830, 28959, 29088, 29217, 29346, 29475, 29604, 29733, 29862, 29991, 30120, 30249, 30378, 30507, 30636, 30765, 30894, 31023, 31152, 31281, 31410, 31539, 31668, 31797, 31926, 32055, 32184, 32313, 32315, 32444, 32573, 32598, 32600, 32602, 32604, 32605, 32734, 32863, 32865, 32866, 32891, 32892, 32959, 32961, 32963, 32965, 32967, 32969, 32972, 32974, 33041, 33043, 33046, 33175, 33177, 33179, 33181, 33309, 33438, 33501, 33555, 33609, 33610, 33664, 33719, 33721, 33723, 33725, 33750, 33751, 33880, 33881, 33998, 33999, 34001, 34003, 34004, 34058, 34060, 34062, 34064, 34089, 34091, 34220, 34222, 34224, 34226, 34228, 34357, 34486, 34615, 34616, 34745, 34747, 34872, 34897, 34899, 34901, 34903, 34904, 34906, 34907, 35036, 35165, 35190, 35191, 35193, 35195, 35197, 35198, 35327, 35456, 35585, 35714, 35843, 35972, 36101, 36230, 36359, 36488, 36617, 36746, 36875, 37004, 37133, 37262, 37391, 37520, 37525, 37526, 37593, 37595, 37596, 37597, 37598, 37623, 37625, 37650, 37717, 37719, 37721, 37780, 37904, 37929, 37930, 37951, 37953, 38038, 38123, 38208, 38210, 38212, 38240, 38369, 38498, 38500, 38501, 38568, 38571, 38572, 38573, 38574, 38575, 38642, 38771, 38782, 38784, 38786, 38788, 38791, 38793, 38795, 38798, 38927, 38938, 39067, 39069, 39071, 39074, 39075, 39101, 39132, 39134, 39136, 39203, 39206, 39330, 39331, 39460, 39589, 39711, 39712, 39713, 39722, 39731, 39732, 39733, 39827, 39828, 39829, 39830, 39924, 39926, 39927, 39928, 39929, 40023, 40070, 40164, 40258, 40259, 40260, 40354, 40401, 40403, 40497, 40574, 40630, 40686, 40742, 40743, 40870, 40997, 40998, 41125, 41126, 41253, 41380, 41507, 41634, 41635, 41762, 41889, 42016, 42143, 42270, 42397, 42524, 42651, 42778, 42905, 43032, 43159, 43286, 43413, 43540, 43667, 43794, 43921, 44048, 44049, 44050, 44106, 44107, 44236, 44365, 44494, 44495, 44497, 44498, 44627, 44756, 44885, 45014, 45143, 45272, 45401, 45530, 45659, 45788, 45917, 46046, 46175, 46304, 46433, 46562, 46691, 46820, 46949, 47078, 47207, 47336, 47465, 47594, 47723, 47852, 47981, 48110, 48239, 48368, 48497, 48626, 48755, 48884, 49013, 49142, 49271, 49400, 49529, 49658, 49787, 49916, 50045, 50174, 50303, 50432, 50561, 50690, 50819, 50948, 51077, 51206, 51335, 51464, 51593, 51722, 51851, 51980, 52109, 52238, 52367, 52434, 52563, 52692, 52821, 52950, 53079, 53208, 53337, 53466, 53595, 53724, 53853, 53982, 54111, 54240, 54369, 54498, 54627, 54756, 54885, 55014, 55143, 55272, 55401, 55530, 55659, 55660, 55725, 55819, 55844, 55845, 55847, 55849, 55851, 55852, 55981, 56110, 56135, 56136, 56138, 56140, 56142, 56143, 56272, 56401, 56403, 56404, 56429, 56430, 56497, 56499, 56501, 56630, 56759, 56770, 56772, 56797, 56798, 56799, 56820, 56823, 56836, 56838, 56840, 56895, 56944, 57020, 57088, 57104, 57163, 57165, 57166, 57172, 57173, 57174, 57242, 57310, 57378, 57446, 57457, 57459, 57460, 57466, 57468, 57469, 57470, 57538, 57606, 57674, 57742, 57810, 57878, 57946, 58014, 58084, 58152, 58222, 58290, 58292, 58295, 58297, 58364, 58366, 58369, 58498, 58627, 58628, 58757, 58886, 59015, 59144, 59273, 59402, 59403, 59405, 59406, 59407, 59536, 59665, 59794, 59923, 60052, 60181, 60310, 60439, 60568, 60697, 60826, 60955, 61084, 61213, 61342, 61471, 61600, 61729, 61858, 61987, 62116, 62245, 62374, 62503, 62632, 62761, 62890, 63019, 63148, 63277, 63406, 63535, 63664, 63793, 63922, 64051, 64180, 64265, 64394, 64523, 64652, 64781, 64910, 65039, 65168, 65297, 65426, 65555, 65684, 65813, 65942, 66071, 66200, 66329, 66458, 66587, 66716, 66845, 66974, 67103, 67232, 67361, 67490, 67619, 67748, 67877, 68006, 68135, 68264, 68393, 68522, 68651, 68780, 68909, 69038, 69167, 69296, 69425, 69554, 69683, 69812, 69941, 70070, 70199, 70328, 70457, 70586, 70715, 70844, 70973, 71102, 71231, 71360, 71489, 71618, 71747, 71876, 72005, 72134, 72263, 72392, 72521, 72650, 72651, 72716, 72717, 72802, 72841, 72926, 72928, 72930, 72932, 72985, 72987, 73080, 73182, 73274 ] class << self attr_accessor :_lex_indicies private :_lex_indicies, :_lex_indicies= end self._lex_indicies = [ 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 12, 14, 12, 14, 14, 12, 12, 14, 14, 14, 15, 14, 14, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 14, 12, 12, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 14, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 14, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 12, 14, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 12, 12, 12, 12, 12, 12, 18, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 13, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 13, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 13, 19, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 19, 22, 22, 22, 19, 22, 22, 22, 22, 22, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24, 22, 19, 22, 22, 22, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 25, 22, 19, 26, 26, 26, 19, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 19, 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, 27, 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, 28, 26, 19, 29, 29, 29, 19, 29, 29, 29, 29, 29, 30, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 19, 29, 19, 29, 29, 29, 19, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 19, 29, 19, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 31, 20, 19, 32, 32, 32, 19, 32, 32, 32, 32, 32, 33, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 19, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 35, 32, 32, 32, 32, 32, 32, 36, 32, 19, 32, 32, 32, 19, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 19, 32, 37, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 38, 19, 38, 19, 19, 39, 39, 39, 19, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 19, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 41, 39, 19, 22, 22, 22, 19, 22, 22, 22, 22, 22, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 25, 22, 19, 42, 42, 42, 19, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 19, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 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, 43, 43, 43, 43, 43, 43, 42, 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, 46, 46, 44, 46, 44, 46, 46, 44, 44, 46, 46, 46, 47, 46, 46, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 46, 46, 46, 46, 46, 46, 46, 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, 44, 46, 44, 44, 45, 46, 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, 44, 44, 44, 46, 44, 45, 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, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 44, 44, 44, 44, 44, 44, 44, 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, 44, 44, 44, 44, 46, 44, 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, 44, 44, 44, 44, 44, 46, 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, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 44, 44, 44, 44, 44, 44, 50, 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, 44, 44, 44, 44, 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, 44, 44, 44, 44, 44, 45, 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, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 44, 44, 44, 44, 44, 44, 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, 44, 44, 44, 44, 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, 44, 44, 44, 44, 44, 45, 51, 52, 52, 52, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 52, 51, 54, 54, 54, 51, 54, 54, 54, 54, 54, 55, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 51, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 56, 54, 51, 54, 54, 54, 51, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 51, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 57, 54, 51, 58, 58, 58, 51, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 51, 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, 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, 60, 58, 51, 61, 61, 61, 51, 61, 61, 61, 61, 61, 62, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 51, 61, 51, 61, 61, 61, 51, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 51, 61, 51, 52, 52, 52, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 63, 52, 51, 64, 64, 64, 51, 64, 64, 64, 64, 64, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 51, 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, 66, 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, 64, 64, 64, 64, 64, 64, 68, 64, 51, 64, 64, 64, 51, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 51, 64, 69, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 70, 51, 70, 51, 51, 71, 71, 71, 51, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 51, 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, 72, 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, 73, 71, 51, 54, 54, 54, 51, 54, 54, 54, 54, 54, 55, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 51, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 57, 54, 51, 74, 74, 74, 51, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 51, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 74, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 76, 78, 76, 78, 78, 76, 76, 78, 78, 78, 79, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 78, 76, 76, 77, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 78, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 76, 78, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 76, 76, 78, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 76, 76, 76, 76, 76, 76, 82, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 77, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 77, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 77, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 85, 83, 85, 83, 85, 85, 83, 83, 85, 85, 85, 86, 85, 85, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 85, 83, 83, 84, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 85, 83, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 83, 83, 83, 83, 83, 83, 83, 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, 83, 83, 83, 83, 85, 83, 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, 83, 83, 83, 83, 83, 85, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 83, 83, 83, 83, 83, 83, 89, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 84, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 84, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 84, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 92, 91, 92, 91, 91, 92, 92, 91, 91, 91, 93, 91, 91, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 91, 91, 91, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 91, 92, 92, 90, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 92, 92, 91, 92, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 91, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92, 92, 92, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92, 95, 92, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92, 92, 95, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 92, 92, 92, 92, 92, 92, 92, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 92, 92, 92, 92, 97, 92, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 92, 92, 92, 92, 92, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 99, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 99, 100, 101, 101, 101, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 102, 102, 102, 102, 104, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 103, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 103, 105, 102, 102, 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, 109, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 107, 107, 107, 107, 109, 107, 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, 107, 107, 107, 107, 108, 107, 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, 107, 107, 107, 107, 107, 108, 110, 107, 112, 111, 113, 111, 114, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 116, 111, 116, 116, 116, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 116, 111, 111, 111, 111, 117, 118, 111, 119, 111, 120, 121, 122, 123, 124, 117, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 125, 111, 126, 122, 127, 128, 111, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 129, 130, 122, 131, 115, 111, 115, 115, 115, 115, 115, 115, 115, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 133, 115, 115, 134, 115, 135, 115, 115, 115, 136, 137, 111, 131, 111, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 138, 111, 138, 138, 138, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 138, 111, 111, 111, 111, 139, 140, 111, 141, 111, 142, 143, 144, 145, 146, 139, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 147, 111, 148, 144, 149, 150, 111, 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, 151, 152, 144, 113, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 153, 108, 108, 108, 108, 108, 108, 108, 108, 154, 108, 108, 155, 108, 156, 108, 108, 108, 157, 158, 111, 113, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 159, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 160, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 161, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 162, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 163, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 159, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 164, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 165, 108, 108, 108, 108, 108, 108, 108, 166, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 167, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 168, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 159, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 169, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 159, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 170, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 171, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 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, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 111, 111, 111, 111, 109, 111, 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, 111, 111, 111, 111, 108, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 163, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 111, 111, 108, 173, 172, 174, 172, 175, 172, 144, 172, 176, 172, 172, 172, 172, 172, 172, 172, 177, 172, 178, 172, 179, 172, 144, 172, 180, 172, 144, 172, 181, 172, 175, 172, 183, 182, 184, 184, 184, 184, 184, 184, 184, 184, 184, 186, 184, 186, 186, 186, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 186, 184, 184, 184, 184, 184, 184, 184, 187, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 184, 188, 184, 184, 185, 184, 185, 185, 185, 189, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 184, 184, 184, 184, 184, 185, 190, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 192, 184, 192, 192, 192, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 192, 184, 184, 184, 184, 184, 184, 184, 193, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 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, 184, 194, 184, 184, 191, 184, 191, 191, 191, 195, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 184, 184, 184, 184, 184, 191, 197, 196, 197, 197, 197, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 197, 196, 196, 196, 196, 196, 196, 196, 198, 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, 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, 199, 196, 200, 196, 201, 196, 201, 201, 201, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 201, 196, 196, 196, 196, 196, 196, 196, 202, 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, 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, 203, 196, 204, 205, 207, 206, 208, 206, 209, 206, 210, 206, 211, 206, 212, 213, 213, 213, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 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, 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, 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, 213, 215, 204, 216, 217, 216, 216, 216, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 216, 204, 204, 218, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 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, 204, 204, 204, 204, 220, 204, 221, 222, 221, 221, 221, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 221, 204, 204, 223, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 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, 204, 204, 204, 204, 225, 204, 227, 228, 227, 227, 227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 227, 226, 226, 229, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 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, 231, 226, 233, 234, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 233, 232, 232, 235, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 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, 237, 232, 233, 238, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 233, 232, 232, 235, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 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, 237, 232, 217, 204, 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, 241, 241, 239, 241, 239, 241, 241, 239, 239, 241, 241, 241, 242, 241, 241, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 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, 239, 241, 239, 239, 240, 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, 239, 239, 239, 241, 239, 240, 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, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 239, 239, 239, 239, 239, 239, 239, 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, 239, 239, 239, 239, 241, 239, 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, 239, 239, 239, 239, 239, 241, 244, 241, 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, 239, 239, 239, 241, 239, 244, 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, 246, 239, 239, 239, 239, 247, 239, 239, 239, 239, 239, 248, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 215, 239, 239, 239, 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, 239, 239, 239, 239, 245, 249, 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, 239, 239, 239, 248, 239, 245, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 252, 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, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, 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, 250, 251, 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, 250, 254, 253, 257, 256, 252, 251, 257, 258, 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, 246, 239, 239, 239, 239, 247, 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, 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, 239, 239, 239, 239, 245, 249, 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, 239, 239, 239, 239, 239, 245, 260, 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, 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, 257, 259, 257, 260, 261, 262, 262, 262, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 263, 262, 261, 264, 264, 264, 261, 264, 264, 264, 264, 264, 265, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 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, 266, 264, 261, 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, 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, 267, 264, 261, 268, 268, 268, 261, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 261, 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, 269, 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, 270, 268, 261, 271, 271, 271, 261, 271, 271, 271, 271, 271, 272, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 261, 271, 261, 271, 271, 271, 261, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 261, 271, 261, 262, 262, 262, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 273, 262, 261, 274, 274, 274, 261, 274, 274, 274, 274, 274, 275, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 261, 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, 276, 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, 274, 274, 274, 274, 274, 274, 278, 274, 261, 274, 274, 274, 261, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 261, 274, 279, 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, 280, 261, 280, 261, 261, 281, 281, 281, 261, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 261, 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, 282, 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, 283, 281, 261, 264, 264, 264, 261, 264, 264, 264, 264, 264, 265, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 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, 267, 264, 261, 284, 284, 284, 261, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 261, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 284, 284, 284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 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, 285, 285, 285, 285, 285, 285, 284, 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, 204, 204, 204, 287, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 204, 204, 289, 204, 287, 204, 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, 204, 204, 204, 204, 286, 204, 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, 204, 204, 204, 204, 204, 286, 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, 287, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 239, 239, 289, 239, 287, 239, 286, 286, 286, 286, 286, 286, 290, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 286, 239, 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, 239, 239, 239, 239, 239, 286, 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, 287, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 239, 239, 289, 239, 287, 239, 286, 286, 286, 286, 286, 286, 286, 286, 291, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 286, 239, 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, 239, 239, 239, 239, 239, 286, 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, 287, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 239, 239, 289, 239, 287, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 292, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 286, 239, 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, 239, 239, 239, 239, 239, 286, 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, 287, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 239, 239, 289, 239, 287, 239, 286, 286, 286, 292, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 239, 239, 239, 239, 286, 239, 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, 239, 239, 239, 239, 239, 286, 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, 295, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 296, 293, 293, 293, 293, 295, 293, 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, 293, 293, 293, 293, 294, 293, 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, 293, 293, 293, 293, 293, 294, 296, 293, 293, 297, 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, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 298, 298, 298, 298, 298, 298, 298, 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, 298, 298, 298, 298, 299, 298, 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, 298, 298, 298, 298, 298, 299, 301, 300, 301, 300, 300, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 300, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 300, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 300, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 304, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 304, 308, 307, 309, 307, 310, 307, 311, 307, 313, 312, 314, 312, 315, 312, 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, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 298, 298, 298, 298, 298, 298, 298, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 298, 298, 298, 298, 316, 298, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 298, 298, 298, 298, 298, 316, 317, 304, 318, 319, 318, 318, 318, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 318, 304, 304, 320, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 321, 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, 322, 304, 323, 324, 323, 323, 323, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 323, 304, 304, 325, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 326, 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, 327, 304, 329, 330, 329, 329, 329, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 329, 328, 328, 331, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 332, 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, 333, 328, 335, 336, 335, 335, 335, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 335, 334, 334, 337, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 338, 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, 339, 334, 335, 336, 335, 335, 335, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 335, 334, 334, 337, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 340, 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, 339, 334, 335, 341, 335, 335, 335, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 335, 334, 334, 337, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 338, 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, 339, 334, 342, 304, 319, 304, 344, 345, 344, 344, 344, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 344, 343, 343, 343, 343, 343, 346, 343, 343, 343, 343, 343, 343, 343, 347, 343, 349, 345, 349, 349, 349, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 349, 348, 351, 350, 354, 353, 355, 348, 356, 352, 357, 343, 359, 358, 358, 358, 359, 358, 358, 358, 358, 360, 361, 360, 360, 360, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 359, 358, 358, 358, 358, 358, 360, 358, 358, 362, 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, 363, 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, 364, 358, 358, 365, 358, 360, 366, 360, 360, 360, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 360, 366, 367, 368, 369, 370, 371, 373, 372, 375, 376, 375, 375, 375, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 375, 374, 361, 372, 377, 372, 379, 378, 378, 378, 379, 378, 378, 378, 378, 380, 381, 380, 380, 380, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 379, 378, 378, 378, 378, 378, 380, 378, 378, 382, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 383, 378, 380, 384, 380, 380, 380, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 380, 384, 386, 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, 387, 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, 388, 385, 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, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 389, 389, 389, 389, 389, 389, 389, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 389, 389, 389, 389, 13, 389, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 389, 389, 389, 389, 389, 13, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 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, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 390, 390, 390, 390, 390, 390, 390, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 390, 390, 390, 390, 17, 390, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 390, 390, 390, 390, 390, 17, 393, 392, 392, 392, 393, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 393, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 394, 394, 394, 394, 394, 394, 394, 394, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 395, 392, 392, 392, 392, 392, 392, 392, 392, 392, 396, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 397, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 398, 392, 392, 399, 392, 400, 401, 403, 403, 403, 403, 403, 403, 403, 403, 402, 404, 404, 404, 404, 404, 404, 404, 404, 402, 402, 405, 405, 39, 39, 39, 405, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 405, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 406, 39, 407, 408, 409, 409, 39, 39, 39, 409, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 409, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 410, 39, 38, 409, 411, 412, 413, 413, 26, 26, 26, 413, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 413, 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, 27, 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, 414, 26, 409, 20, 20, 20, 409, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 409, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 415, 20, 405, 26, 26, 26, 405, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 405, 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, 27, 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, 28, 26, 405, 416, 416, 416, 405, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 405, 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, 416, 416, 416, 416, 416, 417, 416, 418, 419, 419, 416, 416, 416, 419, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 419, 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, 416, 416, 416, 416, 416, 420, 416, 419, 20, 20, 20, 419, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 419, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 415, 20, 421, 419, 419, 26, 26, 26, 419, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 419, 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, 27, 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, 28, 26, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 422, 422, 422, 422, 422, 422, 422, 423, 423, 423, 423, 423, 423, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 423, 423, 423, 423, 423, 423, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 424, 422, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 422, 422, 422, 422, 422, 422, 422, 425, 425, 425, 425, 425, 425, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 425, 425, 425, 425, 425, 425, 422, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 422, 422, 422, 422, 422, 422, 422, 426, 426, 426, 426, 426, 426, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 426, 426, 426, 426, 426, 426, 422, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 422, 422, 422, 422, 422, 422, 422, 427, 427, 427, 427, 427, 427, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 427, 427, 427, 427, 427, 427, 422, 428, 431, 430, 430, 430, 431, 430, 430, 430, 430, 432, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 431, 430, 430, 430, 430, 430, 432, 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, 430, 430, 430, 430, 430, 430, 430, 433, 433, 433, 433, 433, 433, 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, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 434, 430, 431, 430, 430, 430, 431, 430, 430, 430, 430, 429, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 431, 430, 430, 430, 430, 430, 429, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 430, 430, 430, 430, 430, 430, 430, 435, 435, 435, 435, 435, 435, 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, 435, 435, 435, 435, 435, 435, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 436, 430, 429, 431, 435, 435, 435, 431, 435, 435, 435, 435, 429, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 431, 435, 435, 435, 435, 435, 429, 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, 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, 429, 435, 437, 431, 438, 438, 438, 431, 438, 438, 438, 438, 432, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 432, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 438, 438, 438, 438, 438, 438, 438, 433, 433, 433, 433, 433, 433, 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, 433, 433, 433, 433, 433, 433, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 429, 438, 431, 438, 438, 438, 431, 438, 438, 438, 438, 429, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 429, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 438, 438, 438, 438, 438, 438, 438, 435, 435, 435, 435, 435, 435, 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, 435, 435, 435, 435, 435, 435, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 431, 438, 438, 438, 431, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 438, 438, 438, 438, 438, 438, 438, 440, 440, 440, 440, 440, 440, 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, 440, 440, 440, 440, 440, 440, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 441, 438, 431, 438, 438, 438, 431, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 438, 438, 438, 438, 438, 438, 438, 433, 433, 433, 433, 433, 433, 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, 433, 433, 433, 433, 433, 433, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 441, 438, 442, 431, 438, 438, 438, 431, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 438, 438, 438, 438, 438, 438, 438, 443, 443, 443, 443, 443, 443, 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, 443, 443, 443, 443, 443, 443, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 441, 438, 431, 438, 438, 438, 431, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 438, 438, 438, 438, 438, 438, 438, 444, 444, 444, 444, 444, 444, 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, 444, 444, 444, 444, 444, 444, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 441, 438, 431, 438, 438, 438, 431, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 438, 438, 438, 438, 438, 438, 438, 445, 445, 445, 445, 445, 445, 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, 445, 445, 445, 445, 445, 445, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 441, 438, 431, 438, 438, 438, 431, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 438, 438, 438, 438, 438, 438, 438, 446, 446, 446, 446, 446, 446, 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, 446, 446, 446, 446, 446, 446, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 441, 438, 431, 438, 438, 438, 431, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 439, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 438, 438, 438, 438, 438, 438, 438, 447, 447, 447, 447, 447, 447, 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, 447, 447, 447, 447, 447, 447, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 441, 438, 431, 438, 438, 438, 431, 438, 438, 438, 438, 429, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 431, 438, 438, 438, 438, 438, 429, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 438, 438, 438, 438, 438, 438, 438, 447, 447, 447, 447, 447, 447, 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, 447, 447, 447, 447, 447, 447, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 429, 438, 448, 449, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 450, 450, 450, 450, 450, 450, 450, 451, 451, 451, 451, 451, 451, 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, 451, 450, 450, 453, 452, 452, 452, 453, 452, 452, 452, 452, 452, 454, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 453, 452, 452, 452, 452, 452, 452, 452, 452, 455, 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, 456, 452, 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, 459, 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, 460, 457, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 461, 461, 461, 461, 461, 461, 461, 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, 461, 461, 461, 461, 45, 461, 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, 461, 461, 461, 461, 461, 45, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 461, 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, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 462, 462, 462, 462, 462, 462, 462, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 462, 462, 462, 462, 49, 462, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 462, 462, 462, 462, 462, 49, 465, 464, 464, 464, 465, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 465, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 466, 466, 466, 466, 466, 466, 466, 466, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 467, 464, 464, 464, 464, 464, 464, 464, 464, 464, 468, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 469, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 470, 464, 464, 471, 464, 472, 473, 475, 475, 475, 475, 475, 475, 475, 475, 474, 476, 476, 476, 476, 476, 476, 476, 476, 474, 474, 477, 477, 71, 71, 71, 477, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 477, 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, 72, 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, 478, 71, 479, 480, 481, 481, 71, 71, 71, 481, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 481, 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, 72, 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, 482, 71, 70, 481, 483, 484, 485, 485, 58, 58, 58, 485, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 485, 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, 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, 486, 58, 481, 52, 52, 52, 481, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 481, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 487, 52, 477, 58, 58, 58, 477, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 477, 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, 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, 60, 58, 477, 488, 488, 488, 477, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 477, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 489, 488, 490, 491, 491, 488, 488, 488, 491, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 491, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 492, 488, 491, 52, 52, 52, 491, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 491, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 487, 52, 493, 491, 491, 58, 58, 58, 491, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 491, 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, 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, 60, 58, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 494, 494, 494, 494, 494, 494, 494, 495, 495, 495, 495, 495, 495, 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, 495, 495, 495, 495, 495, 495, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 496, 494, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 494, 494, 494, 494, 494, 494, 494, 497, 497, 497, 497, 497, 497, 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, 497, 497, 497, 497, 497, 497, 494, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 494, 494, 494, 494, 494, 494, 494, 498, 498, 498, 498, 498, 498, 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, 498, 498, 498, 498, 498, 498, 494, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 494, 494, 494, 494, 494, 494, 494, 499, 499, 499, 499, 499, 499, 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, 499, 499, 499, 499, 499, 499, 494, 500, 503, 502, 502, 502, 503, 502, 502, 502, 502, 504, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 503, 502, 502, 502, 502, 502, 504, 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, 502, 502, 502, 502, 502, 502, 502, 505, 505, 505, 505, 505, 505, 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, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 506, 502, 503, 502, 502, 502, 503, 502, 502, 502, 502, 501, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 503, 502, 502, 502, 502, 502, 501, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 502, 502, 502, 502, 502, 502, 502, 507, 507, 507, 507, 507, 507, 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, 507, 507, 507, 507, 507, 507, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 508, 502, 501, 503, 507, 507, 507, 503, 507, 507, 507, 507, 501, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 503, 507, 507, 507, 507, 507, 501, 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, 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, 501, 507, 509, 503, 510, 510, 510, 503, 510, 510, 510, 510, 504, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 504, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 510, 510, 510, 510, 510, 510, 510, 505, 505, 505, 505, 505, 505, 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, 505, 505, 505, 505, 505, 505, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 501, 510, 503, 510, 510, 510, 503, 510, 510, 510, 510, 501, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 501, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 510, 510, 510, 510, 510, 510, 510, 507, 507, 507, 507, 507, 507, 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, 507, 507, 507, 507, 507, 507, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 503, 510, 510, 510, 503, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 510, 510, 510, 510, 510, 510, 510, 512, 512, 512, 512, 512, 512, 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, 512, 512, 512, 512, 512, 512, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 513, 510, 503, 510, 510, 510, 503, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 510, 510, 510, 510, 510, 510, 510, 505, 505, 505, 505, 505, 505, 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, 505, 505, 505, 505, 505, 505, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 513, 510, 514, 503, 510, 510, 510, 503, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 510, 510, 510, 510, 510, 510, 510, 515, 515, 515, 515, 515, 515, 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, 515, 515, 515, 515, 515, 515, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 513, 510, 503, 510, 510, 510, 503, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 510, 510, 510, 510, 510, 510, 510, 516, 516, 516, 516, 516, 516, 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, 516, 516, 516, 516, 516, 516, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 513, 510, 503, 510, 510, 510, 503, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 510, 510, 510, 510, 510, 510, 510, 517, 517, 517, 517, 517, 517, 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, 517, 517, 517, 517, 517, 517, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 513, 510, 503, 510, 510, 510, 503, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 510, 510, 510, 510, 510, 510, 510, 518, 518, 518, 518, 518, 518, 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, 518, 518, 518, 518, 518, 518, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 513, 510, 503, 510, 510, 510, 503, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 511, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 510, 510, 510, 510, 510, 510, 510, 519, 519, 519, 519, 519, 519, 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, 519, 519, 519, 519, 519, 519, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 513, 510, 503, 510, 510, 510, 503, 510, 510, 510, 510, 501, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 503, 510, 510, 510, 510, 510, 501, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 510, 510, 510, 510, 510, 510, 510, 519, 519, 519, 519, 519, 519, 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, 519, 519, 519, 519, 519, 519, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 501, 510, 520, 521, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 522, 522, 522, 522, 522, 522, 522, 523, 523, 523, 523, 523, 523, 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, 523, 522, 522, 525, 524, 524, 524, 525, 524, 524, 524, 524, 526, 527, 526, 526, 526, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 525, 524, 524, 524, 524, 524, 526, 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, 524, 528, 524, 526, 529, 526, 526, 526, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 526, 529, 530, 531, 531, 531, 530, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 530, 531, 533, 532, 532, 532, 533, 532, 532, 532, 532, 532, 534, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 533, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 535, 532, 536, 537, 537, 537, 536, 537, 537, 537, 537, 537, 538, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 536, 537, 540, 539, 539, 539, 540, 539, 539, 539, 539, 539, 541, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 540, 539, 539, 539, 539, 539, 539, 539, 539, 542, 539, 544, 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, 545, 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, 546, 543, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 547, 547, 547, 547, 547, 547, 547, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 547, 547, 547, 547, 77, 547, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 547, 547, 547, 547, 547, 77, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 547, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 548, 548, 548, 548, 548, 548, 548, 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, 548, 548, 548, 548, 81, 548, 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, 548, 548, 548, 548, 548, 81, 550, 549, 549, 549, 550, 549, 549, 549, 549, 549, 551, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 550, 549, 553, 552, 552, 552, 553, 552, 552, 552, 552, 554, 555, 554, 554, 554, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 553, 552, 552, 552, 552, 552, 554, 552, 552, 556, 552, 554, 557, 554, 554, 554, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 554, 557, 559, 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, 560, 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, 558, 558, 558, 558, 558, 561, 558, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 562, 562, 562, 562, 562, 562, 562, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 562, 562, 562, 562, 84, 562, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 562, 562, 562, 562, 562, 84, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 562, 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, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 563, 563, 563, 563, 563, 563, 563, 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, 563, 563, 563, 563, 88, 563, 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, 563, 563, 563, 563, 563, 88, 565, 564, 564, 564, 565, 564, 564, 564, 564, 566, 567, 566, 566, 566, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 565, 564, 564, 564, 564, 564, 566, 564, 566, 568, 566, 566, 566, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 566, 568, 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, 569, 569, 569, 569, 569, 569, 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, 569, 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, 571, 571, 571, 571, 571, 571, 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, 571, 572, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 573, 92, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 574, 574, 574, 574, 574, 574, 574, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 574, 574, 574, 574, 90, 574, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 574, 574, 574, 574, 574, 90, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 574, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 575, 575, 575, 575, 575, 575, 575, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 575, 575, 575, 575, 95, 575, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 575, 575, 575, 575, 575, 95, 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, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 576, 576, 576, 576, 576, 576, 576, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 576, 576, 576, 576, 97, 576, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 576, 576, 576, 576, 576, 97, 578, 579, 579, 579, 578, 579, 579, 579, 579, 580, 581, 580, 580, 580, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 578, 579, 579, 579, 579, 579, 580, 582, 579, 583, 584, 585, 586, 579, 579, 579, 587, 588, 579, 588, 579, 589, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 590, 579, 591, 592, 593, 579, 579, 594, 595, 594, 594, 596, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 597, 598, 579, 589, 599, 589, 600, 601, 602, 603, 604, 605, 577, 577, 606, 577, 577, 577, 607, 608, 609, 577, 577, 610, 611, 612, 613, 577, 614, 577, 615, 577, 579, 616, 579, 588, 579, 577, 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, 618, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 617, 617, 617, 618, 617, 618, 617, 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, 617, 617, 617, 617, 577, 617, 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, 617, 617, 617, 617, 617, 577, 580, 619, 580, 580, 580, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 580, 619, 620, 589, 621, 621, 589, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 589, 621, 622, 623, 624, 625, 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, 626, 626, 626, 626, 99, 99, 626, 99, 626, 99, 99, 626, 626, 99, 99, 99, 628, 99, 99, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 99, 99, 99, 99, 99, 99, 99, 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, 626, 99, 626, 626, 627, 99, 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, 626, 626, 626, 99, 626, 627, 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, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 630, 630, 630, 630, 630, 630, 630, 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, 630, 630, 630, 630, 627, 630, 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, 630, 630, 630, 630, 630, 627, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 630, 631, 621, 589, 621, 589, 621, 589, 621, 633, 632, 589, 634, 621, 589, 621, 635, 589, 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, 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, 626, 626, 626, 626, 626, 589, 626, 589, 621, 589, 589, 621, 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, 618, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 617, 617, 617, 618, 617, 618, 617, 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, 617, 617, 617, 617, 594, 617, 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, 617, 617, 617, 617, 617, 594, 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, 618, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 618, 636, 618, 636, 594, 594, 594, 594, 637, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 636, 594, 636, 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, 636, 636, 636, 636, 636, 594, 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, 618, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 618, 636, 618, 636, 594, 594, 594, 594, 594, 594, 638, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 636, 594, 636, 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, 636, 636, 636, 636, 636, 594, 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, 618, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 618, 636, 618, 636, 594, 594, 594, 594, 594, 594, 594, 594, 639, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 636, 594, 636, 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, 636, 636, 636, 636, 636, 594, 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, 618, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 618, 636, 618, 636, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 640, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 636, 594, 636, 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, 636, 636, 636, 636, 636, 594, 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, 618, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 618, 636, 618, 636, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 641, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 636, 594, 636, 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, 636, 636, 636, 636, 636, 594, 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, 618, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 618, 636, 618, 636, 594, 594, 594, 640, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 636, 636, 636, 636, 594, 636, 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, 636, 636, 636, 636, 636, 594, 635, 626, 581, 626, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 643, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 644, 645, 577, 577, 577, 577, 577, 646, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 647, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 648, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 649, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 650, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 577, 577, 651, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 652, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 653, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 654, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 655, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 577, 577, 656, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 657, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 653, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 577, 577, 658, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 657, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 659, 577, 660, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 661, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 662, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 663, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 664, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 665, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 666, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 667, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 668, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 669, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 670, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 671, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 672, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 662, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 673, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 674, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 618, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 675, 675, 675, 618, 675, 618, 675, 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, 675, 675, 675, 675, 577, 675, 577, 577, 577, 577, 577, 577, 577, 577, 676, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 675, 675, 675, 675, 675, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 677, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 678, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 679, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 680, 642, 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, 642, 642, 642, 642, 577, 642, 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, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 681, 577, 682, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 683, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 655, 577, 577, 577, 684, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 685, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 686, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 671, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 687, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 609, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 669, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 688, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 689, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 690, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 671, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 691, 577, 577, 577, 692, 577, 577, 577, 577, 577, 693, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 693, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 694, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 695, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 696, 697, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 698, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 671, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 699, 577, 577, 700, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 655, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 666, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 701, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 702, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 684, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 703, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 609, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 704, 577, 577, 577, 577, 577, 577, 577, 577, 577, 698, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 666, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 705, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 706, 577, 577, 577, 577, 577, 577, 577, 707, 577, 577, 577, 577, 577, 577, 577, 708, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 684, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 672, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 692, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 709, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 666, 577, 577, 577, 690, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 710, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 711, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 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, 618, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 618, 642, 618, 642, 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, 642, 642, 642, 642, 577, 642, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 660, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 642, 642, 642, 642, 642, 577, 589, 621, 713, 714, 714, 714, 713, 714, 714, 714, 714, 715, 714, 715, 715, 715, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 713, 714, 714, 714, 714, 714, 715, 714, 714, 716, 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, 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, 714, 717, 714, 714, 712, 714, 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, 714, 714, 714, 714, 714, 712, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 104, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 718, 718, 718, 718, 104, 718, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 718, 718, 718, 718, 103, 718, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 718, 718, 718, 718, 718, 103, 715, 719, 715, 715, 715, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 715, 719, 720, 721, 722, 723, 724, 718, 725, 727, 728, 728, 728, 727, 728, 728, 728, 728, 729, 730, 729, 729, 729, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 727, 728, 728, 728, 728, 728, 729, 731, 728, 732, 728, 733, 734, 728, 728, 728, 735, 736, 728, 736, 728, 733, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 737, 738, 739, 728, 728, 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, 741, 742, 728, 733, 726, 733, 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, 728, 743, 728, 736, 728, 726, 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, 744, 744, 744, 744, 744, 745, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 744, 744, 744, 744, 744, 745, 744, 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, 744, 744, 744, 744, 726, 744, 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, 744, 744, 744, 744, 744, 726, 747, 746, 748, 729, 749, 729, 729, 729, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 729, 749, 750, 733, 751, 751, 733, 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, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 733, 751, 752, 753, 754, 755, 733, 751, 733, 751, 733, 751, 733, 756, 751, 733, 751, 758, 733, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 733, 757, 733, 751, 733, 733, 751, 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, 745, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 759, 759, 759, 759, 759, 745, 759, 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, 759, 759, 759, 759, 740, 759, 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, 759, 759, 759, 759, 759, 740, 758, 757, 730, 757, 733, 751, 761, 760, 760, 760, 761, 760, 760, 760, 760, 762, 763, 762, 762, 762, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 761, 760, 760, 760, 760, 760, 762, 760, 760, 764, 760, 113, 765, 760, 766, 760, 767, 113, 144, 768, 146, 113, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 769, 760, 770, 144, 771, 772, 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, 144, 773, 144, 113, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 774, 760, 760, 760, 760, 760, 760, 760, 760, 775, 760, 760, 776, 760, 777, 760, 760, 760, 157, 158, 760, 113, 760, 778, 778, 778, 778, 778, 778, 778, 778, 778, 762, 778, 762, 762, 762, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 762, 778, 778, 778, 778, 139, 140, 778, 141, 778, 142, 143, 144, 145, 146, 139, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 147, 778, 148, 144, 149, 150, 778, 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, 151, 152, 144, 113, 108, 778, 108, 108, 108, 108, 108, 108, 108, 108, 153, 108, 108, 108, 108, 108, 108, 108, 108, 154, 108, 108, 155, 108, 156, 108, 108, 108, 157, 158, 778, 113, 778, 108, 779, 780, 780, 780, 779, 780, 780, 780, 780, 144, 781, 144, 144, 144, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 779, 780, 780, 780, 780, 780, 144, 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, 144, 780, 144, 781, 144, 144, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 107, 107, 107, 107, 107, 113, 107, 107, 107, 107, 107, 107, 107, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 107, 144, 781, 144, 144, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 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, 144, 107, 782, 144, 781, 144, 144, 144, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 144, 783, 783, 783, 783, 783, 783, 783, 783, 783, 784, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 144, 783, 144, 781, 144, 144, 144, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 144, 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, 144, 144, 107, 785, 779, 144, 779, 787, 786, 789, 790, 789, 789, 789, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 789, 788, 791, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 109, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 779, 779, 779, 779, 109, 779, 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, 779, 779, 779, 779, 108, 779, 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, 779, 779, 779, 779, 779, 108, 792, 144, 781, 144, 144, 144, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 144, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 144, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 113, 779, 793, 794, 795, 796, 797, 798, 144, 781, 144, 144, 144, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 144, 779, 779, 779, 779, 779, 779, 779, 779, 779, 113, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 144, 779, 144, 786, 113, 799, 113, 799, 800, 801, 800, 800, 800, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 800, 788, 802, 799, 803, 803, 803, 803, 803, 803, 803, 803, 803, 116, 803, 116, 116, 116, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 116, 803, 803, 803, 803, 117, 118, 803, 119, 803, 120, 121, 122, 123, 124, 117, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 125, 803, 126, 122, 127, 128, 803, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 129, 130, 122, 131, 115, 803, 115, 115, 115, 115, 115, 115, 115, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 133, 115, 115, 134, 115, 135, 115, 115, 115, 136, 137, 803, 131, 803, 115, 144, 799, 804, 799, 805, 799, 806, 799, 807, 183, 183, 183, 807, 183, 183, 183, 183, 808, 183, 808, 808, 808, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 807, 183, 183, 183, 183, 183, 808, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 809, 183, 183, 185, 183, 185, 185, 185, 189, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 183, 183, 183, 183, 185, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 810, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 182, 182, 182, 182, 810, 182, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 182, 182, 182, 182, 185, 182, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 182, 182, 182, 182, 182, 185, 811, 811, 811, 811, 811, 811, 811, 811, 811, 186, 811, 186, 186, 186, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 186, 811, 811, 811, 811, 811, 811, 811, 187, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 811, 188, 811, 811, 185, 811, 185, 185, 185, 189, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 811, 811, 811, 811, 811, 185, 812, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 810, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 811, 811, 811, 811, 810, 811, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 811, 811, 811, 811, 185, 811, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 813, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 811, 811, 811, 811, 811, 185, 190, 811, 815, 814, 814, 814, 815, 814, 814, 814, 814, 816, 814, 816, 816, 816, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 815, 814, 814, 814, 814, 814, 816, 814, 814, 817, 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, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 818, 814, 814, 814, 814, 814, 814, 814, 819, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 820, 814, 816, 821, 816, 816, 816, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 816, 821, 822, 823, 824, 825, 827, 826, 828, 829, 826, 830, 832, 833, 833, 833, 832, 833, 833, 833, 833, 834, 835, 834, 834, 834, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 832, 833, 833, 833, 833, 833, 834, 833, 833, 836, 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, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 833, 837, 833, 833, 831, 833, 831, 831, 831, 831, 831, 831, 831, 831, 838, 831, 831, 831, 831, 831, 831, 831, 831, 839, 831, 831, 840, 831, 841, 831, 831, 831, 833, 833, 833, 833, 833, 831, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 842, 842, 842, 842, 842, 842, 842, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 842, 842, 842, 842, 831, 842, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 842, 842, 842, 842, 842, 831, 834, 843, 834, 834, 834, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 834, 843, 844, 845, 846, 847, 848, 850, 849, 851, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 853, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 854, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 855, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 856, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 857, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 853, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 858, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 859, 831, 831, 831, 831, 831, 831, 831, 860, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 861, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 862, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 853, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 863, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 853, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 864, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 865, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 852, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 831, 852, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 857, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 852, 852, 852, 852, 852, 831, 867, 215, 215, 215, 867, 215, 215, 215, 215, 868, 869, 868, 868, 868, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 867, 215, 215, 215, 215, 215, 868, 870, 215, 871, 215, 872, 873, 215, 874, 215, 875, 876, 215, 877, 878, 879, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 880, 215, 881, 882, 883, 884, 215, 885, 886, 885, 885, 887, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 888, 889, 215, 890, 891, 215, 892, 893, 894, 895, 896, 897, 866, 866, 898, 866, 866, 866, 899, 900, 901, 866, 866, 902, 903, 904, 905, 866, 906, 866, 907, 866, 908, 909, 215, 890, 215, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 914, 913, 913, 915, 913, 916, 918, 919, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 920, 917, 922, 921, 923, 924, 925, 868, 926, 868, 868, 868, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 868, 926, 928, 927, 930, 931, 930, 930, 930, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 930, 929, 215, 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, 932, 932, 932, 215, 932, 933, 934, 935, 936, 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, 938, 938, 938, 938, 938, 938, 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, 938, 940, 213, 213, 213, 940, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 940, 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, 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, 213, 942, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 215, 941, 943, 945, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 215, 944, 215, 204, 216, 217, 216, 216, 216, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 216, 941, 941, 218, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 941, 941, 941, 215, 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, 220, 941, 233, 234, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 233, 232, 232, 235, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 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, 237, 232, 216, 217, 216, 216, 216, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 216, 941, 941, 218, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 941, 941, 941, 215, 215, 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, 220, 941, 947, 932, 949, 948, 932, 950, 950, 950, 932, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 932, 950, 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, 952, 953, 932, 954, 241, 955, 953, 932, 932, 956, 957, 932, 957, 932, 241, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 958, 932, 959, 960, 961, 932, 962, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 963, 932, 932, 241, 951, 241, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 932, 964, 932, 965, 932, 951, 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, 967, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 966, 966, 966, 968, 966, 967, 966, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 966, 966, 966, 966, 951, 966, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 966, 966, 966, 966, 966, 951, 970, 969, 971, 973, 974, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 975, 972, 977, 978, 976, 979, 980, 981, 982, 241, 966, 966, 983, 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, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 241, 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, 966, 966, 966, 966, 966, 966, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 966, 966, 966, 966, 966, 966, 966, 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, 966, 966, 966, 966, 240, 966, 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, 966, 966, 966, 966, 966, 240, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 966, 984, 966, 241, 966, 241, 966, 241, 985, 966, 241, 966, 241, 966, 241, 241, 966, 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, 986, 986, 986, 986, 986, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 986, 986, 986, 986, 986, 986, 989, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 986, 986, 986, 986, 987, 986, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 986, 986, 986, 986, 986, 987, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 990, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 992, 992, 992, 992, 992, 992, 992, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 992, 992, 992, 992, 993, 992, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 992, 992, 992, 992, 992, 993, 984, 966, 983, 966, 995, 996, 932, 997, 256, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 257, 246, 258, 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, 257, 247, 257, 260, 215, 932, 890, 215, 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, 932, 932, 215, 932, 215, 942, 932, 1001, 1000, 1000, 1000, 1001, 1000, 1000, 1000, 1000, 1002, 1003, 1002, 1002, 1002, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1001, 1000, 1000, 1000, 1000, 1000, 1002, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1000, 1005, 1000, 1000, 1004, 1000, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1000, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 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, 1006, 1006, 1006, 1006, 1007, 1006, 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, 1006, 1006, 1006, 1006, 1006, 1007, 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, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 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, 1009, 1008, 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, 1012, 1011, 1011, 1011, 1012, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1012, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1014, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1015, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1016, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1017, 1011, 1011, 1018, 1011, 1019, 1020, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1021, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1021, 1021, 1024, 1024, 281, 281, 281, 1024, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 1024, 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, 282, 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, 1025, 281, 1026, 1027, 1028, 1028, 281, 281, 281, 1028, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 1028, 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, 282, 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, 1029, 281, 280, 1028, 1030, 1031, 1032, 1032, 268, 268, 268, 1032, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 1032, 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, 269, 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, 1033, 268, 1028, 262, 262, 262, 1028, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1028, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1034, 262, 1024, 268, 268, 268, 1024, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 1024, 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, 269, 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, 270, 268, 1024, 1035, 1035, 1035, 1024, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1024, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1036, 1035, 1037, 1038, 1038, 1035, 1035, 1035, 1038, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1038, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1039, 1035, 1038, 262, 262, 262, 1038, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1038, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 1034, 262, 1040, 1038, 1038, 268, 268, 268, 1038, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 1038, 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, 269, 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, 270, 268, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1042, 1042, 1042, 1042, 1042, 1042, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1042, 1042, 1042, 1042, 1042, 1042, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1043, 1041, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1044, 1044, 1044, 1044, 1044, 1044, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1044, 1044, 1044, 1044, 1044, 1044, 1041, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1045, 1045, 1045, 1045, 1045, 1045, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1045, 1045, 1045, 1045, 1045, 1045, 1041, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1046, 1046, 1046, 1046, 1046, 1046, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1046, 1046, 1046, 1046, 1046, 1046, 1041, 1047, 1050, 1049, 1049, 1049, 1050, 1049, 1049, 1049, 1049, 1051, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1050, 1049, 1049, 1049, 1049, 1049, 1051, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1052, 1052, 1052, 1052, 1052, 1052, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1052, 1052, 1052, 1052, 1052, 1052, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1053, 1049, 1050, 1049, 1049, 1049, 1050, 1049, 1049, 1049, 1049, 1048, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1050, 1049, 1049, 1049, 1049, 1049, 1048, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1054, 1054, 1054, 1054, 1054, 1054, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1054, 1054, 1054, 1054, 1054, 1054, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1055, 1049, 1048, 1050, 1054, 1054, 1054, 1050, 1054, 1054, 1054, 1054, 1048, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1050, 1054, 1054, 1054, 1054, 1054, 1048, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1048, 1054, 1056, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1051, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1051, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058, 1058, 1058, 1058, 1058, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058, 1058, 1058, 1058, 1058, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1048, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1054, 1054, 1054, 1054, 1054, 1054, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1054, 1054, 1054, 1054, 1054, 1054, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1060, 1060, 1060, 1060, 1060, 1060, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1060, 1060, 1060, 1060, 1060, 1060, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058, 1058, 1058, 1058, 1058, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058, 1058, 1058, 1058, 1058, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1062, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1063, 1063, 1063, 1063, 1063, 1063, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1063, 1063, 1063, 1063, 1063, 1063, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1064, 1064, 1064, 1064, 1064, 1064, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1064, 1064, 1064, 1064, 1064, 1064, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1065, 1065, 1065, 1065, 1065, 1065, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1065, 1065, 1065, 1065, 1065, 1065, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1066, 1066, 1066, 1066, 1066, 1066, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1066, 1066, 1066, 1066, 1066, 1066, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1059, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1048, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1069, 1069, 1069, 1069, 1069, 1069, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1069, 1069, 1069, 1069, 1069, 1069, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1070, 1070, 1070, 1070, 1070, 1070, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1070, 1070, 1070, 1070, 1070, 1070, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1071, 1071, 1071, 1071, 1071, 1071, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1071, 1071, 1071, 1071, 1071, 1071, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1072, 1072, 1072, 1072, 1072, 1072, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1072, 1072, 1072, 1072, 1072, 1072, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1073, 1073, 1073, 1073, 1073, 1073, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1073, 1073, 1073, 1073, 1073, 1073, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1074, 1074, 1074, 1074, 1074, 1074, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1074, 1074, 1074, 1074, 1074, 1074, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1075, 1075, 1075, 1075, 1075, 1075, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1075, 1075, 1075, 1075, 1075, 1075, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1048, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1076, 1076, 1076, 1076, 1076, 1076, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1076, 1076, 1076, 1076, 1076, 1076, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1077, 1077, 1077, 1077, 1077, 1077, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1077, 1077, 1077, 1077, 1077, 1077, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1078, 1078, 1078, 1078, 1078, 1078, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1078, 1078, 1078, 1078, 1078, 1078, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1079, 1079, 1079, 1079, 1079, 1079, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1079, 1079, 1079, 1079, 1079, 1079, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1050, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1050, 1057, 1057, 1057, 1057, 1057, 1068, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1067, 1067, 1067, 1067, 1067, 1067, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1061, 1057, 1080, 1081, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1083, 1083, 1083, 1083, 1083, 1083, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1083, 1083, 1083, 1083, 1083, 1083, 1082, 1082, 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, 204, 204, 204, 287, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 204, 204, 289, 204, 287, 204, 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, 204, 204, 204, 204, 286, 204, 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, 204, 204, 204, 204, 204, 286, 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, 287, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 932, 932, 289, 932, 287, 932, 286, 286, 286, 286, 1084, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 932, 932, 932, 932, 286, 932, 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, 932, 932, 932, 932, 932, 286, 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, 287, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 288, 932, 932, 289, 932, 287, 932, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 1085, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 932, 932, 932, 932, 286, 932, 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, 932, 932, 932, 932, 932, 286, 1086, 1087, 932, 927, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 1088, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 1089, 1090, 866, 866, 866, 866, 866, 1091, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1092, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 1093, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1094, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 1095, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 1096, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1097, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 1098, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 1099, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 1100, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 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, 204, 204, 204, 287, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 204, 204, 289, 204, 287, 204, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 204, 204, 204, 204, 866, 204, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 204, 204, 204, 204, 204, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 1101, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1102, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 1098, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 1103, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1102, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1104, 866, 1105, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 1106, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 1107, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1108, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1109, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 1110, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 1111, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1112, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 1113, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 1114, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1115, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1116, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 1117, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1107, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1118, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1119, 866, 1120, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1121, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1100, 866, 866, 866, 1118, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1122, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1123, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1116, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 1124, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 901, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1114, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 1125, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1126, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 1127, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1128, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1116, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1129, 866, 866, 866, 1130, 866, 866, 866, 866, 866, 1131, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1131, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1132, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 1133, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1134, 1135, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 1136, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1137, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1138, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1141, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1142, 1139, 1139, 1143, 1139, 1141, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1139, 1139, 1139, 1139, 1140, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1139, 1139, 1139, 1139, 1139, 1140, 918, 1144, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 920, 917, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1145, 866, 866, 1146, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1100, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1111, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1147, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1148, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1118, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1149, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 901, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 1150, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1151, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1111, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1116, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1152, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 1153, 866, 866, 866, 866, 866, 866, 866, 1154, 866, 866, 866, 866, 866, 866, 866, 1155, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1118, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1156, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1157, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1125, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 1158, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1125, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 1159, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1111, 866, 866, 866, 1160, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1161, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1125, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 1162, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 1163, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 910, 911, 911, 911, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 911, 287, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 288, 910, 910, 289, 910, 287, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 912, 910, 910, 866, 910, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 1105, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 910, 910, 910, 910, 910, 866, 1164, 215, 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, 932, 1165, 932, 1167, 1166, 1166, 1166, 1167, 1166, 1166, 1166, 1166, 1168, 1169, 1168, 1168, 1168, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1167, 1166, 1166, 1166, 1166, 1166, 1168, 1166, 1166, 1170, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1171, 1166, 1168, 1172, 1168, 1168, 1168, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1168, 1172, 1173, 1174, 1175, 1176, 1177, 1179, 1178, 1180, 1182, 1183, 1183, 1183, 1182, 1183, 1183, 1183, 1183, 1184, 1185, 1184, 1184, 1184, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1182, 1183, 1183, 1183, 1183, 1183, 1184, 1183, 1186, 1187, 1183, 1183, 1183, 1186, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1183, 1188, 1183, 1183, 1181, 1183, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1183, 1183, 1183, 1183, 1183, 1181, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 295, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 296, 1189, 1189, 1189, 1189, 295, 1189, 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, 1189, 1189, 1189, 1189, 294, 1189, 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, 1189, 1189, 1189, 1189, 1189, 294, 1184, 1190, 1184, 1184, 1184, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1184, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1189, 1197, 1199, 1200, 1200, 1200, 1199, 1200, 1200, 1200, 1200, 1201, 1202, 1201, 1201, 1201, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1199, 1200, 1200, 1200, 1200, 1200, 1201, 1203, 1204, 1205, 1206, 1207, 1208, 1204, 1209, 1210, 1211, 1207, 1212, 1213, 1214, 1207, 1215, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1224, 1224, 1226, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1227, 1228, 1229, 1207, 1230, 1204, 1231, 1232, 1233, 1234, 1235, 1236, 1198, 1198, 1237, 1198, 1198, 1198, 1238, 1239, 1240, 1198, 1198, 1241, 1242, 1243, 1244, 1198, 1245, 1198, 1246, 1198, 1247, 1248, 1249, 1250, 1200, 1198, 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, 1251, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 304, 304, 304, 304, 304, 1251, 304, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 304, 304, 304, 304, 1198, 304, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 304, 304, 304, 304, 304, 1198, 1253, 1252, 1254, 1201, 1255, 1201, 1201, 1201, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1201, 1255, 1256, 1258, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1258, 1257, 1259, 1260, 1261, 1262, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 299, 299, 1263, 299, 1263, 299, 299, 1263, 1263, 299, 299, 299, 1264, 299, 299, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 299, 299, 299, 299, 299, 299, 299, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 1263, 299, 1263, 1263, 316, 299, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 1263, 1263, 1263, 299, 1263, 316, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 1266, 1266, 1266, 1266, 316, 1266, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 1266, 1266, 1266, 1266, 1266, 316, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1266, 1267, 304, 1207, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1269, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1267, 1268, 1270, 1271, 1207, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1267, 1272, 1267, 1273, 1268, 1275, 1274, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 1274, 1277, 1276, 1278, 1276, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1280, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1281, 1279, 1279, 1279, 1279, 1279, 1280, 1279, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 301, 1279, 1283, 1282, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1285, 1282, 1286, 1287, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1288, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1289, 1282, 1282, 1282, 1282, 1282, 1282, 1290, 1282, 1282, 1285, 1282, 1286, 1287, 1282, 1282, 1282, 1291, 1282, 1282, 1282, 1282, 1282, 1288, 1282, 1282, 1292, 1282, 1282, 1282, 1282, 1282, 1289, 1282, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1294, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1295, 1293, 1293, 1293, 1293, 1293, 1294, 1293, 1293, 1293, 1296, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1297, 1293, 1298, 304, 1298, 304, 304, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 304, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1298, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1300, 1299, 1302, 1301, 1303, 1305, 1304, 1304, 1304, 1306, 1304, 1307, 1308, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1290, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1291, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1292, 1282, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1310, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1291, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1292, 1282, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1313, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1316, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1318, 1317, 1319, 1321, 1320, 1320, 1320, 1322, 1320, 1324, 1323, 1325, 1326, 1328, 1328, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1329, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1330, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1331, 1327, 1332, 1332, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1333, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1332, 1332, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1316, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1336, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1337, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1338, 1334, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1341, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1342, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1343, 1339, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1345, 1345, 1345, 1345, 1345, 1345, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1346, 1344, 1345, 1345, 1345, 1345, 1345, 1345, 1344, 1344, 1347, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1348, 1344, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1349, 1349, 1349, 1349, 1349, 1349, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1350, 1311, 1349, 1349, 1349, 1349, 1349, 1349, 1311, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1349, 1349, 1349, 1349, 1349, 1349, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1316, 1311, 1349, 1349, 1349, 1349, 1349, 1349, 1311, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1352, 1351, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1354, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1355, 1351, 1351, 1351, 1351, 1351, 1354, 1351, 1351, 1351, 1356, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1357, 1351, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1359, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1356, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1357, 1351, 1360, 1311, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1362, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1363, 1311, 1311, 1311, 1311, 1311, 1362, 1311, 1311, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1316, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1314, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1315, 1311, 1269, 1276, 1207, 1364, 1268, 1258, 1268, 1365, 1366, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1258, 1276, 1258, 1268, 1258, 1207, 1268, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 1263, 1263, 1263, 1263, 1263, 1263, 1367, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 1263, 1263, 1263, 1263, 316, 1263, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 1263, 1263, 1263, 1263, 1263, 316, 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, 1251, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1368, 304, 304, 304, 304, 1251, 304, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 304, 304, 304, 304, 1224, 304, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 304, 304, 304, 304, 304, 1224, 1369, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1251, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1368, 1370, 1370, 1370, 1370, 1251, 1370, 1224, 1224, 1224, 1224, 1371, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1224, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1370, 1224, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1251, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1368, 1370, 1370, 1370, 1370, 1251, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1372, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1224, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1370, 1224, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1251, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1368, 1370, 1370, 1370, 1370, 1251, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1373, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1224, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1370, 1224, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1251, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1368, 1370, 1370, 1370, 1370, 1251, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1374, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1224, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1370, 1224, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1251, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1368, 1370, 1370, 1370, 1370, 1251, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1375, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1224, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1370, 1224, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1251, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1368, 1370, 1370, 1370, 1370, 1251, 1370, 1224, 1224, 1224, 1374, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1224, 1370, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1370, 1370, 1370, 1370, 1370, 1224, 1376, 1378, 1377, 1379, 1380, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1382, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1383, 1384, 1198, 1198, 1198, 1198, 1198, 1385, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1386, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1387, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1388, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1389, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1390, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1391, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1392, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1393, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1394, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1395, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1396, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1397, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1398, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1399, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1400, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1396, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1401, 1198, 1402, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1403, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1404, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1405, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1406, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1407, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1408, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1409, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1410, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1406, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1411, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1412, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1413, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1414, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1415, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1416, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1406, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1417, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1418, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1419, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 318, 319, 318, 318, 318, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 318, 1251, 1420, 320, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1420, 1420, 321, 1420, 1420, 1251, 1420, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1420, 322, 1420, 1420, 1198, 1420, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1420, 1420, 1420, 1420, 1420, 1198, 335, 336, 335, 335, 335, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 335, 334, 334, 337, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 340, 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, 339, 334, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1422, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1423, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1424, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1251, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1425, 1425, 1425, 1425, 1425, 1251, 1425, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1425, 1425, 1425, 1425, 1198, 1425, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1426, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1425, 1425, 1425, 1425, 1425, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1427, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1428, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1429, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1430, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1431, 1198, 1432, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1433, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1406, 1198, 1198, 1198, 1434, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1406, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1399, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1435, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1436, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1416, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1437, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1240, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1438, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1439, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1399, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1406, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1440, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1406, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1441, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1442, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1443, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1416, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1444, 1198, 1198, 1198, 1445, 1198, 1198, 1198, 1198, 1198, 1446, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1447, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1413, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1399, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1448, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1449, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1450, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1451, 1452, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1399, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1453, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1454, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1440, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1455, 1198, 1198, 1456, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1399, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1457, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1413, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1458, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1459, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1460, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1399, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1461, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1462, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1448, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1463, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1464, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1410, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1439, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1465, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1466, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1467, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1468, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1469, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1405, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1470, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1471, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1440, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1472, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1440, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1473, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1410, 1198, 1198, 1198, 1474, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1475, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1440, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1476, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1477, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1478, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1251, 1381, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1198, 1381, 1198, 1198, 1198, 1448, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1381, 1381, 1381, 1381, 1381, 1198, 1479, 1267, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1207, 1257, 1480, 1482, 1481, 1482, 1482, 1482, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1482, 1481, 1481, 1483, 1481, 1481, 1484, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 347, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1485, 1481, 344, 345, 344, 344, 344, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 344, 1486, 1486, 1486, 1486, 1486, 346, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 347, 1486, 349, 1487, 349, 349, 349, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 349, 1487, 1487, 1488, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1489, 1487, 351, 350, 357, 1486, 355, 1486, 1491, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1492, 1490, 1491, 1490, 1491, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1494, 1490, 1491, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1495, 1490, 1491, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1496, 1490, 1498, 1496, 0 ] class << self attr_accessor :_lex_trans_targs private :_lex_trans_targs, :_lex_trans_targs= end self._lex_trans_targs = [ 185, 2, 3, 4, 191, 6, 7, 8, 9, 10, 185, 185, 194, 197, 194, 12, 198, 199, 14, 194, 206, 207, 210, 211, 217, 212, 213, 214, 19, 215, 216, 219, 221, 222, 223, 224, 225, 25, 18, 208, 209, 27, 248, 249, 251, 253, 251, 30, 254, 255, 32, 251, 262, 263, 266, 267, 273, 268, 269, 270, 37, 271, 272, 275, 277, 278, 279, 280, 281, 43, 36, 264, 265, 45, 304, 305, 312, 314, 312, 48, 315, 316, 50, 318, 321, 318, 52, 322, 323, 54, 329, 328, 0, 56, 330, 331, 58, 332, 333, 333, 333, 333, 446, 61, 62, 63, 446, 474, 64, 65, 474, 474, 478, 478, 69, 64, 70, 476, 477, 479, 480, 478, 474, 481, 482, 484, 66, 67, 485, 486, 68, 478, 71, 72, 77, 84, 488, 489, 70, 476, 477, 479, 480, 478, 474, 481, 482, 484, 66, 67, 485, 486, 68, 71, 72, 77, 84, 488, 489, 487, 73, 74, 75, 76, 78, 79, 82, 80, 81, 83, 85, 86, 474, 88, 89, 90, 92, 95, 93, 94, 96, 98, 505, 505, 505, 506, 100, 508, 101, 509, 102, 506, 100, 508, 101, 509, 543, 103, 543, 104, 105, 103, 543, 104, 543, 543, 543, 108, 109, 110, 111, 554, 543, 543, 559, 543, 114, 115, 116, 543, 119, 114, 115, 116, 543, 119, 117, 117, 115, 116, 565, 118, 117, 117, 115, 116, 565, 118, 115, 543, 581, 543, 121, 582, 588, 125, 597, 598, 130, 131, 125, 126, 596, 126, 596, 543, 127, 128, 129, 599, 132, 543, 613, 614, 617, 618, 624, 619, 620, 621, 137, 622, 623, 626, 628, 629, 630, 631, 632, 143, 136, 615, 616, 145, 668, 669, 147, 545, 106, 547, 149, 150, 671, 773, 152, 153, 154, 773, 781, 781, 781, 157, 803, 802, 781, 805, 807, 781, 162, 163, 164, 811, 781, 166, 167, 822, 791, 844, 170, 171, 172, 176, 177, 170, 171, 172, 176, 177, 173, 173, 171, 172, 174, 175, 173, 173, 171, 172, 174, 175, 892, 171, 781, 961, 178, 963, 184, 961, 961, 179, 181, 963, 961, 181, 963, 183, 963, 961, 185, 185, 186, 187, 188, 190, 192, 193, 185, 185, 185, 189, 185, 189, 185, 1, 185, 185, 185, 5, 194, 194, 195, 194, 196, 200, 194, 194, 11, 13, 194, 194, 194, 194, 201, 202, 203, 15, 21, 26, 226, 28, 194, 194, 194, 204, 205, 194, 16, 194, 194, 194, 17, 194, 194, 194, 20, 218, 220, 22, 194, 194, 23, 24, 194, 227, 231, 228, 229, 230, 194, 194, 232, 233, 236, 238, 247, 234, 235, 194, 237, 239, 241, 240, 194, 242, 243, 244, 245, 246, 194, 194, 194, 250, 251, 251, 251, 252, 256, 251, 29, 31, 251, 251, 251, 251, 257, 258, 259, 33, 39, 44, 282, 46, 251, 251, 251, 260, 261, 251, 34, 251, 251, 251, 35, 251, 251, 251, 38, 274, 276, 40, 251, 251, 41, 42, 251, 283, 287, 284, 285, 286, 251, 251, 288, 289, 292, 294, 303, 290, 291, 251, 293, 295, 297, 296, 251, 298, 299, 300, 301, 302, 251, 251, 251, 306, 307, 307, 308, 307, 309, 307, 307, 307, 310, 310, 310, 311, 310, 310, 310, 312, 312, 312, 313, 312, 47, 49, 312, 312, 312, 317, 317, 317, 318, 318, 319, 318, 320, 318, 318, 51, 53, 318, 318, 318, 324, 324, 325, 324, 324, 326, 327, 326, 55, 57, 328, 328, 328, 334, 333, 333, 335, 336, 337, 338, 340, 343, 344, 345, 346, 333, 347, 348, 350, 352, 353, 354, 358, 360, 361, 362, 378, 383, 390, 395, 402, 409, 412, 413, 417, 411, 421, 429, 433, 435, 440, 442, 445, 333, 333, 333, 333, 333, 333, 339, 333, 339, 333, 341, 59, 342, 333, 60, 333, 333, 349, 351, 333, 355, 356, 357, 353, 359, 333, 363, 364, 373, 376, 365, 366, 367, 368, 369, 370, 371, 372, 334, 374, 375, 377, 379, 382, 380, 381, 384, 387, 385, 386, 388, 389, 391, 393, 392, 394, 396, 397, 333, 398, 399, 400, 401, 333, 403, 406, 404, 405, 407, 408, 410, 414, 415, 416, 418, 420, 419, 422, 423, 424, 426, 425, 427, 428, 430, 431, 432, 434, 436, 437, 438, 439, 441, 443, 444, 447, 446, 446, 448, 449, 451, 446, 446, 446, 450, 446, 450, 452, 446, 454, 453, 453, 457, 458, 459, 460, 453, 462, 463, 464, 465, 467, 469, 470, 471, 472, 473, 453, 455, 453, 456, 453, 453, 453, 453, 453, 461, 453, 461, 466, 453, 468, 453, 474, 474, 475, 490, 491, 477, 493, 494, 481, 495, 496, 497, 498, 499, 501, 502, 503, 504, 474, 474, 474, 474, 474, 474, 478, 483, 474, 474, 474, 474, 474, 474, 474, 474, 474, 492, 474, 492, 474, 474, 474, 474, 500, 474, 87, 91, 97, 505, 507, 510, 99, 505, 505, 506, 511, 511, 512, 513, 515, 517, 518, 511, 511, 514, 511, 514, 511, 516, 511, 511, 511, 520, 519, 519, 521, 522, 523, 525, 527, 528, 533, 540, 519, 519, 519, 519, 524, 519, 524, 519, 526, 519, 519, 520, 529, 530, 531, 532, 534, 535, 538, 536, 537, 539, 541, 542, 544, 543, 552, 553, 555, 556, 558, 560, 561, 562, 564, 566, 567, 569, 570, 595, 601, 602, 603, 671, 672, 673, 674, 675, 563, 677, 694, 699, 706, 711, 713, 719, 722, 723, 727, 721, 731, 742, 746, 749, 757, 761, 764, 765, 543, 103, 104, 543, 106, 546, 543, 543, 548, 550, 551, 543, 549, 543, 543, 543, 543, 543, 107, 543, 543, 543, 543, 543, 557, 543, 557, 543, 543, 112, 543, 543, 113, 543, 543, 563, 543, 568, 543, 543, 543, 571, 580, 543, 120, 583, 584, 585, 543, 586, 122, 589, 590, 123, 593, 594, 543, 572, 574, 543, 573, 543, 543, 575, 578, 579, 543, 576, 577, 543, 543, 543, 543, 543, 543, 587, 543, 581, 591, 592, 543, 591, 543, 581, 591, 124, 600, 543, 543, 543, 604, 543, 543, 543, 605, 607, 543, 606, 543, 606, 543, 608, 609, 610, 133, 139, 144, 633, 146, 543, 543, 543, 611, 612, 543, 134, 543, 543, 543, 135, 543, 543, 543, 138, 625, 627, 140, 543, 543, 141, 142, 543, 634, 638, 635, 636, 637, 543, 543, 639, 640, 643, 654, 667, 641, 642, 543, 644, 645, 646, 648, 647, 543, 649, 650, 651, 652, 653, 655, 662, 656, 657, 658, 659, 660, 661, 663, 664, 665, 666, 543, 543, 543, 670, 148, 151, 543, 676, 678, 679, 689, 692, 680, 681, 682, 683, 684, 685, 686, 687, 688, 690, 691, 693, 695, 698, 696, 697, 700, 703, 701, 702, 704, 705, 707, 709, 708, 710, 712, 714, 716, 715, 717, 718, 720, 688, 724, 725, 726, 728, 730, 729, 732, 733, 734, 739, 735, 736, 737, 543, 544, 545, 106, 738, 550, 740, 741, 743, 744, 745, 747, 748, 750, 751, 752, 755, 753, 754, 756, 758, 759, 760, 762, 763, 543, 563, 766, 766, 767, 768, 769, 771, 766, 766, 766, 770, 766, 770, 766, 772, 766, 774, 773, 773, 775, 776, 773, 777, 779, 773, 773, 773, 773, 778, 773, 778, 780, 773, 782, 781, 781, 785, 786, 787, 781, 788, 790, 793, 794, 795, 796, 797, 781, 798, 799, 804, 832, 836, 781, 837, 839, 841, 781, 842, 843, 845, 849, 851, 852, 854, 855, 873, 878, 885, 893, 900, 907, 912, 913, 917, 911, 922, 932, 938, 941, 950, 954, 958, 959, 960, 793, 783, 781, 784, 781, 781, 781, 781, 781, 781, 789, 781, 789, 781, 155, 792, 781, 781, 781, 781, 781, 781, 781, 781, 781, 800, 781, 801, 781, 781, 156, 158, 781, 159, 813, 824, 827, 806, 828, 829, 814, 818, 820, 781, 806, 159, 808, 810, 160, 781, 808, 781, 809, 781, 781, 161, 812, 781, 781, 815, 817, 781, 815, 816, 818, 820, 817, 781, 819, 781, 781, 821, 823, 781, 165, 781, 781, 781, 825, 817, 818, 820, 825, 826, 781, 815, 817, 818, 820, 781, 815, 817, 818, 820, 781, 830, 817, 818, 820, 830, 831, 781, 159, 832, 806, 833, 818, 820, 834, 817, 159, 834, 806, 835, 838, 840, 781, 168, 169, 781, 781, 846, 847, 848, 843, 850, 781, 781, 853, 781, 781, 781, 856, 857, 866, 871, 858, 859, 860, 861, 862, 863, 864, 865, 782, 867, 868, 869, 870, 782, 872, 874, 877, 875, 876, 782, 782, 879, 882, 880, 881, 883, 884, 782, 886, 888, 887, 889, 890, 891, 781, 781, 894, 782, 895, 781, 896, 897, 898, 899, 783, 901, 904, 902, 903, 905, 906, 908, 909, 910, 782, 914, 915, 916, 918, 920, 921, 919, 782, 923, 924, 925, 928, 926, 927, 929, 930, 931, 933, 935, 934, 936, 937, 939, 940, 942, 943, 945, 948, 944, 946, 947, 949, 951, 952, 953, 955, 956, 957, 781, 781, 961, 962, 964, 965, 966, 961, 961, 180, 182, 968, 967, 969, 967, 970, 971, 972, 967, 967 ] class << self attr_accessor :_lex_trans_actions private :_lex_trans_actions, :_lex_trans_actions= end self._lex_trans_actions = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 0, 0, 0, 0, 6, 0, 7, 0, 8, 0, 7, 0, 0, 0, 0, 8, 7, 0, 8, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 9, 0, 10, 0, 0, 0, 0, 11, 0, 7, 0, 8, 0, 7, 0, 0, 0, 0, 8, 7, 0, 8, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 0, 0, 0, 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, 29, 30, 31, 29, 32, 31, 33, 31, 29, 29, 30, 29, 34, 29, 29, 35, 29, 29, 29, 29, 29, 29, 0, 36, 37, 0, 38, 37, 39, 37, 0, 0, 36, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 43, 44, 45, 0, 0, 0, 45, 28, 46, 29, 29, 29, 46, 47, 0, 48, 0, 28, 29, 49, 29, 50, 51, 52, 0, 0, 0, 0, 0, 53, 54, 0, 55, 0, 28, 0, 56, 0, 29, 57, 29, 58, 29, 59, 60, 61, 60, 62, 60, 0, 63, 64, 63, 65, 63, 66, 67, 0, 68, 0, 0, 0, 0, 69, 69, 0, 0, 70, 70, 71, 0, 28, 72, 0, 0, 0, 69, 0, 73, 0, 7, 0, 8, 0, 7, 0, 0, 0, 0, 8, 7, 0, 8, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 74, 75, 0, 0, 0, 76, 77, 78, 79, 0, 7, 7, 80, 81, 81, 82, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 57, 29, 29, 29, 59, 60, 61, 60, 60, 60, 0, 63, 64, 63, 63, 63, 84, 66, 85, 86, 0, 87, 88, 89, 90, 0, 59, 91, 92, 0, 93, 28, 94, 95, 98, 99, 0, 28, 0, 7, 0, 7, 100, 101, 102, 59, 103, 0, 104, 0, 105, 106, 107, 0, 108, 109, 0, 110, 7, 7, 111, 112, 0, 0, 113, 114, 115, 116, 117, 117, 117, 117, 117, 117, 117, 117, 118, 119, 120, 0, 0, 121, 0, 122, 123, 124, 0, 125, 126, 127, 0, 7, 0, 0, 128, 129, 0, 28, 130, 0, 0, 0, 0, 0, 131, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 135, 136, 137, 0, 138, 139, 140, 7, 7, 141, 0, 0, 142, 143, 144, 145, 117, 117, 117, 117, 117, 117, 117, 117, 146, 147, 148, 0, 0, 149, 0, 150, 151, 152, 0, 153, 154, 155, 0, 7, 0, 0, 156, 157, 0, 28, 158, 0, 0, 0, 0, 0, 159, 160, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 163, 164, 165, 0, 166, 167, 0, 168, 0, 169, 170, 171, 172, 173, 174, 0, 175, 176, 177, 178, 179, 180, 7, 181, 0, 0, 182, 183, 184, 185, 186, 187, 188, 189, 0, 190, 7, 191, 192, 0, 0, 193, 194, 195, 196, 197, 0, 198, 199, 200, 0, 201, 0, 0, 202, 203, 204, 205, 206, 207, 0, 28, 0, 0, 7, 7, 0, 0, 0, 208, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 211, 212, 213, 214, 215, 59, 216, 0, 217, 0, 0, 0, 218, 0, 219, 220, 0, 0, 221, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 226, 227, 0, 0, 0, 228, 229, 230, 59, 231, 0, 28, 232, 0, 233, 234, 0, 28, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 237, 0, 238, 239, 240, 241, 242, 59, 243, 0, 0, 244, 0, 245, 246, 247, 248, 28, 0, 27, 0, 0, 27, 0, 0, 0, 0, 0, 0, 7, 7, 7, 249, 250, 251, 252, 253, 254, 255, 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 59, 265, 0, 266, 267, 268, 269, 270, 271, 0, 0, 0, 272, 7, 7, 0, 273, 274, 275, 276, 277, 0, 0, 0, 0, 0, 278, 279, 59, 280, 0, 281, 28, 282, 283, 284, 285, 286, 287, 0, 28, 0, 0, 0, 0, 0, 0, 288, 289, 290, 291, 59, 292, 0, 293, 28, 294, 295, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 298, 0, 8, 0, 0, 7, 299, 0, 0, 299, 299, 0, 0, 7, 300, 0, 300, 0, 300, 300, 300, 0, 0, 300, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 0, 0, 301, 302, 302, 303, 304, 0, 305, 306, 0, 74, 0, 307, 0, 308, 309, 310, 311, 312, 29, 313, 314, 315, 316, 317, 59, 318, 0, 319, 320, 0, 321, 322, 0, 323, 324, 299, 325, 0, 326, 327, 328, 0, 0, 329, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 333, 334, 0, 0, 0, 335, 0, 0, 336, 337, 338, 339, 340, 341, 0, 342, 343, 343, 0, 344, 0, 345, 346, 346, 0, 0, 347, 348, 349, 0, 350, 351, 352, 0, 7, 353, 354, 355, 0, 356, 117, 117, 117, 117, 117, 117, 117, 117, 357, 358, 359, 0, 0, 360, 0, 361, 362, 363, 0, 364, 365, 366, 0, 7, 0, 0, 367, 368, 0, 28, 369, 0, 0, 0, 0, 0, 370, 371, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 375, 376, 0, 0, 0, 377, 28, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 74, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 378, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 379, 380, 381, 382, 383, 383, 379, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 384, 385, 386, 387, 0, 28, 0, 0, 388, 389, 390, 59, 391, 0, 392, 28, 393, 7, 394, 395, 0, 28, 396, 0, 0, 397, 398, 399, 400, 59, 401, 0, 28, 402, 403, 404, 405, 0, 28, 0, 406, 0, 7, 407, 0, 0, 0, 0, 408, 0, 0, 409, 409, 0, 410, 0, 0, 0, 411, 7, 412, 412, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 414, 415, 0, 416, 417, 418, 419, 420, 421, 59, 422, 0, 423, 0, 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, 0, 433, 0, 434, 435, 0, 0, 436, 437, 438, 0, 0, 439, 0, 0, 438, 440, 440, 441, 442, 0, 443, 444, 0, 445, 446, 447, 0, 448, 449, 0, 0, 450, 451, 438, 438, 452, 0, 0, 453, 453, 0, 454, 0, 455, 456, 7, 0, 457, 0, 458, 459, 460, 461, 461, 462, 462, 0, 0, 463, 464, 464, 465, 465, 466, 467, 467, 468, 468, 469, 470, 470, 471, 471, 0, 0, 472, 473, 474, 475, 476, 477, 477, 474, 476, 478, 409, 479, 0, 0, 0, 480, 0, 0, 481, 482, 412, 412, 412, 483, 412, 484, 485, 28, 486, 487, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 490, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 491, 493, 494, 0, 495, 0, 496, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 500, 501, 7, 502, 88, 502, 503, 504, 0, 0, 0, 505, 0, 506, 0, 0, 0, 507, 508 ] class << self attr_accessor :_lex_to_state_actions private :_lex_to_state_actions, :_lex_to_state_actions= end self._lex_to_state_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 96, 0, 96, 0, 0, 0, 0, 96, 96, 0, 0, 0, 0, 0, 96, 0, 96, 0, 96, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lex_from_state_actions private :_lex_from_state_actions, :_lex_from_state_actions= end self._lex_from_state_actions = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 97, 0, 97, 0, 0, 0, 0, 97, 97, 0, 0, 0, 0, 0, 97, 0, 97, 0, 97, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lex_eof_trans private :_lex_eof_trans, :_lex_eof_trans= end self._lex_eof_trans = [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 45, 45, 45, 45, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 77, 77, 77, 77, 84, 84, 84, 84, 0, 0, 0, 0, 99, 101, 103, 103, 103, 108, 108, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 183, 185, 185, 185, 197, 197, 197, 205, 207, 207, 207, 207, 207, 213, 205, 205, 205, 205, 205, 205, 205, 240, 240, 240, 240, 240, 240, 205, 256, 205, 256, 240, 240, 205, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 205, 240, 240, 240, 240, 294, 294, 294, 299, 301, 301, 301, 305, 305, 308, 308, 308, 308, 313, 313, 313, 299, 305, 305, 305, 305, 305, 305, 305, 305, 305, 344, 349, 349, 353, 349, 353, 344, 0, 367, 368, 369, 371, 373, 375, 373, 373, 0, 385, 386, 390, 390, 391, 392, 401, 402, 403, 403, 403, 406, 406, 408, 409, 410, 410, 410, 412, 413, 414, 414, 410, 406, 406, 419, 420, 420, 420, 420, 420, 423, 423, 423, 423, 429, 430, 430, 430, 430, 438, 430, 430, 430, 430, 443, 430, 430, 430, 430, 430, 430, 449, 450, 451, 451, 0, 458, 462, 462, 463, 464, 473, 474, 475, 475, 475, 478, 478, 480, 481, 482, 482, 482, 484, 485, 486, 486, 482, 478, 478, 491, 492, 492, 492, 492, 492, 495, 495, 495, 495, 501, 502, 502, 502, 502, 510, 502, 502, 502, 502, 515, 502, 502, 502, 502, 502, 502, 521, 522, 523, 523, 0, 530, 531, 0, 537, 0, 544, 548, 548, 549, 0, 0, 558, 559, 563, 563, 564, 0, 569, 0, 572, 0, 575, 575, 576, 577, 0, 618, 620, 621, 622, 623, 625, 627, 631, 631, 622, 622, 622, 622, 633, 622, 622, 627, 622, 622, 618, 637, 637, 637, 637, 637, 637, 627, 627, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 676, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 622, 0, 719, 720, 721, 723, 719, 726, 0, 745, 747, 749, 750, 751, 752, 753, 755, 752, 752, 752, 752, 752, 758, 752, 752, 760, 758, 758, 752, 0, 779, 780, 108, 108, 783, 784, 108, 780, 780, 787, 789, 792, 780, 793, 780, 794, 795, 797, 799, 780, 787, 800, 800, 789, 800, 804, 800, 800, 800, 800, 0, 183, 812, 813, 812, 812, 0, 822, 823, 825, 827, 829, 827, 831, 0, 843, 844, 845, 846, 848, 850, 852, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 0, 911, 914, 917, 918, 922, 924, 925, 926, 927, 928, 930, 933, 934, 936, 938, 941, 942, 944, 945, 205, 942, 947, 942, 933, 949, 933, 933, 967, 970, 972, 973, 977, 980, 981, 982, 983, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 987, 991, 993, 967, 967, 933, 998, 999, 999, 999, 933, 933, 933, 1000, 1007, 1007, 1009, 1011, 1020, 1021, 1022, 1022, 1022, 1025, 1025, 1027, 1028, 1029, 1029, 1029, 1031, 1032, 1033, 1033, 1029, 1025, 1025, 1038, 1039, 1039, 1039, 1039, 1039, 1042, 1042, 1042, 1042, 1048, 1049, 1049, 1049, 1049, 1057, 1049, 1049, 1049, 1049, 1063, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1081, 1082, 1083, 1083, 205, 933, 933, 1087, 933, 928, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 205, 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, 911, 911, 911, 911, 911, 1140, 918, 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, 1165, 933, 0, 1173, 1174, 1175, 1177, 1179, 1181, 0, 1190, 1191, 1192, 1193, 1195, 1190, 1198, 0, 305, 1253, 1255, 1256, 1257, 1258, 1260, 1262, 1264, 1267, 1267, 305, 1269, 1271, 1272, 1273, 1269, 1275, 1277, 1277, 1280, 1280, 1283, 1294, 305, 1300, 1302, 1304, 1305, 1308, 1309, 1283, 1283, 1312, 1312, 1312, 1318, 1320, 1321, 1324, 1326, 1327, 1328, 1312, 1312, 1335, 1340, 1345, 1312, 1312, 1352, 1352, 1312, 1312, 1277, 1269, 1269, 1277, 1269, 1269, 1264, 305, 1370, 1371, 1371, 1371, 1371, 1371, 1371, 1377, 1264, 1380, 1381, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1421, 1422, 1382, 1382, 1426, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1480, 1258, 1481, 0, 1487, 1488, 1487, 1487, 1487, 0, 1494, 1494, 1494, 1494, 1498 ] class << self attr_accessor :lex_start end self.lex_start = 185; class << self attr_accessor :lex_error end self.lex_error = 0; class << self attr_accessor :lex_en_interp_words end self.lex_en_interp_words = 194; class << self attr_accessor :lex_en_interp_string end self.lex_en_interp_string = 251; class << self attr_accessor :lex_en_plain_words end self.lex_en_plain_words = 307; class << self attr_accessor :lex_en_plain_string end self.lex_en_plain_string = 310; class << self attr_accessor :lex_en_interp_backslash_delimited end self.lex_en_interp_backslash_delimited = 312; class << self attr_accessor :lex_en_plain_backslash_delimited end self.lex_en_plain_backslash_delimited = 317; class << self attr_accessor :lex_en_interp_backslash_delimited_words end self.lex_en_interp_backslash_delimited_words = 318; class << self attr_accessor :lex_en_plain_backslash_delimited_words end self.lex_en_plain_backslash_delimited_words = 324; class << self attr_accessor :lex_en_regexp_modifiers end self.lex_en_regexp_modifiers = 326; class << self attr_accessor :lex_en_expr_variable end self.lex_en_expr_variable = 328; class << self attr_accessor :lex_en_expr_fname end self.lex_en_expr_fname = 333; class << self attr_accessor :lex_en_expr_endfn end self.lex_en_expr_endfn = 446; class << self attr_accessor :lex_en_expr_dot end self.lex_en_expr_dot = 453; class << self attr_accessor :lex_en_expr_arg end self.lex_en_expr_arg = 474; class << self attr_accessor :lex_en_expr_cmdarg end self.lex_en_expr_cmdarg = 505; class << self attr_accessor :lex_en_expr_endarg end self.lex_en_expr_endarg = 511; class << self attr_accessor :lex_en_expr_mid end self.lex_en_expr_mid = 519; class << self attr_accessor :lex_en_expr_beg end self.lex_en_expr_beg = 543; class << self attr_accessor :lex_en_expr_labelarg end self.lex_en_expr_labelarg = 766; class << self attr_accessor :lex_en_expr_value end self.lex_en_expr_value = 773; class << self attr_accessor :lex_en_expr_end end self.lex_en_expr_end = 781; class << self attr_accessor :lex_en_leading_dot end self.lex_en_leading_dot = 961; class << self attr_accessor :lex_en_line_comment end self.lex_en_line_comment = 967; class << self attr_accessor :lex_en_line_begin end self.lex_en_line_begin = 185; # line 82 "lib/parser/lexer.rl" # % ESCAPES = { ?a.ord => "\a", ?b.ord => "\b", ?e.ord => "\e", ?f.ord => "\f", ?n.ord => "\n", ?r.ord => "\r", ?s.ord => "\s", ?t.ord => "\t", ?v.ord => "\v", ?\\.ord => "\\" }.freeze REGEXP_META_CHARACTERS = Regexp.union(*"\\$()*+.<>?[]^{|}".chars).freeze attr_reader :source_buffer attr_accessor :diagnostics attr_accessor :static_env attr_accessor :force_utf32 attr_accessor :cond, :cmdarg, :in_kwarg, :context, :command_start attr_accessor :tokens, :comments def initialize(version) @version = version @static_env = nil @context = nil @tokens = nil @comments = nil reset end def reset(reset_state=true) # Ragel state: if reset_state # Unit tests set state prior to resetting lexer. @cs = self.class.lex_en_line_begin @cond = StackState.new('cond') @cmdarg = StackState.new('cmdarg') @cond_stack = [] @cmdarg_stack = [] end @force_utf32 = false # Set to true by some tests @source_pts = nil # @source as a codepoint array @p = 0 # stream position (saved manually in #advance) @ts = nil # token start @te = nil # token end @act = 0 # next action @stack = [] # state stack @top = 0 # state stack top pointer # Lexer state: @token_queue = [] @literal_stack = [] @eq_begin_s = nil # location of last encountered =begin @sharp_s = nil # location of last encountered # @newline_s = nil # location of last encountered newline @num_base = nil # last numeric base @num_digits_s = nil # starting position of numeric digits @num_suffix_s = nil # starting position of numeric suffix @num_xfrm = nil # numeric suffix-induced transformation @escape_s = nil # starting position of current sequence @escape = nil # last escaped sequence, as string @herebody_s = nil # starting position of current heredoc line # Ruby 1.9 ->() lambdas emit a distinct token if do/{ is # encountered after a matching closing parenthesis. @paren_nest = 0 @lambda_stack = [] # After encountering the closing line of <<~SQUIGGLY_HEREDOC, # we store the indentation level and give it out to the parser # on request. It is not possible to infer indentation level just # from the AST because escape sequences such as `\ ` or `\t` are # expanded inside the lexer, but count as non-whitespace for # indentation purposes. @dedent_level = nil # If the lexer is in `command state' (aka expr_value) # at the entry to #advance, it will transition to expr_cmdarg # instead of expr_arg at certain points. @command_start = true # True at the end of "def foo a:" @in_kwarg = false # State before =begin / =end block comment @cs_before_block_comment = self.class.lex_en_line_begin end def source_buffer=(source_buffer) @source_buffer = source_buffer if @source_buffer source = @source_buffer.source if source.encoding == Encoding::UTF_8 @source_pts = source.unpack('U*') else @source_pts = source.unpack('C*') end if @source_pts[0] == 0xfeff # Skip byte order mark. @p = 1 end else @source_pts = nil end end def encoding @source_buffer.source.encoding end LEX_STATES = { :line_begin => lex_en_line_begin, :expr_dot => lex_en_expr_dot, :expr_fname => lex_en_expr_fname, :expr_value => lex_en_expr_value, :expr_beg => lex_en_expr_beg, :expr_mid => lex_en_expr_mid, :expr_arg => lex_en_expr_arg, :expr_cmdarg => lex_en_expr_cmdarg, :expr_end => lex_en_expr_end, :expr_endarg => lex_en_expr_endarg, :expr_endfn => lex_en_expr_endfn, :expr_labelarg => lex_en_expr_labelarg, :interp_string => lex_en_interp_string, :interp_words => lex_en_interp_words, :plain_string => lex_en_plain_string, :plain_words => lex_en_plain_string, } def state LEX_STATES.invert.fetch(@cs, @cs) end def state=(state) @cs = LEX_STATES.fetch(state) end def push_cmdarg @cmdarg_stack.push(@cmdarg) @cmdarg = StackState.new("cmdarg.#{@cmdarg_stack.count}") end def pop_cmdarg @cmdarg = @cmdarg_stack.pop end def push_cond @cond_stack.push(@cond) @cond = StackState.new("cond.#{@cond_stack.count}") end def pop_cond @cond = @cond_stack.pop end def dedent_level # We erase @dedent_level as a precaution to avoid accidentally # using a stale value. dedent_level, @dedent_level = @dedent_level, nil dedent_level end # Return next token: [type, value]. def advance if @token_queue.any? return @token_queue.shift end # Ugly, but dependent on Ragel output. Consider refactoring it somehow. klass = self.class _lex_trans_keys = klass.send :_lex_trans_keys _lex_key_spans = klass.send :_lex_key_spans _lex_index_offsets = klass.send :_lex_index_offsets _lex_indicies = klass.send :_lex_indicies _lex_trans_targs = klass.send :_lex_trans_targs _lex_trans_actions = klass.send :_lex_trans_actions _lex_to_state_actions = klass.send :_lex_to_state_actions _lex_from_state_actions = klass.send :_lex_from_state_actions _lex_eof_trans = klass.send :_lex_eof_trans pe = @source_pts.size + 2 p, eof = @p, pe cmd_state = @command_start @command_start = false # line 10970 "lib/parser/lexer.rb" begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if @cs == 0 _goto_level = _out next end end if _goto_level <= _resume case _lex_from_state_actions[ @cs] when 97 then # line 1 "NONE" begin @ts = p end # line 10998 "lib/parser/lexer.rb" end _keys = @cs << 1 _inds = _lex_index_offsets[ @cs] _slen = _lex_key_spans[ @cs] _wide = ( (@source_pts[p] || 0)) _trans = if ( _slen > 0 && _lex_trans_keys[_keys] <= _wide && _wide <= _lex_trans_keys[_keys + 1] ) then _lex_indicies[ _inds + _wide - _lex_trans_keys[_keys] ] else _lex_indicies[ _inds + _slen ] end end if _goto_level <= _eof_trans @cs = _lex_trans_targs[_trans] if _lex_trans_actions[_trans] != 0 case _lex_trans_actions[_trans] when 28 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 117 then # line 808 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end when 29 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end when 59 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end when 63 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 304 then # line 1252 "lib/parser/lexer.rl" begin tm = p end when 36 then # line 1533 "lib/parser/lexer.rl" begin tm = p end when 38 then # line 1549 "lib/parser/lexer.rl" begin tm = p end when 40 then # line 1577 "lib/parser/lexer.rl" begin tm = p end when 70 then # line 1769 "lib/parser/lexer.rl" begin heredoc_e = p end when 343 then # line 1861 "lib/parser/lexer.rl" begin tm = p - 1; diag_msg = :ivar_name end when 346 then # line 1862 "lib/parser/lexer.rl" begin tm = p - 2; diag_msg = :cvar_name end when 354 then # line 1882 "lib/parser/lexer.rl" begin @escape = nil end when 383 then # line 1971 "lib/parser/lexer.rl" begin tm = p end when 302 then # line 2052 "lib/parser/lexer.rl" begin ident_tok = tok; ident_ts = @ts; ident_te = @te; end when 470 then # line 2238 "lib/parser/lexer.rl" begin @num_base = 16; @num_digits_s = p end when 464 then # line 2239 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = p end when 467 then # line 2240 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = p end when 461 then # line 2241 "lib/parser/lexer.rl" begin @num_base = 2; @num_digits_s = p end when 476 then # line 2242 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end when 438 then # line 2243 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end when 453 then # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 446 then # line 2301 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 443 then # line 2302 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 88 then # line 2490 "lib/parser/lexer.rl" begin tm = p end when 7 then # line 1 "NONE" begin @te = p+1 end when 113 then # line 1085 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end end when 5 then # line 1011 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 109 then # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 115 then # line 1027 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end end end when 114 then # line 1011 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 111 then # line 998 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 112 then # line 857 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 6 then # line 881 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 4 then # line 857 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 142 then # line 1085 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end end when 10 then # line 1011 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 139 then # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 144 then # line 1027 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end end end when 143 then # line 1011 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 141 then # line 857 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 11 then # line 881 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 9 then # line 857 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 167 then # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 169 then # line 998 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 170 then # line 857 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 173 then # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 175 then # line 857 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 182 then # line 1085 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end end when 13 then # line 1011 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 179 then # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 184 then # line 1027 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end end end when 183 then # line 1011 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 181 then # line 857 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 12 then # line 857 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 186 then # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 193 then # line 1085 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end end when 15 then # line 1011 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 189 then # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 195 then # line 1027 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end end end when 194 then # line 1011 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DVAR, nil, @ts, @ts + 1) p = @ts begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 191 then # line 998 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 192 then # line 857 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 14 then # line 857 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin string = tok # tLABEL_END is only possible in non-cond context on >= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 197 then # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal @cs = 766; else @cs = (pop_literal); end begin p += 1 _goto_level = _out next end else current_literal.extend_string(string, @ts, @te) end end end when 199 then # line 998 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin literal.extend_space @ts, @te end end when 200 then # line 1182 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tREGEXP_OPT, tok(@ts, @te - 1), @ts, @te - 1) p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 201 then # line 1169 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin unknown_options = tok.scan(/[^imxouesn]/) if unknown_options.any? diagnostic :error, :regexp_options, { :options => unknown_options.join } end emit(:tREGEXP_OPT) @cs = 781; begin p += 1 _goto_level = _out next end end end when 16 then # line 1321 "lib/parser/lexer.rl" begin @te = p+1 begin if tok =~ /^\$([1-9][0-9]*)$/ emit(:tNTH_REF, tok(@ts + 1).to_i) elsif tok =~ /^\$([&`'+])$/ emit(:tBACK_REF) else emit(:tGVAR) end @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end when 202 then # line 1321 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tok =~ /^\$([1-9][0-9]*)$/ emit(:tNTH_REF, tok(@ts + 1).to_i) elsif tok =~ /^\$([&`'+])$/ emit(:tBACK_REF) else emit(:tGVAR) end @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end when 204 then # line 1334 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tok =~ /^@@[0-9]/ diagnostic :error, :cvar_name, { :name => tok } end emit(:tCVAR) @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end when 203 then # line 1344 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tok =~ /^@[0-9]/ diagnostic :error, :ivar_name, { :name => tok } end emit(:tIVAR) @cs = (stack_pop); begin p += 1 _goto_level = _out next end end end when 225 then # line 1365 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(KEYWORDS_BEGIN); @cs = 446; begin p += 1 _goto_level = _out next end end end when 211 then # line 1373 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tIDENTIFIER) @cs = 446; begin p += 1 _goto_level = _out next end end end when 18 then # line 1377 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 @cs = 781; begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 208 then # line 1386 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 446; begin p += 1 _goto_level = _out next end end end when 220 then # line 1390 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 20 then # line 1396 "lib/parser/lexer.rl" begin @te = p+1 begin if version?(23) type, delimiter = tok[0..-2], tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end else p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end end when 207 then # line 1409 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 206 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 224 then # line 1365 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS_BEGIN); @cs = 446; begin p += 1 _goto_level = _out next end end end when 221 then # line 1369 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = 446; begin p += 1 _goto_level = _out next end end end when 223 then # line 1373 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) @cs = 446; begin p += 1 _goto_level = _out next end end end when 218 then # line 1377 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 @cs = 781; begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 214 then # line 1386 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 446; begin p += 1 _goto_level = _out next end end end when 219 then # line 1393 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 212 then # line 1406 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 217 then # line 1409 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 19 then # line 1386 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin emit_table(PUNCTUATION) @cs = 446; begin p += 1 _goto_level = _out next end end end when 17 then # line 1409 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 210 then # line 1 "NONE" begin case @act when 43 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN); @cs = 446; begin p += 1 _goto_level = _out next end end when 44 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = 446; begin p += 1 _goto_level = _out next end end when 45 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) @cs = 446; begin p += 1 _goto_level = _out next end end end end when 22 then # line 1421 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) p = p - 1; @cs = 766; begin p += 1 _goto_level = _out next end end end when 227 then # line 1427 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 226 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 229 then # line 1424 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 228 then # line 1427 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 21 then # line 1427 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 235 then # line 1453 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 474; begin p += 1 _goto_level = _out next end end end when 234 then # line 1459 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 233 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 245 then # line 1438 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 236 then # line 1442 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 241 then # line 1453 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 474; begin p += 1 _goto_level = _out next end end end when 239 then # line 1456 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 244 then # line 1459 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 268 then # line 1519 "lib/parser/lexer.rl" begin @te = p+1 begin # Unlike expr_beg as invoked in the next rule, do not warn p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 251 then # line 1537 "lib/parser/lexer.rl" begin @te = p+1 begin if tok(tm, tm + 1) == '/'.freeze # Ambiguous regexp literal. diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) end p = tm - 1 begin @cs = 543 _goto_level = _again next end end end when 257 then # line 1561 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 24 then # line 1569 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @cs = 543 _goto_level = _again next end end end when 259 then # line 1578 "lib/parser/lexer.rl" begin @te = p+1 begin p = tm - 1; begin @cs = 781 _goto_level = _again next end end end when 39 then # line 1589 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 246 then # line 1603 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 247 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 258 then # line 1528 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 254 then # line 1550 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, range(tm, @te) p = tm - 1 begin @cs = 543 _goto_level = _again next end end end when 256 then # line 1566 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 250 then # line 1589 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 249 then # line 1594 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 267 then # line 1603 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 25 then # line 1594 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end end when 41 then # line 1603 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 23 then # line 1 "NONE" begin case @act when 71 then begin begin p = (( @te))-1; end if tok(tm, tm + 1) == '/'.freeze # Ambiguous regexp literal. diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) end p = tm - 1 begin @cs = 543 _goto_level = _again next end end when 72 then begin begin p = (( @te))-1; end diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, range(tm, @te) p = tm - 1 begin @cs = 543 _goto_level = _again next end end when 77 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 781 _goto_level = _again next end end else begin begin p = (( @te))-1; end end end end when 43 then # line 1639 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 474 _goto_level = _again next end end end when 272 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 273 then # line 1639 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 474 _goto_level = _again next end end end when 44 then # line 1639 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = @ts - 1 begin @cs = 474 _goto_level = _again next end end end when 42 then # line 1 "NONE" begin case @act when 84 then begin begin p = (( @te))-1; end if @cond.active? emit(:kDO_COND, 'do'.freeze, @te - 2, @te) else emit(:kDO, 'do'.freeze, @te - 2, @te) end @cs = 773; begin p += 1 _goto_level = _out next end end when 85 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 474 _goto_level = _again next end end end end when 283 then # line 1675 "lib/parser/lexer.rl" begin @te = p+1 begin emit_do(true) @cs = 773; begin p += 1 _goto_level = _out next end end end when 276 then # line 1681 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 277 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 278 then # line 1678 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 281 then # line 1681 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 287 then # line 1705 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 286 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 295 then # line 1697 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @cs = 543 _goto_level = _again next end end end when 289 then # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 293 then # line 1705 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 288 then # line 1 "NONE" begin case @act when 92 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 543; begin p += 1 _goto_level = _out next end end when 93 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 543 _goto_level = _again next end end end end when 56 then # line 1720 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 781; begin p += 1 _goto_level = _out next end end end when 328 then # line 1737 "lib/parser/lexer.rl" begin @te = p+1 begin type = delimiter = tok[0].chr p = p - 1; begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 320 then # line 1744 "lib/parser/lexer.rl" begin @te = p+1 begin type, delimiter = @source_buffer.slice(@ts).chr, tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 54 then # line 1751 "lib/parser/lexer.rl" begin @te = p+1 begin type, delimiter = tok[0..-2], tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 341 then # line 1826 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; p = p - 1; emit(:tSYMBEG, tok(@ts, @ts + 1), @ts, @ts + 1) begin @cs = 333 _goto_level = _again next end end end when 329 then # line 1834 "lib/parser/lexer.rl" begin @te = p+1 begin type, delimiter = tok, tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 340 then # line 1842 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tSYMBOL, tok(@ts + 1, @ts + 2)) @cs = 781; begin p += 1 _goto_level = _out next end end end when 68 then # line 1856 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tSYMBOL, tok(@ts + 1), @ts) @cs = 781; begin p += 1 _goto_level = _out next end end end when 351 then # line 1897 "lib/parser/lexer.rl" begin @te = p+1 begin escape = { " " => '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', "\v" => '\v', "\f" => '\f' }[@source_buffer.slice(@ts + 1)] diagnostic :warning, :invalid_escape_use, { :escape => escape }, range p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 350 then # line 1907 "lib/parser/lexer.rl" begin @te = p+1 begin diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) end end when 330 then # line 1966 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end end when 51 then # line 1987 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; if version?(18) ident = tok(@ts, @te - 2) emit((@source_buffer.slice(@ts) =~ /[A-Z]/) ? :tCONSTANT : :tIDENTIFIER, ident, @ts, @te - 2) p = p - 1; # continue as a symbol if !@static_env.nil? && @static_env.declared?(ident) @cs = 781; else @cs = (arg_or_cmdarg(cmd_state)); end else emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) @cs = 766; end begin p += 1 _goto_level = _out next end end end when 327 then # line 2025 "lib/parser/lexer.rl" begin @te = p+1 begin if @version >= 27 emit(:tBDOT3) else emit(:tDOT3) end @cs = 543; begin p += 1 _goto_level = _out next end end end when 48 then # line 2054 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tIDENTIFIER, ident_tok, ident_ts, ident_te) p = ident_te - 1 if !@static_env.nil? && @static_env.declared?(ident_tok) && @version < 25 @cs = 446; else @cs = 505; end begin p += 1 _goto_level = _out next end end end when 314 then # line 2073 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 @cs_before_block_comment = @cs begin @cs = 185 _goto_level = _again next end end end when 55 then # line 2089 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @cs = 781 _goto_level = _again next end end end when 298 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 325 then # line 1720 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 781; begin p += 1 _goto_level = _out next end end end when 324 then # line 1727 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSTAR, '*'.freeze) begin p += 1 _goto_level = _out next end end end when 321 then # line 1751 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin type, delimiter = tok[0..-2], tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts)) _goto_level = _again next end end end when 319 then # line 1757 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) end end when 348 then # line 1817 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end end when 331 then # line 1856 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1), @ts) @cs = 781; begin p += 1 _goto_level = _out next end end end when 344 then # line 1864 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) else emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) p = @ts end @cs = 781; begin p += 1 _goto_level = _out next end end end when 349 then # line 1907 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) end end when 355 then # line 1913 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 322 then # line 1966 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end end when 326 then # line 2014 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 emit(:tBDOT2) else emit(:tDOT2) end @cs = 543; begin p += 1 _goto_level = _out next end end end when 301 then # line 1306 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 446; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end end when 311 then # line 2070 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 313 then # line 2073 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 @cs_before_block_comment = @cs begin @cs = 185 _goto_level = _again next end end end when 316 then # line 2089 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @cs = 781 _goto_level = _again next end end end when 53 then # line 1757 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) end end when 72 then # line 1817 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end end when 73 then # line 1884 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 47 then # line 1306 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 446; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end end when 52 then # line 2070 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end end when 67 then # line 2089 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = @ts - 1; begin @cs = 781 _goto_level = _again next end end end when 50 then # line 1 "NONE" begin case @act when 98 then begin begin p = (( @te))-1; end emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 781; begin p += 1 _goto_level = _out next end end when 105 then begin begin p = (( @te))-1; end diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end when 116 then begin begin p = (( @te))-1; end if @version >= 27 emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 543; begin p += 1 _goto_level = _out next end else p -= 2 begin @cs = 781 _goto_level = _again next end end end when 120 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end when 121 then begin begin p = (( @te))-1; end emit(:kRESCUE, 'rescue'.freeze, @ts, tm) p = tm - 1 @cs = 519; begin p += 1 _goto_level = _out next end end when 122 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN) @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end when 126 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 781 _goto_level = _again next end end when 127 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 446; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 131 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 781 _goto_level = _again next end end end end when 386 then # line 2109 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 387 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 388 then # line 2097 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 392 then # line 2109 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 76 then # line 2119 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 396 then # line 2124 "lib/parser/lexer.rl" begin @te = p+1 begin begin @cs = (push_literal(tok, tok, @ts)) _goto_level = _again next end end end when 395 then # line 2134 "lib/parser/lexer.rl" begin @te = p+1 begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 394 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 398 then # line 2128 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 397 then # line 2134 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 75 then # line 2134 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin p = p - 1; begin @cs = 543 _goto_level = _again next end end end when 431 then # line 2145 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tLAMBDA, '->'.freeze, @ts, @ts + 2) @lambda_stack.push @paren_nest @cs = 446; begin p += 1 _goto_level = _out next end end end when 85 then # line 2186 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) @cs = 773; begin p += 1 _goto_level = _out next end end end when 406 then # line 2322 "lib/parser/lexer.rl" begin @te = p+1 begin type, delimiter = tok, tok[-1].chr begin @cs = (push_literal(type, delimiter, @ts, nil, false, false, true)) _goto_level = _again next end end end when 78 then # line 2340 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1; begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 427 then # line 2347 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 453; begin p += 1 _goto_level = _out next end end end when 480 then # line 2371 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) begin @cs = 773 _goto_level = _again next end end end when 420 then # line 2380 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION); @cs = 773; begin p += 1 _goto_level = _out next end end end when 425 then # line 2415 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tOP_ASGN, tok(@ts, @te - 1)) @cs = 543; begin p += 1 _goto_level = _out next end end end when 411 then # line 2419 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tEH, '?'.freeze) @cs = 773; begin p += 1 _goto_level = _out next end end end when 408 then # line 2438 "lib/parser/lexer.rl" begin @te = p+1 begin emit_table(PUNCTUATION) @cs = 543; begin p += 1 _goto_level = _out next end end end when 410 then # line 2451 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tSEMI, ';'.freeze) @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end end when 485 then # line 2455 "lib/parser/lexer.rl" begin @te = p+1 begin diagnostic :error, :bare_backslash, nil, range(@ts, @ts + 1) p = p - 1; end end when 405 then # line 2461 "lib/parser/lexer.rl" begin @te = p+1 begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 404 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 496 then # line 2182 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS) @cs = 333; begin p += 1 _goto_level = _out next end end end when 494 then # line 2186 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) @cs = 773; begin p += 1 _goto_level = _out next end end end when 493 then # line 2197 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(KEYWORDS) @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end end when 435 then # line 2272 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :error, :no_dot_digit_literal end end when 482 then # line 2332 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 424 then # line 2340 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1; begin @stack[ @top] = @cs @top+= 1 @cs = 328 _goto_level = _again next end end end when 432 then # line 2347 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 453; begin p += 1 _goto_level = _out next end end end when 488 then # line 1306 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 446; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end end when 430 then # line 2371 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) begin @cs = 773 _goto_level = _again next end end end when 426 then # line 2380 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION); @cs = 773; begin p += 1 _goto_level = _out next end end end when 419 then # line 2386 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 543; begin p += 1 _goto_level = _out next end end end when 433 then # line 2438 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 543; begin p += 1 _goto_level = _out next end end end when 417 then # line 2445 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 423 then # line 2461 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 83 then # line 2245 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 79 then # line 2272 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :error, :no_dot_digit_literal end end when 82 then # line 2304 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 77 then # line 2461 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } end end when 80 then # line 1 "NONE" begin case @act when 144 then begin begin p = (( @te))-1; end if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{'.freeze emit(:tLAMBEG, '{'.freeze) else # 'do' emit(:kDO_LAMBDA, 'do'.freeze) end else if tok == '{'.freeze emit(:tLCURLY, '{'.freeze) else # 'do' emit_do end end if tok == '{'.freeze @paren_nest += 1 end @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end when 145 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 333; begin p += 1 _goto_level = _out next end end when 146 then begin begin p = (( @te))-1; end emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) @cs = 773; begin p += 1 _goto_level = _out next end end when 147 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 543; begin p += 1 _goto_level = _out next end end when 148 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end when 149 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 519; begin p += 1 _goto_level = _out next end end when 150 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) if version?(18) && tok == 'not'.freeze @cs = 543; begin p += 1 _goto_level = _out next end else @cs = 474; begin p += 1 _goto_level = _out next end end end when 151 then begin begin p = (( @te))-1; end if version?(18) emit(:tIDENTIFIER) unless !@static_env.nil? && @static_env.declared?(tok) @cs = (arg_or_cmdarg(cmd_state)); end else emit(:k__ENCODING__, '__ENCODING__'.freeze) end begin p += 1 _goto_level = _out next end end when 152 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) begin p += 1 _goto_level = _out next end end when 153 then begin begin p = (( @te))-1; end digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end when 155 then begin begin p = (( @te))-1; end if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tINTEGER, tok(@ts, @te - 1).to_i, @ts, @te - 1) p = p - 1; begin p += 1 _goto_level = _out next end end end when 156 then begin begin p = (( @te))-1; end if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tFLOAT, tok(@ts, @te - 1).to_f, @ts, @te - 1) p = p - 1; begin p += 1 _goto_level = _out next end end end when 157 then begin begin p = (( @te))-1; end digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end when 159 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end when 163 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 446; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 164 then begin begin p = (( @te))-1; end if tm == @te # Suffix was consumed, e.g. foo! emit(:tFID) else # Suffix was not consumed, e.g. foo!= emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) p = tm - 1 end @cs = 474; begin p += 1 _goto_level = _out next end end when 166 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION); @cs = 773; begin p += 1 _goto_level = _out next end end when 167 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION) @cs = 543; begin p += 1 _goto_level = _out next end end end end when 95 then # line 2491 "lib/parser/lexer.rl" begin @te = p+1 begin p = tm - 1; begin @cs = 781 _goto_level = _again next end end end when 501 then # line 2494 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 185; begin p += 1 _goto_level = _out next end end end when 504 then # line 2477 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version < 27 # Ruby before 2.7 doesn't support comments before leading dot. # If a line after "a" starts with a comment then "a" is a self-contained statement. # So in that case we emit a special tNL token and start reading the # next line as a separate statement. # # Note: block comments before leading dot are not supported on any version of Ruby. emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 185; begin p += 1 _goto_level = _out next end end end end when 503 then # line 2494 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 185; begin p += 1 _goto_level = _out next end end end when 90 then # line 2477 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin if @version < 27 # Ruby before 2.7 doesn't support comments before leading dot. # If a line after "a" starts with a comment then "a" is a self-contained statement. # So in that case we emit a special tNL token and start reading the # next line as a separate statement. # # Note: block comments before leading dot are not supported on any version of Ruby. emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 185; begin p += 1 _goto_level = _out next end end end end when 86 then # line 2494 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 185; begin p += 1 _goto_level = _out next end end end when 92 then # line 1 "NONE" begin case @act when 180 then begin begin p = (( @te))-1; end if @version < 27 # Ruby before 2.7 doesn't support comments before leading dot. # If a line after "a" starts with a comment then "a" is a self-contained statement. # So in that case we emit a special tNL token and start reading the # next line as a separate statement. # # Note: block comments before leading dot are not supported on any version of Ruby. emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 185; begin p += 1 _goto_level = _out next end end end when 182 then begin begin p = (( @te))-1; end emit(:tNL, nil, @newline_s, @newline_s + 1) p = p - 1; @cs = 185; begin p += 1 _goto_level = _out next end end end end when 507 then # line 2504 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_comment(@eq_begin_s, @te) begin @cs = (@cs_before_block_comment) _goto_level = _again next end end end when 506 then # line 2512 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin diagnostic :fatal, :embedded_document, nil, range(@eq_begin_s, @eq_begin_s + '=begin'.length) end end when 106 then # line 2522 "lib/parser/lexer.rl" begin @te = p+1 begin @eq_begin_s = @ts begin @cs = 967 _goto_level = _again next end end end when 2 then # line 2526 "lib/parser/lexer.rl" begin @te = p+1 begin p = pe - 3 end end when 98 then # line 2529 "lib/parser/lexer.rl" begin @te = p+1 begin cmd_state = true; p = p - 1; begin @cs = 773 _goto_level = _again next end end end when 99 then # line 518 "lib/parser/lexer.rl" begin @te = p+1 begin # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. p = p - 1; begin p += 1 _goto_level = _out next end end end when 100 then # line 2519 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 105 then # line 2522 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin @eq_begin_s = @ts begin @cs = 967 _goto_level = _again next end end end when 104 then # line 2529 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin cmd_state = true; p = p - 1; begin @cs = 773 _goto_level = _again next end end end when 1 then # line 2529 "lib/parser/lexer.rl" begin begin p = (( @te))-1; end begin cmd_state = true; p = p - 1; begin @cs = 773 _goto_level = _again next end end end when 66 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 110 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (< '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', "\v" => '\v', "\f" => '\f' }[@source_buffer.slice(@ts + 1)] diagnostic :warning, :invalid_escape_use, { :escape => escape }, range p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 315 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2073 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 @cs_before_block_comment = @cs begin @cs = 185 _goto_level = _again next end end end when 434 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2427 "lib/parser/lexer.rl" begin @te = p+1 begin if @paren_nest == 0 diagnostic :warning, :triple_dot_at_eol, nil, range(@ts, @te - 1) end emit(:tDOT3, '...'.freeze, @ts, @te - 1) p = p - 1; @cs = 543; begin p += 1 _goto_level = _out next end end end when 508 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2504 "lib/parser/lexer.rl" begin @te = p+1 begin emit_comment(@eq_begin_s, @te) begin @cs = (@cs_before_block_comment) _goto_level = _again next end end end when 505 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2509 "lib/parser/lexer.rl" begin @te = p+1 end when 107 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2522 "lib/parser/lexer.rl" begin @te = p+1 begin @eq_begin_s = @ts begin @cs = 967 _goto_level = _again next end end end when 3 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 2526 "lib/parser/lexer.rl" begin @te = p+1 begin p = pe - 3 end end when 456 then # line 626 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 454 then # line 627 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, chars)) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 459 then # line 628 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 457 then # line 629 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 2); p -= 2 } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 455 then # line 630 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 2); p -= 2 } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 458 then # line 631 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 6); p -= 6 } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 447 then # line 635 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Float(chars))) } end # line 2304 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 448 then # line 636 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars), @ts, @te - 2); p -= 2 } end # line 2304 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 449 then # line 640 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } end # line 2304 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 451 then # line 641 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } end # line 2304 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 450 then # line 642 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars), @ts, @te - 6); p -= 6 } end # line 2304 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 134 then # line 657 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 if @version < 24 if codepoints.start_with?(" ") || codepoints.start_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s + 2, @escape_s + 3) end if spaces_p = codepoints.index(/[ \t]{2}/) diagnostic :fatal, :invalid_unicode_escape, nil, range(codepoint_s + spaces_p + 1, codepoint_s + spaces_p + 2) end if codepoints.end_with?(" ") || codepoints.end_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(p - 1, p) end end codepoints.scan(/([0-9a-fA-F]+)|([ \t]+)/).each do |(codepoint_str, spaces)| if spaces codepoint_s += spaces.length else codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length end end end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 162 then # line 657 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 if @version < 24 if codepoints.start_with?(" ") || codepoints.start_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s + 2, @escape_s + 3) end if spaces_p = codepoints.index(/[ \t]{2}/) diagnostic :fatal, :invalid_unicode_escape, nil, range(codepoint_s + spaces_p + 1, codepoint_s + spaces_p + 2) end if codepoints.end_with?(" ") || codepoints.end_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(p - 1, p) end end codepoints.scan(/([0-9a-fA-F]+)|([ \t]+)/).each do |(codepoint_str, spaces)| if spaces codepoint_s += spaces.length else codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length end end end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 373 then # line 657 "lib/parser/lexer.rl" begin @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 if @version < 24 if codepoints.start_with?(" ") || codepoints.start_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s + 2, @escape_s + 3) end if spaces_p = codepoints.index(/[ \t]{2}/) diagnostic :fatal, :invalid_unicode_escape, nil, range(codepoint_s + spaces_p + 1, codepoint_s + spaces_p + 2) end if codepoints.end_with?(" ") || codepoints.end_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(p - 1, p) end end codepoints.scan(/([0-9a-fA-F]+)|([ \t]+)/).each do |(codepoint_str, spaces)| if spaces codepoint_s += spaces.length else codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length end end end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 118 then # line 697 "lib/parser/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 146 then # line 697 "lib/parser/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 357 then # line 697 "lib/parser/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 121 then # line 704 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_escape end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 149 then # line 704 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_escape end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 360 then # line 704 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_escape end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 123 then # line 731 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 151 then # line 731 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 362 then # line 731 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 120 then # line 738 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 148 then # line 738 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 359 then # line 738 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 137 then # line 742 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 165 then # line 742 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 376 then # line 742 "lib/parser/lexer.rl" begin @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 136 then # line 746 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 164 then # line 746 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 375 then # line 746 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 131 then # line 752 "lib/parser/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 159 then # line 752 "lib/parser/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 370 then # line 752 "lib/parser/lexer.rl" begin @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 130 then # line 756 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 158 then # line 756 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 369 then # line 756 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 135 then # line 762 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 163 then # line 762 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 374 then # line 762 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 132 then # line 776 "lib/parser/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 160 then # line 776 "lib/parser/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 371 then # line 776 "lib/parser/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 119 then # line 802 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 147 then # line 802 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 358 then # line 802 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 171 then # line 808 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 881 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 176 then # line 808 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 881 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 57 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 30 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1533 "lib/parser/lexer.rl" begin tm = p end when 32 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1549 "lib/parser/lexer.rl" begin tm = p end when 34 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1577 "lib/parser/lexer.rl" begin tm = p end when 213 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1406 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 232 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1424 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 240 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1456 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 33 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1589 "lib/parser/lexer.rl" begin @te = p+1 begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 271 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1594 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 263 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1600 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 282 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1678 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 294 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 290 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1702 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = p - 1; begin @cs = 781 _goto_level = _again next end end end when 58 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1720 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 781; begin p += 1 _goto_level = _out next end end end when 49 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2054 "lib/parser/lexer.rl" begin @te = p+1 begin emit(:tIDENTIFIER, ident_tok, ident_ts, ident_te) p = ident_te - 1 if !@static_env.nil? && @static_env.declared?(ident_tok) && @version < 25 @cs = 446; else @cs = 505; end begin p += 1 _goto_level = _out next end end end when 312 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2070 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 393 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2097 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 389 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2100 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @in_kwarg p = p - 1; begin @cs = 781 _goto_level = _again next end else begin @cs = 185 _goto_level = _again next end end end end when 402 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2128 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 399 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2131 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 185 _goto_level = _again next end end end when 486 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2445 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 418 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2448 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 961 _goto_level = _again next end end end when 101 then # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2519 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 262 then # line 1050 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end end # line 1500 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop emit(:tLAMBEG, '{'.freeze, @te - 1, @te) else emit(:tLCURLY, '{'.freeze, @te - 1, @te) end @command_start = true @paren_nest += 1 @cs = 773; begin p += 1 _goto_level = _out next end end end when 284 then # line 1050 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end end # line 1662 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop emit(:tLAMBEG, '{'.freeze) else emit(:tLBRACE_ARG, '{'.freeze) end @paren_nest += 1 @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end end when 384 then # line 1050 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end end # line 1942 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop @command_start = true emit(:tLAMBEG, '{'.freeze) else emit(:tLBRACE, '{'.freeze) end @paren_nest += 1 begin p += 1 _goto_level = _out next end end end when 499 then # line 1050 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end end # line 2153 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{'.freeze emit(:tLAMBEG, '{'.freeze) else # 'do' emit(:kDO_LAMBDA, 'do'.freeze) end else if tok == '{'.freeze emit(:tLCURLY, '{'.freeze) else # 'do' emit_do end end if tok == '{'.freeze @paren_nest += 1 end @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end end when 500 then # line 1059 "lib/parser/lexer.rl" begin current_literal = literal if current_literal if current_literal.end_interp_brace_and_try_closing if version?(18, 19) emit(:tRCURLY, '}'.freeze, p - 1, p) @cond.lexpop @cmdarg.lexpop else emit(:tSTRING_DEND, '}'.freeze, p - 1, p) end if current_literal.saved_herebody_s @herebody_s = current_literal.saved_herebody_s end p = p - 1; @cs = (next_state_for_literal(current_literal)); begin p += 1 _goto_level = _out next end end end @paren_nest -= 1 end # line 2390 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) if @version < 24 @cond.lexpop @cmdarg.lexpop else @cond.pop @cmdarg.pop end if tok == '}'.freeze || tok == ']'.freeze if @version >= 25 @cs = 781; else @cs = 511; end else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 60 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end when 64 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 216 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1406 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 231 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1424 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 243 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1456 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 265 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1597 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 781 _goto_level = _again next end end end when 280 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1678 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 292 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 318 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2070 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 391 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2097 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 401 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2128 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 422 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2445 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 103 then # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2519 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 237 then # line 1252 "lib/parser/lexer.rl" begin tm = p end # line 1446 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) @cs = (arg_or_cmdarg(cmd_state)); p = tm - 1; begin p += 1 _goto_level = _out next end end end when 332 then # line 1252 "lib/parser/lexer.rl" begin tm = p end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 781; begin p += 1 _goto_level = _out next end end end when 303 then # line 1252 "lib/parser/lexer.rl" begin tm = p end # line 2043 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 415 then # line 1252 "lib/parser/lexer.rl" begin tm = p end # line 1 "NONE" begin case @act when 144 then begin begin p = (( @te))-1; end if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{'.freeze emit(:tLAMBEG, '{'.freeze) else # 'do' emit(:kDO_LAMBDA, 'do'.freeze) end else if tok == '{'.freeze emit(:tLCURLY, '{'.freeze) else # 'do' emit_do end end if tok == '{'.freeze @paren_nest += 1 end @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end when 145 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 333; begin p += 1 _goto_level = _out next end end when 146 then begin begin p = (( @te))-1; end emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) @cs = 773; begin p += 1 _goto_level = _out next end end when 147 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 543; begin p += 1 _goto_level = _out next end end when 148 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end when 149 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) @cs = 519; begin p += 1 _goto_level = _out next end end when 150 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) if version?(18) && tok == 'not'.freeze @cs = 543; begin p += 1 _goto_level = _out next end else @cs = 474; begin p += 1 _goto_level = _out next end end end when 151 then begin begin p = (( @te))-1; end if version?(18) emit(:tIDENTIFIER) unless !@static_env.nil? && @static_env.declared?(tok) @cs = (arg_or_cmdarg(cmd_state)); end else emit(:k__ENCODING__, '__ENCODING__'.freeze) end begin p += 1 _goto_level = _out next end end when 152 then begin begin p = (( @te))-1; end emit_table(KEYWORDS) begin p += 1 _goto_level = _out next end end when 153 then begin begin p = (( @te))-1; end digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end when 155 then begin begin p = (( @te))-1; end if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tINTEGER, tok(@ts, @te - 1).to_i, @ts, @te - 1) p = p - 1; begin p += 1 _goto_level = _out next end end end when 156 then begin begin p = (( @te))-1; end if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tFLOAT, tok(@ts, @te - 1).to_f, @ts, @te - 1) p = p - 1; begin p += 1 _goto_level = _out next end end end when 157 then begin begin p = (( @te))-1; end digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end when 159 then begin begin p = (( @te))-1; end emit(:tCONSTANT) @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end when 163 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 446; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 164 then begin begin p = (( @te))-1; end if tm == @te # Suffix was consumed, e.g. foo! emit(:tFID) else # Suffix was not consumed, e.g. foo!= emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) p = tm - 1 end @cs = 474; begin p += 1 _goto_level = _out next end end when 166 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION); @cs = 773; begin p += 1 _goto_level = _out next end end when 167 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION) @cs = 543; begin p += 1 _goto_level = _out next end end end end when 238 then # line 1253 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1446 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) @cs = (arg_or_cmdarg(cmd_state)); p = tm - 1; begin p += 1 _goto_level = _out next end end end when 333 then # line 1253 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 781; begin p += 1 _goto_level = _out next end end end when 305 then # line 1253 "lib/parser/lexer.rl" begin tm = p - 2 end # line 2043 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 416 then # line 1253 "lib/parser/lexer.rl" begin tm = p - 2 end # line 2354 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if tm == @te # Suffix was consumed, e.g. foo! emit(:tFID) else # Suffix was not consumed, e.g. foo!= emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) p = tm - 1 end @cs = 474; begin p += 1 _goto_level = _out next end end end when 334 then # line 1258 "lib/parser/lexer.rl" begin tm = p end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 781; begin p += 1 _goto_level = _out next end end end when 306 then # line 1258 "lib/parser/lexer.rl" begin tm = p end # line 2043 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 335 then # line 1259 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 781; begin p += 1 _goto_level = _out next end end end when 307 then # line 1259 "lib/parser/lexer.rl" begin tm = p - 2 end # line 2043 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 339 then # line 1260 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 781; begin p += 1 _goto_level = _out next end end end when 310 then # line 1260 "lib/parser/lexer.rl" begin tm = p - 2 end # line 2043 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 338 then # line 1261 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 781; begin p += 1 _goto_level = _out next end end end when 309 then # line 1261 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1 "NONE" begin case @act when 98 then begin begin p = (( @te))-1; end emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 781; begin p += 1 _goto_level = _out next end end when 105 then begin begin p = (( @te))-1; end diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end when 116 then begin begin p = (( @te))-1; end if @version >= 27 emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1) p = p - 1; @cs = 543; begin p += 1 _goto_level = _out next end else p -= 2 begin @cs = 781 _goto_level = _again next end end end when 120 then begin begin p = (( @te))-1; end emit_table(PUNCTUATION_BEGIN) begin p += 1 _goto_level = _out next end end when 121 then begin begin p = (( @te))-1; end emit(:kRESCUE, 'rescue'.freeze, @ts, tm) p = tm - 1 @cs = 519; begin p += 1 _goto_level = _out next end end when 122 then begin begin p = (( @te))-1; end emit_table(KEYWORDS_BEGIN) @command_start = true @cs = 773; begin p += 1 _goto_level = _out next end end when 126 then begin begin p = (( @te))-1; end p = @ts - 1 begin @cs = 781 _goto_level = _again next end end when 127 then begin begin p = (( @te))-1; end emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) @cs = 446; begin p += 1 _goto_level = _out next end else @cs = (arg_or_cmdarg(cmd_state)); begin p += 1 _goto_level = _out next end end end when 131 then begin begin p = (( @te))-1; end p = @ts - 1; begin @cs = 781 _goto_level = _again next end end end end when 336 then # line 1262 "lib/parser/lexer.rl" begin tm = p - 3 end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 781; begin p += 1 _goto_level = _out next end end end when 308 then # line 1262 "lib/parser/lexer.rl" begin tm = p - 3 end # line 2043 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin p = @ts - 1 begin @cs = 781 _goto_level = _again next end end end when 337 then # line 1267 "lib/parser/lexer.rl" begin tm = p - 2 end # line 1848 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 @cs = 781; begin p += 1 _goto_level = _out next end end end when 481 then # line 1272 "lib/parser/lexer.rl" begin tm = p - 2 end # line 2336 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tCONSTANT, tok(@ts, tm), @ts, tm) p = tm - 1; begin p += 1 _goto_level = _out next end end end when 261 then # line 1278 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 1494 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLBRACK, '['.freeze, @te - 1, @te) @cs = 543; begin p += 1 _goto_level = _out next end end end when 377 then # line 1278 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 1956 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLBRACK, '['.freeze) begin p += 1 _goto_level = _out next end end end when 484 then # line 1278 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 end # line 2423 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLBRACK2, '['.freeze) @cs = 543; begin p += 1 _goto_level = _out next end end end when 487 then # line 1284 "lib/parser/lexer.rl" begin @paren_nest -= 1 end # line 2390 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) if @version < 24 @cond.lexpop @cmdarg.lexpop else @cond.pop @cmdarg.pop end if tok == '}'.freeze || tok == ']'.freeze if @version >= 25 @cs = 781; else @cs = 511; end else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 253 then # line 1291 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 1475 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if version?(18) emit(:tLPAREN2, '('.freeze, @te - 1, @te) @cs = 773; begin p += 1 _goto_level = _out next end else emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) @cs = 543; begin p += 1 _goto_level = _out next end end end end when 266 then # line 1291 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 1488 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLPAREN2, '('.freeze) @cs = 543; begin p += 1 _goto_level = _out next end end end when 274 then # line 1291 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 1616 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) if version?(18) @cs = 773; begin p += 1 _goto_level = _out next end else @cs = 543; begin p += 1 _goto_level = _out next end end end end when 323 then # line 1291 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 1961 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:tLPAREN, '('.freeze) begin p += 1 _goto_level = _out next end end end when 428 then # line 1291 "lib/parser/lexer.rl" begin @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end end # line 2386 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) @cs = 543; begin p += 1 _goto_level = _out next end end end when 429 then # line 1301 "lib/parser/lexer.rl" begin @paren_nest -= 1 end # line 2390 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit_table(PUNCTUATION) if @version < 24 @cond.lexpop @cmdarg.lexpop else @cond.pop @cmdarg.pop end if tok == '}'.freeze || tok == ']'.freeze if @version >= 25 @cs = 781; else @cs = 511; end else # ) # fnext expr_endfn; ? end begin p += 1 _goto_level = _out next end end end when 71 then # line 1769 "lib/parser/lexer.rl" begin heredoc_e = p end # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 347 then # line 1770 "lib/parser/lexer.rl" begin new_herebody_s = p end # line 1771 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin tok(@ts, heredoc_e) =~ /^<<(-?)(~?)(["'`]?)(.*)\3$/m indent = !$1.empty? || !$2.empty? dedent_body = !$2.empty? type = $3.empty? ? '<<"'.freeze : ('<<'.freeze + $3) delimiter = $4 if @version >= 27 if delimiter.count("\n") > 0 || delimiter.count("\r") > 0 diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end elsif @version >= 24 if delimiter.count("\n") > 0 if delimiter.end_with?("\n") diagnostic :warning, :heredoc_id_ends_with_nl, nil, range(@ts, @ts + 1) delimiter = delimiter.rstrip else diagnostic :fatal, :heredoc_id_has_newline, nil, range(@ts, @ts + 1) end end end if dedent_body && version?(18, 19, 20, 21, 22) emit(:tLSHFT, '<<'.freeze, @ts, @ts + 2) p = @ts + 1 @cs = 543; begin p += 1 _goto_level = _out next end else @cs = (push_literal(type, delimiter, @ts, heredoc_e, indent, dedent_body)); @herebody_s ||= new_herebody_s p = @herebody_s - 1 end end end when 342 then # line 1861 "lib/parser/lexer.rl" begin tm = p - 1; diag_msg = :ivar_name end # line 1864 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) else emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) p = @ts end @cs = 781; begin p += 1 _goto_level = _out next end end end when 345 then # line 1862 "lib/parser/lexer.rl" begin tm = p - 2; diag_msg = :cvar_name end # line 1864 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin if @version >= 27 diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) else emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) p = @ts end @cs = 781; begin p += 1 _goto_level = _out next end end end when 353 then # line 1882 "lib/parser/lexer.rl" begin @escape = nil end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 380 then # line 1971 "lib/parser/lexer.rl" begin tm = p end # line 1972 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin emit(:kRESCUE, 'rescue'.freeze, @ts, tm) p = tm - 1 @cs = 519; begin p += 1 _goto_level = _out next end end end when 471 then # line 2238 "lib/parser/lexer.rl" begin @num_base = 16; @num_digits_s = p end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 465 then # line 2239 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = p end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 468 then # line 2240 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = p end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 462 then # line 2241 "lib/parser/lexer.rl" begin @num_base = 2; @num_digits_s = p end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 477 then # line 2242 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 440 then # line 2243 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 478 then # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 89 then # line 2490 "lib/parser/lexer.rl" begin tm = p end # line 2491 "lib/parser/lexer.rl" begin @te = p+1 begin p = tm - 1; begin @cs = 781 _goto_level = _again next end end end when 8 then # line 1 "NONE" begin @te = p+1 end # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 444 then # line 1 "NONE" begin @te = p+1 end # line 2302 "lib/parser/lexer.rl" begin @num_suffix_s = p end when 222 then # line 1 "NONE" begin @te = p+1 end # line 1365 "lib/parser/lexer.rl" begin @act = 43; end when 209 then # line 1 "NONE" begin @te = p+1 end # line 1369 "lib/parser/lexer.rl" begin @act = 44; end when 205 then # line 1 "NONE" begin @te = p+1 end # line 1373 "lib/parser/lexer.rl" begin @act = 45; end when 26 then # line 1 "NONE" begin @te = p+1 end # line 1537 "lib/parser/lexer.rl" begin @act = 71; end when 255 then # line 1 "NONE" begin @te = p+1 end # line 1550 "lib/parser/lexer.rl" begin @act = 72; end when 27 then # line 1 "NONE" begin @te = p+1 end # line 1589 "lib/parser/lexer.rl" begin @act = 77; end when 248 then # line 1 "NONE" begin @te = p+1 end # line 1594 "lib/parser/lexer.rl" begin @act = 78; end when 275 then # line 1 "NONE" begin @te = p+1 end # line 1626 "lib/parser/lexer.rl" begin @act = 84; end when 45 then # line 1 "NONE" begin @te = p+1 end # line 1639 "lib/parser/lexer.rl" begin @act = 85; end when 296 then # line 1 "NONE" begin @te = p+1 end # line 1693 "lib/parser/lexer.rl" begin @act = 92; end when 285 then # line 1 "NONE" begin @te = p+1 end # line 1697 "lib/parser/lexer.rl" begin @act = 93; end when 69 then # line 1 "NONE" begin @te = p+1 end # line 1817 "lib/parser/lexer.rl" begin @act = 105; end when 385 then # line 1 "NONE" begin @te = p+1 end # line 1925 "lib/parser/lexer.rl" begin @act = 116; end when 299 then # line 1 "NONE" begin @te = p+1 end # line 1966 "lib/parser/lexer.rl" begin @act = 120; end when 379 then # line 1 "NONE" begin @te = p+1 end # line 1972 "lib/parser/lexer.rl" begin @act = 121; end when 378 then # line 1 "NONE" begin @te = p+1 end # line 1978 "lib/parser/lexer.rl" begin @act = 122; end when 74 then # line 1 "NONE" begin @te = p+1 end # line 2043 "lib/parser/lexer.rl" begin @act = 126; end when 297 then # line 1 "NONE" begin @te = p+1 end # line 1306 "lib/parser/lexer.rl" begin @act = 127; end when 300 then # line 1 "NONE" begin @te = p+1 end # line 2089 "lib/parser/lexer.rl" begin @act = 131; end when 495 then # line 1 "NONE" begin @te = p+1 end # line 2153 "lib/parser/lexer.rl" begin @act = 144; end when 490 then # line 1 "NONE" begin @te = p+1 end # line 2182 "lib/parser/lexer.rl" begin @act = 145; end when 498 then # line 1 "NONE" begin @te = p+1 end # line 2192 "lib/parser/lexer.rl" begin @act = 147; end when 491 then # line 1 "NONE" begin @te = p+1 end # line 2197 "lib/parser/lexer.rl" begin @act = 148; end when 492 then # line 1 "NONE" begin @te = p+1 end # line 2202 "lib/parser/lexer.rl" begin @act = 149; end when 497 then # line 1 "NONE" begin @te = p+1 end # line 2206 "lib/parser/lexer.rl" begin @act = 150; end when 489 then # line 1 "NONE" begin @te = p+1 end # line 2217 "lib/parser/lexer.rl" begin @act = 151; end when 483 then # line 1 "NONE" begin @te = p+1 end # line 2231 "lib/parser/lexer.rl" begin @act = 152; end when 409 then # line 1 "NONE" begin @te = p+1 end # line 2245 "lib/parser/lexer.rl" begin @act = 153; end when 442 then # line 1 "NONE" begin @te = p+1 end # line 2289 "lib/parser/lexer.rl" begin @act = 156; end when 81 then # line 1 "NONE" begin @te = p+1 end # line 2304 "lib/parser/lexer.rl" begin @act = 157; end when 412 then # line 1 "NONE" begin @te = p+1 end # line 2332 "lib/parser/lexer.rl" begin @act = 159; end when 403 then # line 1 "NONE" begin @te = p+1 end # line 1306 "lib/parser/lexer.rl" begin @act = 163; end when 414 then # line 1 "NONE" begin @te = p+1 end # line 2354 "lib/parser/lexer.rl" begin @act = 164; end when 407 then # line 1 "NONE" begin @te = p+1 end # line 2380 "lib/parser/lexer.rl" begin @act = 166; end when 413 then # line 1 "NONE" begin @te = p+1 end # line 2386 "lib/parser/lexer.rl" begin @act = 167; end when 87 then # line 1 "NONE" begin @te = p+1 end # line 2477 "lib/parser/lexer.rl" begin @act = 180; end when 502 then # line 1 "NONE" begin @te = p+1 end # line 2494 "lib/parser/lexer.rl" begin @act = 182; end when 177 then # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 936 "lib/parser/lexer.rl" begin @te = p+1 begin current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (<= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 150 then # line 708 "lib/parser/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 361 then # line 708 "lib/parser/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 128 then # line 708 "lib/parser/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 156 then # line 708 "lib/parser/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 367 then # line 708 "lib/parser/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 126 then # line 731 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 154 then # line 731 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 365 then # line 731 "lib/parser/lexer.rl" begin @escape = "\x7f" end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 133 then # line 762 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 776 "lib/parser/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 161 then # line 762 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 776 "lib/parser/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 372 then # line 762 "lib/parser/lexer.rl" begin diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) end # line 776 "lib/parser/lexer.rl" begin diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 116 then # line 808 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 802 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 145 then # line 808 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 802 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 356 then # line 808 "lib/parser/lexer.rl" begin @escape_s = p @escape = nil end # line 802 "lib/parser/lexer.rl" begin diagnostic :fatal, :escape_eof, nil, range(p - 1, p) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 61 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end when 215 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1406 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 230 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1424 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 242 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1456 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 264 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1597 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin begin @cs = 781 _goto_level = _again next end end end when 279 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1678 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 291 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1699 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 317 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2070 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 390 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2097 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 400 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2128 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 421 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2445 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 102 then # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2519 "lib/parser/lexer.rl" begin @te = p p = p - 1; end when 473 then # line 2242 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 437 then # line 2243 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end when 452 then # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 445 then # line 2301 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 634 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } end # line 2304 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 441 then # line 2302 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 634 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } end # line 2304 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end begin p += 1 _goto_level = _out next end end end when 270 then # line 1 "NONE" begin @te = p+1 end # line 492 "lib/parser/lexer.rl" begin # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p end # line 1594 "lib/parser/lexer.rl" begin @act = 78; end when 35 then # line 1 "NONE" begin @te = p+1 end # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1589 "lib/parser/lexer.rl" begin @act = 77; end when 46 then # line 1 "NONE" begin @te = p+1 end # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1639 "lib/parser/lexer.rl" begin @act = 85; end when 94 then # line 1 "NONE" begin @te = p+1 end # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 2477 "lib/parser/lexer.rl" begin @act = 180; end when 65 then # line 1 "NONE" begin @te = p+1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1720 "lib/parser/lexer.rl" begin @act = 98; end when 84 then # line 1 "NONE" begin @te = p+1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2186 "lib/parser/lexer.rl" begin @act = 146; end when 93 then # line 1 "NONE" begin @te = p+1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2477 "lib/parser/lexer.rl" begin @act = 180; end when 37 then # line 1 "NONE" begin @te = p+1 end # line 1549 "lib/parser/lexer.rl" begin tm = p end # line 1550 "lib/parser/lexer.rl" begin @act = 72; end when 382 then # line 1 "NONE" begin @te = p+1 end # line 1971 "lib/parser/lexer.rl" begin tm = p end # line 2043 "lib/parser/lexer.rl" begin @act = 126; end when 381 then # line 1 "NONE" begin @te = p+1 end # line 1971 "lib/parser/lexer.rl" begin tm = p end # line 1306 "lib/parser/lexer.rl" begin @act = 127; end when 474 then # line 1 "NONE" begin @te = p+1 end # line 2242 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2245 "lib/parser/lexer.rl" begin @act = 153; end when 127 then # line 697 "lib/parser/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 155 then # line 697 "lib/parser/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 366 then # line 697 "lib/parser/lexer.rl" begin codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 125 then # line 708 "lib/parser/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 153 then # line 708 "lib/parser/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 881 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end end end when 364 then # line 708 "lib/parser/lexer.rl" begin @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end end # line 716 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord & 0x9f) end # line 720 "lib/parser/lexer.rl" begin @escape = encode_escape(@escape[0].ord | 0x80) end # line 1884 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end @cs = 781; begin p += 1 _goto_level = _out next end end end when 469 then # line 2238 "lib/parser/lexer.rl" begin @num_base = 16; @num_digits_s = p end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 463 then # line 2239 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = p end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 466 then # line 2240 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = p end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 460 then # line 2241 "lib/parser/lexer.rl" begin @num_base = 2; @num_digits_s = p end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 472 then # line 2242 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 436 then # line 2243 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2245 "lib/parser/lexer.rl" begin @te = p p = p - 1; begin digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end begin p += 1 _goto_level = _out next end end end when 31 then # line 1 "NONE" begin @te = p+1 end # line 848 "lib/parser/lexer.rl" begin # After every heredoc was parsed, @herebody_s contains the # position of next token after all heredocs. if @herebody_s p = @herebody_s @herebody_s = nil end end # line 1549 "lib/parser/lexer.rl" begin tm = p end # line 1550 "lib/parser/lexer.rl" begin @act = 72; end when 62 then # line 1 "NONE" begin @te = p+1 end # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 1720 "lib/parser/lexer.rl" begin @act = 98; end when 91 then # line 1 "NONE" begin @te = p+1 end # line 1208 "lib/parser/lexer.rl" begin @sharp_s = p - 1 end # line 1211 "lib/parser/lexer.rl" begin emit_comment(@sharp_s, p == pe ? p - 2 : p) end # line 2477 "lib/parser/lexer.rl" begin @act = 180; end when 479 then # line 1 "NONE" begin @te = p+1 end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2277 "lib/parser/lexer.rl" begin @act = 155; end when 475 then # line 1 "NONE" begin @te = p+1 end # line 2242 "lib/parser/lexer.rl" begin @num_base = 10; @num_digits_s = @ts end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2277 "lib/parser/lexer.rl" begin @act = 155; end when 439 then # line 1 "NONE" begin @te = p+1 end # line 2243 "lib/parser/lexer.rl" begin @num_base = 8; @num_digits_s = @ts end # line 2244 "lib/parser/lexer.rl" begin @num_suffix_s = p end # line 625 "lib/parser/lexer.rl" begin @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } end # line 2277 "lib/parser/lexer.rl" begin @act = 155; end # line 23498 "lib/parser/lexer.rb" end end end if _goto_level <= _again case _lex_to_state_actions[ @cs] when 96 then # line 1 "NONE" begin @ts = nil; end # line 23508 "lib/parser/lexer.rb" end if @cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof if _lex_eof_trans[ @cs] > 0 _trans = _lex_eof_trans[ @cs] - 1; _goto_level = _eof_trans next; end end end if _goto_level <= _out break end end end # line 284 "lib/parser/lexer.rl" # % @p = p if @token_queue.any? @token_queue.shift elsif @cs == klass.lex_error [ false, [ '$error'.freeze, range(p - 1, p) ] ] else eof = @source_pts.size [ false, [ '$eof'.freeze, range(eof, eof) ] ] end end protected def eof_codepoint?(point) [0x04, 0x1a, 0x00].include? point end def version?(*versions) versions.include?(@version) end def stack_pop @top -= 1 @stack[@top] end def encode_escape(ord) ord.chr.force_encoding(@source_buffer.source.encoding) end def tok(s = @ts, e = @te) @source_buffer.slice(s...e) end def range(s = @ts, e = @te) Parser::Source::Range.new(@source_buffer, s, e) end def emit(type, value = tok, s = @ts, e = @te) token = [ type, [ value, range(s, e) ] ] @token_queue.push(token) @tokens.push(token) if @tokens token end def emit_table(table, s = @ts, e = @te) value = tok(s, e) emit(table[value], value, s, e) end def emit_do(do_block=false) if @cond.active? emit(:kDO_COND, 'do'.freeze) elsif @cmdarg.active? || do_block emit(:kDO_BLOCK, 'do'.freeze) else emit(:kDO, 'do'.freeze) end end def arg_or_cmdarg(cmd_state) if cmd_state self.class.lex_en_expr_cmdarg else self.class.lex_en_expr_arg end end def emit_comment(s = @ts, e = @te) if @comments @comments.push(Parser::Source::Comment.new(range(s, e))) end if @tokens @tokens.push([ :tCOMMENT, [ tok(s, e), range(s, e) ] ]) end nil end def diagnostic(type, reason, arguments=nil, location=range, highlights=[]) @diagnostics.process( Parser::Diagnostic.new(type, reason, arguments, location, highlights)) end # # === LITERAL STACK === # def push_literal(*args) new_literal = Literal.new(self, *args) @literal_stack.push(new_literal) next_state_for_literal(new_literal) end def next_state_for_literal(literal) if literal.words? && literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_backslash_delimited_words else self.class.lex_en_plain_backslash_delimited_words end elsif literal.words? && !literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_words else self.class.lex_en_plain_words end elsif !literal.words? && literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_backslash_delimited else self.class.lex_en_plain_backslash_delimited end else if literal.interpolate? self.class.lex_en_interp_string else self.class.lex_en_plain_string end end end def literal @literal_stack.last end def pop_literal old_literal = @literal_stack.pop @dedent_level = old_literal.dedent_level if old_literal.type == :tREGEXP_BEG # Fetch modifiers. self.class.lex_en_regexp_modifiers else self.class.lex_en_expr_end end end # Mapping of strings to parser tokens. PUNCTUATION = { '=' => :tEQL, '&' => :tAMPER2, '|' => :tPIPE, '!' => :tBANG, '^' => :tCARET, '+' => :tPLUS, '-' => :tMINUS, '*' => :tSTAR2, '/' => :tDIVIDE, '%' => :tPERCENT, '~' => :tTILDE, ',' => :tCOMMA, ';' => :tSEMI, '.' => :tDOT, '..' => :tDOT2, '...' => :tDOT3, '[' => :tLBRACK2, ']' => :tRBRACK, '(' => :tLPAREN2, ')' => :tRPAREN, '?' => :tEH, ':' => :tCOLON, '&&' => :tANDOP, '||' => :tOROP, '-@' => :tUMINUS, '+@' => :tUPLUS, '~@' => :tTILDE, '**' => :tPOW, '->' => :tLAMBDA, '=~' => :tMATCH, '!~' => :tNMATCH, '==' => :tEQ, '!=' => :tNEQ, '>' => :tGT, '>>' => :tRSHFT, '>=' => :tGEQ, '<' => :tLT, '<<' => :tLSHFT, '<=' => :tLEQ, '=>' => :tASSOC, '::' => :tCOLON2, '===' => :tEQQ, '<=>' => :tCMP, '[]' => :tAREF, '[]=' => :tASET, '{' => :tLCURLY, '}' => :tRCURLY, '`' => :tBACK_REF2, '!@' => :tBANG, '&.' => :tANDDOT, } PUNCTUATION_BEGIN = { '&' => :tAMPER, '*' => :tSTAR, '**' => :tDSTAR, '+' => :tUPLUS, '-' => :tUMINUS, '::' => :tCOLON3, '(' => :tLPAREN, '{' => :tLBRACE, '[' => :tLBRACK, } KEYWORDS = { 'if' => :kIF_MOD, 'unless' => :kUNLESS_MOD, 'while' => :kWHILE_MOD, 'until' => :kUNTIL_MOD, 'rescue' => :kRESCUE_MOD, 'defined?' => :kDEFINED, 'BEGIN' => :klBEGIN, 'END' => :klEND, } KEYWORDS_BEGIN = { 'if' => :kIF, 'unless' => :kUNLESS, 'while' => :kWHILE, 'until' => :kUNTIL, 'rescue' => :kRESCUE, 'defined?' => :kDEFINED, 'BEGIN' => :klBEGIN, 'END' => :klEND, } %w(class module def undef begin end then elsif else ensure case when for break next redo retry in do return yield super self nil true false and or not alias __FILE__ __LINE__ __ENCODING__).each do |keyword| KEYWORDS_BEGIN[keyword] = KEYWORDS[keyword] = :"k#{keyword.upcase}" end # line 2534 "lib/parser/lexer.rl" # % end parser-2.7.0.2/lib/parser/ruby23.rb0000644000004100000410000076612213617025313016740 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby23 < Parser::Base def version 23 end def default_encoding Encoding::UTF_8 end ##### State transition tables begin ### clist = [ '-577,859,-99,-490,270,-98,-104,-577,-577,-577,906,570,715,-577,-577', '219,-577,270,-97,-99,-476,-104,-105,-490,647,-577,612,-476,-97,-103', '610,220,216,217,978,270,-577,-577,-98,-577,-577,-577,-577,-577,570,570', '-100,-102,570,113,-88,715,647,908,112,-286,220,113,-99,646,-97,208,112', '-105,-102,-100,-577,-577,-577,-577,-577,-577,-577,-577,-577,-577,-577', '-577,-577,-577,-97,-101,-577,-577,-577,-476,631,646,814,-101,-577,269', '611,-577,-574,-286,609,715,-577,265,-577,624,-577,-577,269,-577,-577', '-577,-577,-577,-289,-577,-577,-577,-89,-95,113,-289,-289,-289,-99,112', '269,-289,-289,-99,-289,-577,-90,113,-577,-577,-103,-92,112,-577,-97', '-88,-94,-104,-105,-97,-577,-101,-104,-105,-289,-289,570,-289,-289,-289', '-289,-289,-573,113,-98,-491,-573,-92,112,-98,113,113,-100,-102,113,112', '112,-100,-102,112,-96,-93,-91,914,-289,-289,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,216,217,-289,-289,-289,-83,630,813', '-92,-101,-289,113,207,-289,-101,-69,112,214,-289,-574,-289,445,-289', '-289,-98,-289,-289,-289,-289,-289,-476,-289,447,-289,-573,-92,626,-476', '-476,-476,91,92,-476,-476,-476,448,-476,-289,582,647,-289,-289,583,-94', '-476,-289,-476,-476,-476,805,-103,576,-289,-103,-96,-103,-476,-476,-93', '-476,-476,-476,-476,-476,-105,-92,113,917,-92,841,-90,112,-91,-93,646', '974,216,217,-92,270,647,216,217,-102,220,769,-476,-476,-476,-476,-476', '-476,-476,-476,-476,-476,-476,-476,-476,-476,216,217,-476,-476,-476', '219,-476,-476,93,94,-476,220,113,-476,-476,646,-476,112,-476,921,-476', '-264,-476,-476,-93,-476,-476,-476,-476,-476,-479,-476,-289,-476,91,92', '-90,-479,-91,-289,-289,-289,-100,265,-289,-289,-289,-476,-289,113,-476', '-476,-476,-476,112,-476,113,-476,-289,-289,-289,112,-476,-476,-93,589', '269,-93,-289,-289,220,-289,-289,-289,-289,-289,-90,-93,-91,-90,898,-91', '216,217,550,446,547,546,545,-90,548,-91,597,957,220,-479,517,970,-289', '-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,93', '94,-289,-289,-289,529,772,-289,531,529,-289,597,528,-289,-289,597,-289', '597,-289,931,-289,625,-289,-289,972,-289,-289,-289,-289,-289,-105,-289', '550,-289,547,546,545,79,548,597,529,-104,597,531,599,598,595,-289,938', '80,-289,-289,-289,-289,832,-289,597,-289,-577,81,770,662,-289,-103,113', '-577,-577,-577,-91,112,-577,-577,-577,939,-577,599,598,608,-100,599', '598,599,598,-577,-577,-577,-577,529,206,748,531,746,755,623,-577,-577', '220,-577,-577,-577,-577,-577,619,599,598,602,599,598,600,597,216,217', '597,398,955,479,-486,-102,400,399,599,598,595,-486,-577,-577,-577,-577', '-577,-577,-577,-577,-577,-577,-577,-577,-577,-577,-261,-90,-577,-577', '-577,488,771,-577,212,490,-577,-99,-485,-577,-577,579,-577,957,-577', '-485,-577,-491,-577,-577,577,-577,-577,-577,-577,-577,492,-577,-577', '-577,617,599,598,613,599,598,604,-487,-484,-486,959,517,960,-577,-487', '-484,-577,-577,-577,-577,500,-577,-68,-577,-479,836,805,220,-577,-101', '503,-479,-479,-479,-89,504,-479,-479,-479,213,-479,836,805,-485,-98', '566,565,-481,-479,965,-479,-479,-479,934,-481,547,546,545,-95,548,-479', '-479,576,-479,-479,-479,-479,-479,-104,212,390,-482,-487,-484,-483,212', '585,511,-482,212,581,-483,263,740,741,587,263,742,107,108,-479,-479', '-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,274,220', '-479,-479,-479,240,-479,-479,-481,614,-479,265,974,-479,-479,514,-479', '220,-479,220,-479,735,-479,-479,240,-479,-479,-479,-479,-479,213,-479', '-482,-479,555,-483,213,237,212,985,213,239,238,220,558,937,-83,-479', '666,986,-479,-479,-479,-479,587,-479,237,-479,-411,220,239,238,-479', '-479,987,-411,-411,-411,518,555,-411,-411,-411,212,-411,522,988,566', '565,558,984,898,559,-411,-411,-411,677,898,580,982,898,-577,682,683', '-411,-411,685,-411,-411,-411,-411,-411,550,213,547,546,545,-332,548', '993,689,692,566,565,-332,693,934,559,547,546,545,695,548,-332,-411,-411', '-411,-411,-411,-411,-411,-411,-411,-411,-411,-411,-411,-411,213,701', '-411,-411,-411,-577,697,-411,-290,265,-411,699,-577,-411,-411,-290,-411', '-573,-411,957,-411,-577,-411,-411,-290,-411,-411,-411,-411,-411,707', '-411,-411,-411,-332,240,708,709,220,711,-577,-290,-289,576,718,-570', '240,-411,-290,-289,-411,-411,-579,-411,-574,-411,319,-290,-289,-579', '-579,-579,-411,735,-579,-579,-579,237,-579,745,-577,239,238,-290,235', '236,749,-579,-579,-579,-579,116,117,118,119,120,750,-262,-579,-579,109', '-579,-579,-579,-579,-579,756,-476,479,-574,-573,212,479,682,-476,974', '-290,-289,211,-570,220,774,318,-476,259,240,692,209,-579,-579,-579,-579', '-579,-579,-579,-579,-579,-579,-579,-579,-579,-579,-570,212,-579,-579', '-579,490,492,-579,443,798,-579,240,677,-579,-579,220,-579,444,-579,240', '-579,240,-579,-579,265,-579,-579,-579,-579,-579,-476,-579,-579,-579', '213,401,265,677,212,240,550,968,547,546,545,937,548,-579,240,-571,-579', '-579,-579,-579,587,-579,-296,-579,805,220,220,957,-579,-296,-296,-296', '213,830,-296,-296,-296,237,-296,220,805,239,238,701,235,236,840,121', '-296,-296,220,637,903,116,117,118,119,120,-296,-296,220,-296,-296,-296', '-296,-296,220,-479,259,213,1012,-488,849,634,-479,-263,1013,1014,-488', '-571,858,532,533,-479,492,974,974,-488,-296,-296,-296,-296,-296,-296', '-296,-296,-296,-296,-296,-296,-296,-296,-571,974,-296,-296,-296,-289', '220,-296,265,274,-296,861,-289,-296,-296,692,-296,-574,-296,864,-296', '-289,-296,-296,866,-296,-296,-296,-296,-296,-479,-296,-244,-296,-488', '868,870,220,872,-244,-244,-244,873,876,-244,-244,-244,-296,-244,878', '-296,-296,879,-296,677,-296,388,-244,-244,-244,881,215,-296,116,117', '118,119,120,-244,-244,-289,-244,-244,-244,-244,-244,550,-489,547,546', '545,212,548,-261,-489,885,887,890,510,692,892,894,896,-489,898,898,220', '508,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244,-244', '-244,904,701,-244,-244,-244,-279,,-244,212,265,-244,,-279,-244,-244', '520,-244,,-244,,-244,-279,-244,-244,444,-244,-244,-244,-244,-244,-489', '-244,-244,-244,213,550,,547,546,545,,548,,,,,,-244,,,-244,-244,-578', '-244,,-244,,,,-578,-578,-578,-244,,-578,-578,-578,,-578,,-279,,701,213', ',,,-578,-578,-578,-578,704,,,,,,,-578,-578,,-578,-578,-578,-578,-578', '550,,547,546,545,550,548,547,546,545,550,548,547,546,545,,548,,,,,,-578', '-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,,701', '-578,-578,-578,,701,-578,,,-578,701,,-578,-578,704,-578,,-578,,-578', ',-578,-578,,-578,-578,-578,-578,-578,,-578,-578,-578,,,550,,547,546', '545,,548,,,,,-578,,,-578,-578,-578,-578,,-578,-280,-578,,,,,-578,-280', '-280,-280,,,-280,-280,-280,240,-280,701,,,,,,,,,-280,-280,-280,,,254', '255,,,,-280,-280,,-280,-280,-280,-280,-280,,,,237,,243,,239,238,,235', '236,,,241,,242,,,,,,-280,-280,-280,-280,-280,-280,-280,-280,-280,-280', '-280,-280,-280,-280,,,-280,-280,-280,,,-280,,,-280,,,-280,-280,,-280', ',-280,,-280,,-280,-280,,-280,-280,-280,-280,-280,,-280,,-280,,,,,,,', ',,,,,,-280,,,-280,-280,-280,-280,,-280,-244,-280,,,,,-280,-244,-244', '-244,,,-244,-244,-244,550,-244,547,546,545,555,548,,,,-244,-244,,,,558', ',,,,,-244,-244,,-244,-244,-244,-244,-244,,,,,,,,550,553,547,546,545', '555,548,,,,563,562,566,565,,558,,559,,550,,547,546,545,555,548,-244', ',,,,,,-244,558,,,553,265,-244,,,,220,,,563,562,566,565,,,,559,,,553', '536,,,,-244,-244,,,563,562,566,565,,,,559,,,,-244,,,-244,,,,,-244,292', '69,70,71,9,57,-244,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,635,8,45,294,10,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248,256,257,252', '253,,233,234,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238', ',235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258', ',-238,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,635,8,45,294,10,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246', '248,256,257,252,253,,233,234,,,254,255,,40,,,296,,,58,59,,,60,,35,237', ',243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,620,8,45', '294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244', '249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,40,,,33,,,58', '59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70,71,9,57', ',,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,', ',19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255', ',40,,,296,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241', '20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,233', '234,,,254,255,,40,,,296,,,58,59,,,60,,35,237,,243,44,239,238,,235,236', '247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,220,258,,,', ',62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248,256', '257,252,253,,233,234,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44', '239,238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,,258,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251', '246,248,256,257,252,253,,233,234,,,254,255,,40,,,33,,,58,59,,,60,,35', '237,,243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,258,,,,,62,,81,93,94,5,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,7', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249', '250,251,246,248,256,257,252,253,,233,234,,,254,255,,40,,,33,,,58,59', ',,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70,71,9,57,,', ',63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19', ',,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,40', ',,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254', '255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241', '20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,233', '234,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236', '247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62', ',81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248,256,257', '252,253,,233,234,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',258,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246', '248,256,257,252,253,,233,234,,,254,255,,40,,,33,,,58,59,,,60,,35,237', ',243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249', '250,251,246,248,256,257,252,253,,233,234,,,254,255,,40,,,33,,,58,59', ',,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70,71,9,57,,', ',63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19', ',,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,40', ',,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254', '255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241', '20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,233', '234,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236', '247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62', ',81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,240,-598,-598,-598,-598,246,248,,', '-598,-598,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238', ',235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,', ',,,,62,,81,93,94,5,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248,256', '257,252,253,,-598,-598,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243', '44,239,238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,', ',,,80,88,,,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,,,,,,,,,,,,,', ',,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,,,241', '20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,292', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,240,,,,,,,,,,,,,,,,254,255,,40,,,33,,,58,59,,,60', ',35,237,,243,44,239,238,,235,236,,,241,20,242,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,,,,,,', ',,,,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235', '236,,,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81', '93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,240,-598,-598,-598,-598,246,248,,,-598', '-598,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235', '236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62', ',81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,240,-598,-598,-598,-598,246,248,,', '-598,-598,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238', ',235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,', ',,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,240,-598,-598,-598,-598,246', '248,,,-598,-598,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,-598,-598,-598,-598,246', '248,,,-598,-598,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248', ',,252,253,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238', ',235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,', ',,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248', '256,,252,253,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,5,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,240,-598,-598,-598,-598,246', '248,,,-598,-598,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248', '256,257,252,253,,-598,-598,,,254,255,,40,,,33,,,58,59,,,60,,35,237,', '243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,,,,,,,,,', ',,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,,44,239,238,,235,236,,', ',20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94', '63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19', ',,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240', ',,,,,,,,,,,,,,,254,255,,225,,,231,,,58,59,,,60,,,237,,243,44,239,238', ',235,236,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93', '94,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,240,,,,,,,,,,,,,,,,254,255,,40,,,33,,,58,59,,,60', ',35,237,,243,44,239,238,,235,236,,,,20,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286', '99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286', '99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286', '99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,', '307,308,314,101,100,102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60', ',300,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,305,,,231,,,58,59,,,60,,,550,,547', '546,545,555,548,,,,,,,,,558,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,317', ',553,62,,81,93,94,69,70,71,,57,566,565,,63,64,559,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', '286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,283,,,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,', '80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,', ',,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,', ',,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,113,,,,,112,62,,81,93,94,69,70,71', ',57,,,,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,,,315,,,,,,,,,,,,,,,,,,,,350,,,33,,,58,59,,,60,,35,,,,,,,,,,,,,,', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,309,,,105,104,106,355,56,97,96,356,,99,107,108,,91,92,,,315', ',,,,,,,,,,,,,,,,362,,,357,,,231,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',309,,,105,104,106,355,56,97,96,356,,99,107,108,,91,92,,,315,,,,,,,', ',,,,,,,,,,,,357,,,231,,,58,59,,,60,,,550,,547,546,545,555,548,,,,,,', ',,558,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,553,62,,81,93,94,69,70', '71,9,57,566,565,,63,64,559,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44', ',,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,390,62,,81,93', '94,69,70,71,,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,', '91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,', ',,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,', ',,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,', ',29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',406,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287', ',,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,', ',,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,', ',,,,,,,,,,,,,225,,,231,,,58,59,,,60,,406,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,', ',,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,', '231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,220,', ',69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,', ',232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287', ',,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287', ',,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287', ',,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,220,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,8,45,,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,', ',,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,', ',,,,,,,,,,305,,,231,,,58,59,,,60,,,550,,547,546,545,555,548,,,,,,,,', '558,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,506,,553,62,,81,93,94,69', '70,71,,57,566,565,,63,64,559,,,67,,65,66,68,311,312,72,73,,,,,,307,308', '314,101,100,102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60,,,,,', ',,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,522,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,', ',,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45', ',,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,', ',,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,89', '284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,', ',67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,', ',,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,', ',,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,225,,,231,,,58,59,,,60,,659,,281,,44,,,287,,,,,,230,,,,,89,284', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,281,,44,,,287,,,,,,230,,,,', '89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232', ',,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,', ',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,,,390,62,,81,93,94,69,70,71,,57,', ',,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103', ',,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,315', ',,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,89,284', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,', ',,,,,,,,,,305,,,301,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,', ',69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', '286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,659,,,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,', '80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73', ',,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,', '307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,283,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286', '99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286', '99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,', '307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,753,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,659,', '281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308', '314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286', '99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,', ',69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28', '27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,', ',,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,', ',,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,', ',105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,', ',,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,', '231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60,,,,,,,,,', ',,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', ',,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,406,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,', ',,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,', '231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73', ',,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,', ',,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,', ',,,,,,,,,,875,,,231,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,', '231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73', ',,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,659,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,', ',,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,309,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,875,,,231,,,58,59', ',,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,945,,,231,,,58,59,,,60,,,,,,,,,', ',,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,', ',232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287', ',,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94', '173,184,174,197,170,190,180,179,200,201,195,178,177,172,198,202,203', '182,171,185,189,191,183,176,,,,192,199,194,193,186,196,181,169,188,187', ',,,,,168,175,166,167,163,164,165,124,126,,,125,,,,,,,,157,158,,154,136', '137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151,150', ',135,156,153,152,161,148,149,143,141,133,155,134,,,162,89,,,,,,,,,,', ',,,88,173,184,174,197,170,190,180,179,200,201,195,178,177,172,198,202', '203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196,181,169,188', '187,,,,,,168,175,166,167,163,164,165,124,126,,,125,,,,,,,,157,158,,154', '136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151', '150,,135,156,153,152,161,148,149,143,141,133,155,134,,,162,89,,,,,,', ',,,,,,,88,173,184,174,197,170,190,180,179,200,201,195,178,177,172,198', '202,203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196,181,169', '188,187,,,,,,168,175,166,167,163,164,165,124,126,,,125,,,,,,,,157,158', ',154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,', ',,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,,,162,89', ',,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200,201,195,178,177', '172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196', '181,169,188,187,,,,,,168,175,166,167,163,164,165,124,126,123,,125,,', ',,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147', ',,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134', ',,162,89,,,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200,201,195', '178,177,172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,373', '372,374,371,169,188,187,,,,,,168,175,166,167,368,369,370,366,126,97', '96,367,,99,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,378,,,,,,,,151,150,,135,156,153,152,161,148,149,143', '141,133,155,134,,,162,173,184,174,197,170,190,180,179,200,201,195,178', '177,172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,193,186', '196,181,169,188,187,,,,,,168,175,166,167,163,164,165,124,126,,,125,', ',,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146', '147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155', '134,726,426,162,,727,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139', '140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161', '148,149,143,141,133,155,134,640,426,162,,641,,,,,,,,157,158,,154,136', '137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151', '150,,135,156,153,152,161,148,149,143,141,133,155,134,477,419,162,,478', ',,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146', '147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133', '155,134,673,426,162,,674,,,,,,,,157,158,,154,136,137,138,145,142,144', ',,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152', '161,148,149,143,141,133,155,134,670,419,162,,671,,,,,,,,157,158,,154', '136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,', ',151,150,,135,156,153,152,161,148,149,143,141,133,155,134,723,426,162', ',724,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160', '146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141', '133,155,134,477,419,162,,478,,,,,,,,157,158,,154,136,137,138,145,142', '144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151,150,,135,156,153,152', '161,148,149,143,141,133,155,134,1007,426,162,,1008,,,,,,,,157,158,,154', '136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,', ',151,150,,135,156,153,152,161,148,149,143,141,133,155,134,638,419,162', ',639,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160', '146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141', '133,155,134,415,419,162,,416,,,,,,,,157,158,,154,136,137,138,145,142', '144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153', '152,161,148,149,143,141,133,155,134,422,426,162,,421,,,,,,,,157,158', ',154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,', ',,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,980,426', '162,,979,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143', '141,133,155,134,640,426,162,,641,,,,,,,,157,158,,154,136,137,138,145', '142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156', '153,152,161,148,149,143,141,133,155,134,638,419,162,,639,,,,,,,,157', '158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265', ',,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,1005', '419,162,,1006,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140', ',,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148', '149,143,141,133,155,134,721,419,162,,722,,,,,,,,157,158,,154,136,137', '138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150', ',135,156,153,152,161,148,149,143,141,133,155,134,,550,162,547,546,545', '555,548,,550,,547,546,545,555,548,558,,,,,,,,558,,550,,547,546,545,555', '548,,,,,,553,,,558,,,,,553,563,562,566,565,,,,559,563,562,566,565,,', ',559,553,,550,,547,546,545,555,548,,,566,565,,,,559,558,,550,,547,546', '545,555,548,,550,,547,546,545,555,548,558,,,,,553,,,558,,,,,,,,566,565', ',,,559,553,,,,,,,,553,563,562,566,565,,,,559,563,562,566,565,,,550,559', '547,546,545,555,548,,550,,547,546,545,555,548,558,,,,,,,,558,,550,,547', '546,545,555,548,,,,,,553,,,558,,,,,553,,,566,565,,,,559,563,562,566', '565,,,,559,553,,550,,547,546,545,555,548,,,566,565,,,,559,558,,550,', '547,546,545,555,548,,550,,547,546,545,555,548,558,,,,,553,,,558,,,,', ',563,562,566,565,,,,559,553,,,,,,,,553,563,562,566,565,,,,559,563,562', '566,565,,,550,559,547,546,545,555,548,550,,547,546,545,555,548,550,558', '547,546,545,555,548,,558,,,,,,,558,,,,,,,,553,,,,,,,553,,,,566,565,', '553,,559,,566,565,,,,559,,566,565,,,,559' ] racc_action_table = arr = ::Array.new(25178, 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 = [ '422,773,1019,38,61,348,580,422,422,422,834,907,573,422,422,19,422,650', '942,843,366,985,946,223,483,422,386,366,347,724,385,932,525,525,932', '310,422,422,943,422,422,422,422,422,341,340,1005,1006,884,290,38,572', '651,837,290,58,19,852,773,483,38,13,852,351,722,721,422,422,422,422', '422,422,422,422,422,422,422,422,422,422,223,1007,422,422,422,366,422', '651,687,723,422,61,386,422,724,58,385,844,422,310,422,414,422,422,650', '422,422,422,422,422,421,422,422,422,348,580,573,421,421,421,1019,573', '310,421,421,1019,421,422,843,907,422,422,1008,422,907,422,942,347,724', '985,946,942,422,422,985,946,421,421,719,421,421,421,421,421,723,572', '943,224,1007,673,572,943,341,340,1005,1006,884,341,340,1005,1006,884', '351,722,721,846,421,421,421,421,421,421,421,421,421,421,421,421,421', '421,594,594,421,421,421,665,421,687,723,1007,421,844,12,421,1007,665', '844,15,421,1008,421,225,421,421,224,421,421,421,421,421,95,421,227,421', '673,673,416,95,95,95,41,41,95,95,95,228,95,421,357,484,421,421,357,421', '95,421,95,95,95,912,1008,912,421,421,15,1008,95,95,671,95,95,95,95,95', '15,673,719,850,673,719,800,719,670,416,484,928,439,439,673,26,475,17', '17,416,594,638,95,95,95,95,95,95,95,95,95,95,95,95,95,95,680,680,95', '95,95,232,95,95,41,41,95,851,847,95,95,475,95,847,95,854,95,855,95,95', '671,95,95,95,95,95,367,95,641,95,315,315,800,367,670,641,641,641,638', '26,641,641,641,95,641,3,95,95,95,95,3,95,344,95,641,641,641,344,95,95', '671,361,26,671,641,641,439,641,641,641,641,641,800,671,670,800,1009', '670,590,590,704,226,704,704,704,800,704,670,494,1010,680,367,445,926', '641,641,641,641,641,641,641,641,641,641,641,641,641,641,315,315,641', '641,641,331,641,641,331,330,641,384,330,641,641,607,641,605,641,871', '641,415,641,641,927,641,641,641,641,641,226,641,903,641,903,903,903', '77,903,382,334,445,381,334,494,494,494,641,875,77,641,641,641,641,704', '641,380,641,640,77,639,494,641,641,590,640,640,640,415,590,640,640,640', '877,640,384,384,384,415,607,607,605,605,640,640,640,640,686,10,607,686', '605,621,413,640,640,411,640,640,640,640,640,407,382,382,382,381,381', '381,387,339,339,383,123,903,264,368,639,123,123,380,380,380,368,640', '640,640,640,640,640,640,640,640,640,640,640,640,640,405,621,640,640', '640,278,640,640,349,279,640,621,369,640,640,349,640,905,640,369,640', '39,640,640,349,640,640,640,640,640,282,640,640,640,402,387,387,387,383', '383,383,370,371,368,909,319,910,640,370,371,640,640,640,640,294,640', '295,640,98,995,995,297,640,640,298,98,98,98,39,299,98,98,98,349,98,710', '710,369,39,692,692,372,98,916,98,98,98,978,372,978,978,978,319,978,98', '98,345,98,98,98,98,98,319,359,346,373,370,371,374,376,359,305,373,24', '352,374,376,598,598,359,24,598,598,598,98,98,98,98,98,98,98,98,98,98', '98,98,98,98,308,309,98,98,98,451,98,98,372,396,98,314,930,98,98,316', '98,481,98,485,98,920,98,98,452,98,98,98,98,98,359,98,373,98,689,374', '376,451,936,945,24,451,451,501,689,936,502,98,505,948,98,98,98,98,936', '98,452,98,27,507,452,452,98,98,949,27,27,27,320,861,27,27,27,944,27', '512,950,689,689,861,944,951,689,27,27,27,515,952,350,944,953,726,523', '524,27,27,526,27,27,27,27,27,957,936,957,957,957,46,957,954,538,539', '861,861,46,541,872,861,872,872,872,542,872,46,27,27,27,27,27,27,27,27', '27,27,27,27,27,27,944,957,27,27,27,726,543,27,511,27,27,552,726,27,27', '511,27,726,27,956,27,726,27,27,511,27,27,27,27,27,560,27,27,27,46,471', '564,567,45,569,726,583,674,574,575,355,323,27,583,674,27,27,427,27,674', '27,40,583,674,427,427,427,27,592,427,427,427,471,427,602,726,471,471', '511,471,471,610,427,427,427,427,293,293,293,293,293,612,618,427,427', '1,427,427,427,427,427,622,355,627,979,980,14,632,981,355,1021,583,674', '14,355,642,644,37,355,649,456,922,14,427,427,427,427,427,427,427,427', '427,427,427,427,427,427,355,222,427,427,427,656,658,427,222,664,427', '455,667,427,427,669,427,222,427,454,427,453,427,427,672,427,427,427', '427,427,355,427,427,427,14,204,675,676,874,470,830,925,830,830,830,874', '830,427,679,356,427,427,427,427,874,427,28,427,681,684,688,994,427,28', '28,28,222,703,28,28,28,470,28,705,712,470,470,830,470,470,717,7,28,28', '720,441,830,6,6,6,6,6,28,28,328,28,28,28,28,28,729,356,22,874,996,302', '733,431,356,752,997,998,302,356,757,332,333,356,335,999,1000,302,28', '28,28,28,28,28,28,28,28,28,28,28,28,28,356,1001,28,28,28,727,1004,28', '423,28,28,775,727,28,28,776,28,727,28,778,28,727,28,28,779,28,28,28', '28,28,356,28,417,28,302,780,782,783,784,417,417,417,785,789,417,417', '417,28,417,793,28,28,794,28,799,28,109,417,417,417,803,16,28,499,499', '499,499,499,417,417,727,417,417,417,417,417,832,303,832,832,832,304', '832,806,303,807,810,815,304,816,820,821,823,303,824,826,829,304,417', '417,417,417,417,417,417,417,417,417,417,417,417,417,831,832,417,417', '417,306,,417,321,417,417,,306,417,417,321,417,,417,,417,306,417,417', '321,417,417,417,417,417,303,417,417,417,304,553,,553,553,553,,553,,', ',,,417,,,417,417,426,417,,417,,,,426,426,426,417,,426,426,426,,426,', '306,,553,321,,,,426,426,426,426,553,,,,,,,426,426,,426,426,426,426,426', '904,,904,904,904,701,904,701,701,701,993,701,993,993,993,,993,,,,,,426', '426,426,426,426,426,426,426,426,426,426,426,426,426,,904,426,426,426', ',701,426,,,426,993,,426,426,701,426,,426,,426,,426,426,,426,426,426', '426,426,,426,426,426,,,955,,955,955,955,,955,,,,,426,,,426,426,426,426', ',426,56,426,,,,,426,56,56,56,,,56,56,56,464,56,955,,,,,,,,,56,56,56', ',,464,464,,,,56,56,,56,56,56,56,56,,,,464,,464,,464,464,,464,464,,,464', ',464,,,,,,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,476,56,,,,,56,476,476,476,,,476,476,476,646,476', '646,646,646,646,646,,,,476,476,,,,646,,,,,,476,476,,476,476,476,476', '476,,,,,,,,968,646,968,968,968,968,968,,,,646,646,646,646,,968,,646', ',338,,338,338,338,338,338,476,,,,,,,476,338,,,968,476,476,,,,646,,,968', '968,968,968,,,,968,,,338,338,,,,476,476,,,338,338,338,338,,,,338,,,', '476,,,476,,,,,476,941,941,941,941,941,941,476,,,941,941,,,,941,,941', '941,941,941,941,941,941,,,,,,941,941,941,941,941,941,941,,,941,,,,,434', '941,941,941,941,941,941,941,941,941,941,941,941,,941,941,941,,941,941', '941,941,941,434,434,434,434,434,434,434,434,434,434,434,,434,434,,,434', '434,,941,,,941,,,941,941,,,941,,941,434,,434,941,434,434,,434,434,434', '434,434,941,434,,,,941,941,941,941,,941,941,941,941,,,,,941,941,,434', ',434,,,941,,941,941,941,33,33,33,33,33,33,,,,33,33,,,,33,,33,33,33,33', '33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,643,33,33,33,33,33,33,33', '33,33,33,33,33,,33,33,33,,33,33,33,33,33,643,643,643,643,643,643,643', '643,643,643,643,,643,643,,,643,643,,33,,,33,,,33,33,,,33,,33,643,,643', '33,643,643,,643,643,643,643,643,33,643,,,,33,33,33,33,,33,33,33,33,', ',,,33,33,,643,,,,,33,,33,33,33,889,889,889,889,889,889,,,,889,889,,', ',889,,889,889,889,889,889,889,889,,,,,,889,889,889,889,889,889,889,', ',889,,,,,410,889,889,889,889,889,889,889,889,889,889,889,889,,889,889', '889,,889,889,889,889,889,410,410,410,410,410,410,410,410,410,410,410', ',410,410,,,410,410,,889,,,889,,,889,889,,,889,,889,410,,410,889,410', '410,,410,410,410,410,410,889,410,,,,889,889,889,889,,889,889,889,889', ',,,,889,889,,410,,,,,889,,889,889,889,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,429,429,429,429,429,429,429,429,429,429', '429,,429,429,,,429,429,,301,,,301,,,301,301,,,301,,301,429,,429,301', '429,429,,429,429,429,429,429,301,429,,,,301,301,301,301,,301,301,301', '301,,,,,301,301,,429,,,,,301,,301,301,301,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,474,474,474,474,474,474,474,474,474', '474,474,,474,474,,,474,474,,296,,,296,,,296,296,,,296,,296,474,,474', '296,474,474,,474,474,474,474,474,296,474,,,,296,296,296,296,,296,296', '296,296,,,,,296,296,474,474,,,,,296,,296,296,296,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,521,521,521,521,521,521,521,521', '521,521,521,,521,521,,,521,521,,888,,,888,,,888,888,,,888,,888,521,', '521,888,521,521,,521,521,521,521,521,888,521,,,,888,888,888,888,,888', '888,888,888,,,,,888,888,,521,,,,,888,,888,888,888,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,678,678,678,678,678,678,678,678', '678,678,678,,678,678,,,678,678,,648,,,648,,,648,648,,,648,,648,678,', '678,648,678,678,,678,678,678,678,678,648,678,,,,648,648,648,648,,648', '648,648,648,,,,,648,648,,678,,,,,648,,648,648,648,0,0,0,0,0,0,,,,0,0', ',,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0', '0,0,,0,0,0,,0,0,0,0,0,21,21,21,21,21,21,21,21,21,21,21,,21,21,,,21,21', ',0,,,0,,,0,0,,,0,,0,21,,21,0,21,21,,21,21,21,21,21,0,21,,,,0,0,0,0,', '0,0,0,0,,,,,0,0,,21,,,,,0,,0,0,0,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,754,754,754,754,754,754,754,754,754,754,754', ',754,754,,,754,754,,591,,,591,,,591,591,,,591,,591,754,,754,591,754', '754,,754,754,754,754,754,591,754,,,,591,591,591,591,,591,591,591,591', ',,,,591,591,,754,,,,,591,,591,591,591,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,759,759,759,759,759,759,759,759,759,759', '759,,759,759,,,759,759,,231,,,231,,,231,231,,,231,,231,759,,759,231', '759,759,,759,759,759,759,759,231,759,,,,231,231,231,231,,231,231,231', '231,,,,,231,231,,759,,,,,231,,231,231,231,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,761,761,761,761,761,761,761,761,761', '761,761,,761,761,,,761,761,,571,,,571,,,571,571,,,571,,571,761,,761', '571,761,761,,761,761,761,761,761,571,761,,,,571,571,571,571,,571,571', '571,571,,,,,571,571,,761,,,,,571,,571,571,571,881,881,881,881,881,881', ',,,881,881,,,,881,,881,881,881,881,881,881,881,,,,,,881,881,881,881', '881,881,881,,,881,,,,,,881,881,881,881,881,881,881,881,881,881,881,881', ',881,881,881,,881,881,881,881,881,764,764,764,764,764,764,764,764,764', '764,764,,764,764,,,764,764,,881,,,881,,,881,881,,,881,,881,764,,764', '881,764,764,,764,764,764,764,764,881,764,,,,881,881,881,881,,881,881', '881,881,,,,,881,881,,764,,,,,881,,881,881,881,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,766,766,766,766,766,766,766,766,766', '766,766,,766,766,,,766,766,,848,,,848,,,848,848,,,848,,848,766,,766', '848,766,766,,766,766,766,766,766,848,766,,,,848,848,848,848,,848,848', '848,848,,,,,848,848,,766,,,,,848,,848,848,848,842,842,842,842,842,842', ',,,842,842,,,,842,,842,842,842,842,842,842,842,,,,,,842,842,842,842', '842,842,842,,,842,,,,,,842,842,842,842,842,842,842,842,842,842,842,842', ',842,842,842,,842,842,842,842,842,768,768,768,768,768,768,768,768,768', '768,768,,768,768,,,768,768,,842,,,842,,,842,842,,,842,,842,768,,768', '842,768,768,,768,768,768,768,768,842,768,,,,842,842,842,842,,842,842', '842,842,,,,,842,842,,768,,,,,842,,842,842,842,568,568,568,568,568,568', ',,,568,568,,,,568,,568,568,568,568,568,568,568,,,,,,568,568,568,568', '568,568,568,,,568,,,,,,568,568,568,568,568,568,568,568,568,568,568,568', ',568,568,568,,568,568,568,568,568,857,857,857,857,857,857,857,857,857', '857,857,,857,857,,,857,857,,568,,,568,,,568,568,,,568,,568,857,,857', '568,857,857,,857,857,857,857,857,568,857,,,,568,568,568,568,,568,568', '568,568,,,,,568,568,,857,,,,,568,,568,568,568,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,805,860,860,860,860,860,860,860,860,860', '860,860,,860,860,,,860,860,,805,,,805,,,805,805,,,805,,805,860,,860', '805,860,860,,860,860,860,860,860,805,860,,,,805,805,805,805,,805,805', '805,805,,,,,805,805,,860,,,,,805,,805,805,805,839,839,839,839,839,839', ',,,839,839,,,,839,,839,839,839,839,839,839,839,,,,,,839,839,839,839', '839,839,839,,,839,,,,,,839,839,839,839,839,839,839,839,839,839,839,839', ',839,839,839,,839,839,839,839,839,276,276,276,276,276,276,276,276,276', '276,276,,276,276,,,276,276,,839,,,839,,,839,839,,,839,,839,276,,276', '839,276,276,,276,276,276,276,276,839,276,,,,839,839,839,839,,839,839', '839,839,,,,,839,839,,276,,,,,839,,839,839,839,838,838,838,838,838,838', ',,,838,838,,,,838,,838,838,838,838,838,838,838,,,,,,838,838,838,838', '838,838,838,,,838,,,,,,838,838,838,838,838,838,838,838,838,838,838,838', ',838,838,838,,838,838,838,838,838,465,465,465,465,465,465,465,,,465', '465,,,,,,465,465,,838,,,838,,,838,838,,,838,,838,465,,465,838,465,465', ',465,465,465,465,465,838,465,,,,838,838,838,838,,838,838,838,838,,,', ',838,838,,,,,,,838,,838,838,838,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,449,449,449,449,449,449,449,449,449,449,449', ',449,449,,,449,449,,500,,,500,,,500,500,,,500,,500,449,,449,500,449', '449,,449,449,449,449,449,500,449,,,,500,500,500,500,,500,500,500,500', ',,,,500,500,,,,,,,500,,500,500,500,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,463,,,,,,,,,,,,,,,,463,463,,792,,,792,,,792', '792,,,792,,792,463,,463,792,463,463,,463,463,,,463,792,463,,,,792,792', '792,792,,792,792,792,792,,,,,792,792,,,,,,,792,,792,792,792,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,744,744,744,744', '744,744,744,744,,744,744,744,,744,744,744,744,744,462,,,,,,,,,,,,,,', ',462,462,,744,,,744,,,744,744,,,744,,744,462,,462,744,462,462,,462,462', ',,462,744,462,,,,744,744,744,744,,744,744,744,744,,,,,744,744,,,,,,', '744,,744,744,744,964,964,964,964,964,964,,,,964,964,,,,964,,964,964', '964,964,964,964,964,,,,,,964,964,964,964,964,964,964,,,964,,,,,,964', '964,964,964,964,964,964,964,964,964,964,964,,964,964,964,,964,964,964', '964,964,461,,,,,,,,,,,,,,,,461,461,,964,,,964,,,964,964,,,964,,964,461', ',461,964,461,461,,461,461,,,461,964,461,,,,964,964,964,964,,964,964', '964,964,,,,,964,964,,,,,,,964,,964,964,964,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,468,468,468,468,468,468,468,,,468,468', ',,,,,468,468,,734,,,734,,,734,734,,,734,,734,468,,468,734,468,468,,468', '468,468,468,468,734,468,,,,734,734,734,734,,734,734,734,734,,,,,734', '734,,,,,,,734,,734,734,734,730,730,730,730,730,730,,,,730,730,,,,730', ',730,730,730,730,730,730,730,,,,,,730,730,730,730,730,730,730,,,730', ',,,,,730,730,730,730,730,730,730,730,730,730,730,730,,730,730,730,,730', '730,730,730,730,467,467,467,467,467,467,467,,,467,467,,,,,,467,467,', '730,,,730,,,730,730,,,730,,730,467,,467,730,467,467,,467,467,467,467', '467,730,467,,,,730,730,730,730,,730,730,730,730,,,,,730,730,,,,,,,730', ',730,730,730,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,460,460,460,460,460,460,460,,,460,460,,,,,,460,460,,654,,,654,,', '654,654,,,654,,654,460,,460,654,460,460,,460,460,460,460,460,654,460', ',,,654,654,654,654,,654,654,654,654,,,,,654,654,,,,,,,654,,654,654,654', '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,466,466,466', '466,466,466,466,,,466,466,,,,,,466,466,,653,,,653,,,653,653,,,653,,653', '466,,466,653,466,466,,466,466,466,466,466,653,466,,,,653,653,653,653', ',653,653,653,653,,,,,653,653,,,,,,,653,,653,653,653,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,966,472,472,472,472,472,472,472', ',,472,472,,,,,,472,472,,966,,,966,,,966,966,,,966,,966,472,,472,966', '472,472,,472,472,472,472,472,966,472,,,,966,966,966,966,,966,966,966', '966,,,,,966,966,,,,,,,966,,966,966,966,958,958,958,958,958,958,,,,958', '958,,,,958,,958,958,958,958,958,958,958,,,,,,958,958,958,958,958,958', '958,,,958,,,,,,958,958,958,958,958,958,958,958,958,958,958,958,,958', '958,958,,958,958,958,958,958,473,473,473,473,473,473,473,473,,473,473', ',,,,,473,473,,958,,,958,,,958,958,,,958,,958,473,,473,958,473,473,,473', '473,473,473,473,958,473,,,,958,958,958,958,,958,958,958,958,,,,,958', '958,,,,,,,958,,958,958,958,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,469,469,469,469,469,469,469,,,469,469,,,,,,469,469,', '121,,,121,,,121,121,,,121,,121,469,,469,121,469,469,,469,469,469,469', '469,121,469,,,,121,121,121,121,,121,121,121,121,,,,,121,121,,,,,,,121', ',121,121,121,326,326,326,326,326,326,,,,326,326,,,,326,,326,326,326', '326,326,326,326,,,,,,326,326,326,326,326,326,326,,,326,,,,,,326,326', '326,326,326,326,326,326,326,326,326,326,,326,326,326,,326,326,326,326', '326,450,450,450,450,450,450,450,450,450,450,450,,450,450,,,450,450,', '326,,,326,,,326,326,,,326,,326,450,,450,326,450,450,,450,450,450,450', '450,326,450,,,,326,326,326,326,,326,326,326,326,,,,,326,326,,,,,,,326', ',326,326,326,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,459,,,,,,,,,,,,,,,,459,459,,206,,,206,,,206,206,,,206,,206,459,', ',206,459,459,,459,459,,,,206,,,,,206,206,206,206,,206,206,206,206,,', ',,206,206,,,,216,216,216,206,216,206,206,206,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', '457,,,,,,,,,,,,,,,,457,457,,216,,,216,,,216,216,,,216,,,457,,457,216', '457,457,,457,457,,,,216,,,,,216,216,216,216,,216,216,216,216,,,,,216', '216,,,,,,,216,,216,216,216,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,', ',5,5,5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,458', ',,,,,,,,,,,,,,,458,458,,5,,,5,,,5,5,,,5,,5,458,,458,5,458,458,,458,458', ',,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,,20,20,20,5,20,5,5,5,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,,,,29,29,29,20,29,20,20,20,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,,,,,,29,,,,,29,29,29,29,,29,29,29,29,,,,,29,29,,,,30,30', '30,29,30,29,29,29,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,30,,,,31,31,31,30,31,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,,,,34,34,34,31,34,31,31,31,34,34,,,,34', ',34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34', '34,34,34,34,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,34,35,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,,,697,,697,697,697', '697,697,,,,,,,,,697,,35,35,35,35,,35,35,35,35,,,,,35,35,,,,35,,697,35', ',35,35,35,42,42,42,,42,697,697,,42,42,697,,,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,,,,43,43,43,42,43', '42,42,42,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,,,,44,44,44,43,44,43,43,43,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,,,,,44', '44,,,,59,59,59,44,59,44,44,44,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,59,,,,,59,59,,,,60,60,60', '59,60,59,59,59,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,60,,,,63,63,63,60,63,60,60,60,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,,,,,63,63,,,,64,64,64,63,64,63,63,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,,,,,64,64,,,,67', '67,67,64,67,64,64,64,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67,67,67', '67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67,,67,67', '67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67,,,,,,,,,67', ',,,,67,67,67,67,,67,67,67,67,,,,,67,67,67,,,,,67,67,,67,67,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,', '68,68,68,68,,,,,68,68,,,,69,69,69,68,69,68,68,68,69,69,,,,69,,69,69', '69,69,69,69,69,,,,,,69,69,69,69,69,69,69,,,69,,,,,,,69,,,69,69,69,69', '69,69,69,69,,69,69,69,,69,69,,,69,,,,,,,,,,,,,,,,,69,,,69,,,69,,,69', '69,,,69,,,,,,,,,,,,,,,,,,,,69,69,69,69,,69,69,69,69,,,,,69,69,,,,70', '70,70,69,70,69,69,69,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,,,974,,974,974,974,974', '974,,,,,,,,,974,,70,70,70,70,,70,70,70,70,,,,,70,70,,,,,,974,70,,70', '70,70,111,111,111,111,111,974,974,,111,111,974,,,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,,,,117,117,117,116,117,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,,,,118', '118,118,117,118,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,,,,119,119,119,118,119,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,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,,,,207,207,207', '120,207,120,120,120,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,,,,208,208,208,207,208,207,207,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,,,,,208,208,,,,209,209,209', '208,209,208,208,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,,209,209,209,209,,,,,209,209,,,,214,214,214,209,214,209,209,209', '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,214,215,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,,,,217,217,217,215,217,215,215,215', '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,217,218,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,,,,219,219,219,218,219,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,,,230,230,230,219,230,219,219,219,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,230,233,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', ',,,234,234,234,233,234,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,234,235,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,235,236,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,,,,237,237,237,236,237,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', ',,,238,238,238,237,238,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,,,,239,239,239,238,239,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', ',,,240,240,240,239,240,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,,,,241,241,241,240,241,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', ',,,242,242,242,241,242,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,,,,243,243,243,242,243,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', ',,,244,244,244,243,244,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,,,,245,245,245,244,245,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', ',,,246,246,246,245,246,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,,,,247,247,247,246,247,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', ',,,248,248,248,247,248,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,,,,249,249,249,248,249,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', ',,,250,250,250,249,250,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,,,,251,251,251,250,251,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', ',,,252,252,252,251,252,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,,,,253,253,253,252,253,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', ',,,254,254,254,253,254,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,,,,255,255,255,254,255,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', ',,,256,256,256,255,256,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,,,,257,257,257,256,257,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', ',,,258,258,258,257,258,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,,,,265,265,265,258,265,258,258,258', '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,,,,266,266,266,265,266,265,265,265,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,266,,,,274,274,274', '266,274,266,266,266,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,,,281,281,281,274,281,274,274,274', '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', ',,,283,283,283,281,283,281,281,281,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,283,286,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', ',,,287,287,287,286,287,286,286,286,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,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,,,,300,300,300,292,300,292,292,292,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,,,972,,972,972,972', '972,972,,,,,,,,,972,,300,300,300,300,,300,300,300,300,,,,,300,300,,', ',300,,972,300,,300,300,300,317,317,317,,317,972,972,,317,317,972,,,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,,,,325,325,325,317,325', '317,317,317,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,,,,327,327,327,325,327,325,325,325,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,,,,342,342,342,327', '342,327,327,327,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,,,,343,343,343,342,343,342,342,342,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,,,,362,362,362,343', '362,343,343,343,362,362,,,,362,,362,362,362,362,362,362,362,,,,,,362', '362,362,362,362,362,362,,,362,,,,,,,362,,,362,362,362,362,362,362,362', '362,,362,362,362,,362,362,362,362,362,,,,,,,,,,,,,,,,,,,,362,,,362,', ',362,362,,,362,,,,,,362,,,,,,,,,362,,,,,362,362,362,362,,362,362,362', '362,,,,,362,362,,,,378,378,378,362,378,362,362,362,378,378,,,,378,,378', '378,378,378,378,378,378,,,,,,378,378,378,378,378,378,378,,,378,,,,,', ',378,,,378,378,378,378,378,378,378,378,,378,378,378,,378,378,378,378', '378,,,,,,,,,,,,,,,,,,,,378,,,378,,,378,378,,,378,,,,,,378,,,,,,,,,378', ',,,,378,378,378,378,,378,378,378,378,,,,,378,378,,,,406,406,406,378', '406,378,378,378,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,406,406,,406,406,406', '406,,,,,406,406,,,,444,444,444,406,444,406,406,406,444,444,,,,444,,444', '444,444,444,444,444,444,,,,,,444,444,444,444,444,444,444,,,444,,,,,', ',444,,,444,444,444,444,444,444,444,444,444,444,444,444,,444,444,444', '444,444,,,,,,,,,,,,,,,,,,,,444,,,444,,,444,444,,,444,,444,,444,,444', ',,444,,,,,,444,,,,,444,444,444,444,,444,444,444,444,,,,,444,444,,,,446', '446,446,444,446,444,444,444,446,446,,,,446,,446,446,446,446,446,446', '446,,,,,,446,446,446,446,446,446,446,,,446,,,,,,,446,,,446,446,446,446', '446,446,446,446,,446,446,446,,446,446,446,446,446,,,,,,,,,,,,,,,,,,', ',446,,,446,,,446,446,,,446,,,,,,446,,,,,,,,,446,,,,,446,446,446,446', ',446,446,446,446,,,,,446,446,,,,447,447,447,446,447,446,446,446,447', '447,,,,447,,447,447,447,447,447,447,447,,,,,,447,447,447,447,447,447', '447,,,447,,,,,,,447,,,447,447,447,447,447,447,447,447,,447,447,447,', '447,447,447,447,447,,,,,,,,,,,,,,,,,,,,447,,,447,,,447,447,,,447,,,', ',,447,,,,,,,,,447,,,,,447,447,447,447,,447,447,447,447,,,,,447,447,', ',,448,448,448,447,448,447,447,447,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,448,448,,448,448,448,448,448,,,,,,,,,,,,,,', ',,,,,448,,,448,,,448,448,,,448,,,,,,448,,,,,,,,,448,,,,,448,448,448', '448,,448,448,448,448,,,,,448,448,,,,488,488,488,448,488,448,448,448', '488,488,,,,488,,488,488,488,488,488,488,488,,,,,,488,488,488,488,488', '488,488,,,488,,,,,,,488,,,488,488,488,488,488,488,488,488,488,488,488', '488,,488,488,488,488,488,,,,,,,,,,,,,,,,,,,,488,,,488,,,488,488,,,488', ',488,,488,,488,,,488,,,,,,488,,,,,488,488,488,488,,488,488,488,488,', ',,,488,488,,,,490,490,490,488,490,488,488,488,490,490,,,,490,,490,490', '490,490,490,490,490,,,,,,490,490,490,490,490,490,490,,,490,,,,,,,490', ',,490,490,490,490,490,490,490,490,490,490,490,490,,490,490,490,490,490', ',,,,,,,,,,,,,,,,,,,490,,,490,,,490,490,,,490,,,,490,,490,,,490,,,,,', '490,,,,,490,490,490,490,,490,490,490,490,,,,,490,490,,,,492,492,492', '490,492,490,490,490,492,492,,,,492,,492,492,492,492,492,492,492,,,,', ',492,492,492,492,492,492,492,,,492,,,,,,,492,,,492,492,492,492,492,492', '492,492,,492,492,492,,492,492,492,492,492,,,,,,,,,,,,,,,,,,,,492,,,492', ',,492,492,,,492,,,,,,492,,,,,,,,,492,,,,,492,492,492,492,,492,492,492', '492,,,,,492,492,,,,,,,492,,492,492,492,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,,,,,,498,498,,498,498,498,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,506,506,,,,,506,506,,,,508,508,508,506,508,506,506', '506,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,,,,514,514,514,508,514,508,508,508,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,,,,517,517,517,514,517,514,514', '514,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', ',,,518,518,518,517,518,517,517,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,518,518,,518,518,518,518,518,,,,,,,,,,,,,,', ',,,,,518,,,518,,,518,518,,,518,,,,,,518,,,,,,,,,518,,,,,518,518,518', '518,,518,518,518,518,,,,,518,518,,,,522,522,522,518,522,518,518,518', '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', ',,,528,528,528,522,528,522,522,522,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,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,,,,531,531,531,528,531,528', '528,528,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,,,,556,556,556,531,556,531,531,531,556,556,,,,556,,556,556', '556,556,556,556,556,,,,,,556,556,556,556,556,556,556,,,556,,,,,,,556', ',,556,556,556,556,556,556,556,556,,556,556,556,,556,556,556,556,556', ',,,,,,,,,,,,,,,,,,,556,,,556,,,556,556,,,556,,,,,,556,,,,,,,,,556,,', ',,556,556,556,556,,556,556,556,556,,,,,556,556,,,,576,576,576,556,576', '556,556,556,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,576', ',,,,576,576,,,,577,577,577,576,577,576,576,576,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,,577,,,577,,', ',,,577,,,,,577,577,577,577,,577,577,577,577,,,,,577,577,,,,587,587,587', '577,587,577,577,577,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,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,,,,619,619,619,587,619,587,587,587', '619,619,,,,619,,619,619,619,619,619,619,619,,,,,,619,619,619,619,619', '619,619,,,619,,,,,,,619,,,619,619,619,619,619,619,619,619,,619,619,619', ',619,619,619,619,619,,,,,,,,,,,,,,,,,,,,619,,,619,,,619,619,,,619,,619', ',,,619,,,,,,,,,619,,,,,619,619,619,619,,619,619,619,619,,,,,619,619', ',,,620,620,620,619,620,619,619,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,,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,,,,623,623,623,620,623,620,620,620', '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,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,,,,624,624,624,623,624,623,623,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,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,624,,,,625,625,625', '624,625,624,624,624,625,625,,,,625,,625,625,625,625,625,625,625,,,,', ',625,625,625,625,625,625,625,,,625,,,,,,,625,,,625,625,625,625,625,625', '625,625,,625,625,625,,625,625,625,625,625,,,,,,,,,,,,,,,,,,,,625,,,625', ',,625,625,,,625,,,,,,625,,,,,,,,,625,,,,,625,625,625,625,,625,625,625', '625,,,,,625,625,,,,626,626,626,625,626,625,625,625,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,626,,626,626,626,626', '626,,,,,,,,,,,,,,,,,,,,626,,,626,,,626,626,,,626,,,,,,626,,,,,,,,,626', ',,,,626,626,626,626,,626,626,626,626,,,,,626,626,,,,630,630,630,626', '630,626,626,626,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,630,631,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,,,,634,634,634,631', '634,631,631,631,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,634,635,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,,,,659,659,659,635', '659,635,635,635,659,659,,,,659,,659,659,659,659,659,659,659,,,,,,659', '659,659,659,659,659,659,,,659,,,,,,,659,,,659,659,659,659,659,659,659', '659,,659,659,659,,659,659,659,659,659,,,,,,,,,,,,,,,,,,,,659,,,659,', ',659,659,,,659,,,,,,659,,,,,,,,,659,,,,,659,659,659,659,,659,659,659', '659,,,,,659,659,,,,662,662,662,659,662,659,659,659,662,662,,,,662,,662', '662,662,662,662,662,662,,,,,,662,662,662,662,662,662,662,,,662,,,,,', ',662,,,662,662,662,662,662,662,662,662,,662,662,662,,662,662,662,662', '662,,,,,,,,,,,,,,,,,,,,662,,,662,,,662,662,,,662,,,,,,662,,,,,,,,,662', ',,,,662,662,662,662,,662,662,662,662,,,,,662,662,,,,666,666,666,662', '666,662,662,662,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', ',,,677,677,677,666,677,666,666,666,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,,,,682,682,682,677,682,677,677,677,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,682,,,,699,699,699', '682,699,682,682,682,699,699,,,,699,,699,699,699,699,699,699,699,,,,', ',699,699,699,699,699,699,699,,,699,,,,,,,699,,,699,699,699,699,699,699', '699,699,,699,699,699,,699,699,699,699,699,,,,,,,,,,,,,,,,,,,,699,,,699', ',,699,699,,,699,,,,,,699,,,,,,,,,699,,,,,699,699,699,699,,699,699,699', '699,,,,,699,699,,,,725,725,725,699,725,699,699,699,725,725,,,,725,,725', '725,725,725,725,725,725,,,,,,725,725,725,725,725,725,725,,,725,,,,,', ',725,,,725,725,725,725,725,725,725,725,,725,725,725,,725,725,725,725', '725,,,,,,,,,,,,,,,,,,,,725,,,725,,,725,725,,,725,,,,,,725,,,,,,,,,725', ',,,,725,725,725,725,,725,725,725,725,,,,,725,725,,,,731,731,731,725', '731,725,725,725,731,731,,,,731,,731,731,731,731,731,731,731,,,,,,731', '731,731,731,731,731,731,,,731,,,,,,,731,,,731,731,731,731,731,731,731', '731,,731,731,731,,731,731,731,731,731,,,,,,,,,,,,,,,,,,,,731,,,731,', ',731,731,,,731,,,,,,731,,,,,,,,,731,,,,,731,731,731,731,,731,731,731', '731,,,,,731,731,,,,753,753,753,731,753,731,731,731,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,,,,755,755,755,753', '755,753,753,753,755,755,,,,755,,755,755,755,755,755,755,755,,,,,,755', '755,755,755,755,755,755,,,755,,,,,,,755,,,755,755,755,755,755,755,755', '755,,755,755,755,,755,755,755,755,755,,,,,,,,,,,,,,,,,,,,755,,,755,', ',755,755,,,755,,,,,,755,,,,,,,,,755,,,,,755,755,755,755,,755,755,755', '755,,,,,755,755,,,,769,769,769,755,769,755,755,755,769,769,,,,769,,769', '769,769,769,769,769,769,,,,,,769,769,769,769,769,769,769,,,769,,,,,', ',769,,,769,769,769,769,769,769,769,769,,769,769,769,,769,769,769,769', '769,,,,,,,,,,,,,,,,,,,,769,,,769,,,769,769,,,769,,,,,,769,,,,,,,,,769', ',,,,769,769,769,769,,769,769,769,769,,,,,769,769,,,,770,770,770,769', '770,769,769,769,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,,,,771,771,771,770,771,770,770,770,771,771,,,,771,,771', '771,771,771,771,771,771,,,,,,771,771,771,771,771,771,771,,,771,,,,,', ',771,,,771,771,771,771,771,771,771,771,,771,771,771,,771,771,771,771', '771,,,,,,,,,,,,,,,,,,,,771,,,771,,,771,771,,,771,,,,,,771,,,,,,,,,771', ',,,,771,771,771,771,,771,771,771,771,,,,,771,771,,,,772,772,772,771', '772,771,771,771,772,772,,,,772,,772,772,772,772,772,772,772,,,,,,772', '772,772,772,772,772,772,,,772,,,,,,,772,,,772,772,772,772,772,772,772', '772,,772,772,772,,772,772,772,772,772,,,,,,,,,,,,,,,,,,,,772,,,772,', ',772,772,,,772,,,,,,772,,,,,,,,,772,,,,,772,772,772,772,,772,772,772', '772,,,,,772,772,,,,774,774,774,772,774,772,772,772,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,,,,786,786,786,774', '786,774,774,774,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', ',,,836,836,836,786,836,786,786,786,836,836,,,,836,,836,836,836,836,836', '836,836,,,,,,836,836,836,836,836,836,836,,,836,,,,,,,836,,,836,836,836', '836,836,836,836,836,,836,836,836,,836,836,836,836,836,,,,,,,,,,,,,,', ',,,,,836,,,836,,,836,836,,,836,,,,,,836,,,,,,,,,836,,,,,836,836,836', '836,,836,836,836,836,,,,,836,836,,,,841,841,841,836,841,836,836,836', '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,841,841,841,,841,841,841,841,,,,,841,841', ',,,858,858,858,841,858,841,841,841,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', '858,858,858,,858,858,858,858,,,,,858,858,,,,859,859,859,858,859,858', '858,858,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,859,859,859,,859,859,859,859,,,,', '859,859,,,,873,873,873,859,873,859,859,859,873,873,,,,873,,873,873,873', '873,873,873,873,,,,,,873,873,873,873,873,873,873,,,873,,,,,,,873,,,873', '873,873,873,873,873,873,873,,873,873,873,,873,873,,,873,,,,,,,,,,,,', ',,,,,,,873,,,873,,,873,873,,,873,,,,,,,,,,,,,,,,,,,,873,873,873,873', ',873,873,873,873,,,,,873,873,,,,885,885,885,873,885,873,873,873,885', '885,,,,885,,885,885,885,885,885,885,885,,,,,,885,885,885,885,885,885', '885,,,885,,,,,,,885,,,885,885,885,885,885,885,885,885,,885,885,885,', '885,885,,,885,,,,,,,,,,,,,,,,,,,,885,,,885,,,885,885,,,885,,,,,,,,,', ',,,,,,,,,,885,885,885,885,,885,885,885,885,,,,,885,885,,,,982,982,982', '885,982,885,885,885,982,982,,,,982,,982,982,982,982,982,982,982,,,,', ',982,982,982,982,982,982,982,,,982,,,,,,,982,,,982,982,982,982,982,982', '982,982,982,982,982,982,,982,982,982,982,982,,,,,,,,,,,,,,,,,,,,982', ',,982,,,982,982,,,982,,982,,982,,982,,,982,,,,,,982,,,,,982,982,982', '982,,982,982,982,982,,,,,982,982,,,,,,,982,,982,982,982,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,9,9,,,9,9,,,,,,,,,,,,,,9,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', '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,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,,,397,397,,,,397,397,397,397,,,,,,,,,,,,,,397,397', ',397,397,397,397,397,397,397,397,397,397,397,397,,,397,397,,,,,,,,,', ',,,,397,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8', '8,8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8', '8,,,,8,8,8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8,8,,,8,8,,,,,,,', ',,,,,,8,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,', ',71,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,,,737,737,,,,737,737,737,737,,,,,,,,,,,,,,737', '737,,737,737,737,737,737,737,737,737,737,737,737,737,585,585,737,,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,520,520,585,,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,586,586,520,,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,510,510,586', ',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,510,509,509,510,,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,579,579,509,,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,261,261', '579,,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,984,984,261,,984,,,,,,,,984,984,,984,984,984,984,984,984', '984,,,984,984,,,,984,984,984,984,,,,,,984,,,,,,,,984,984,,984,984,984', '984,984,984,984,984,984,984,984,984,519,519,984,,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,210,210', '519,,210,,,,,,,,210,210,,210,210,210,210,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,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,937,937,211,,937,,,,,,,,937', '937,,937,937,937,937,937,937,937,,,937,937,,,,937,937,937,937,,,,,,937', ',,,,,,,937,937,,937,937,937,937,937,937,937,937,937,937,937,937,443', '443,937,,443,,,,,,,,443,443,,443,443,443,443,443,443,443,,,443,443,', ',,443,443,443,443,,,,,,443,,,,,,,,443,443,,443,443,443,443,443,443,443', '443,443,443,443,443,442,442,443,,442,,,,,,,,442,442,,442,442,442,442', '442,442,442,,,442,442,,,,442,442,442,442,,,,,,442,,,,,,,,442,442,,442', '442,442,442,442,442,442,442,442,442,442,442,983,983,442,,983,,,,,,,', '983,983,,983,983,983,983,983,983,983,,,983,983,,,,983,983,983,983,,', ',,,983,,,,,,,,983,983,,983,983,983,983,983,983,983,983,983,983,983,983', '578,578,983,,578,,,,,,,,578,578,,578,578,578,578,578,578,578,,,578,578', ',,,578,578,578,578,,,,,,578,,,,,,,,578,578,,578,578,578,578,578,578', '578,578,578,578,578,578,,695,578,695,695,695,695,695,,693,,693,693,693', '693,693,695,,,,,,,,693,,970,,970,970,970,970,970,,,,,,695,,,970,,,,', '693,695,695,695,695,,,,695,693,693,693,693,,,,693,970,,988,,988,988', '988,988,988,,,970,970,,,,970,988,,864,,864,864,864,864,864,,866,,866', '866,866,866,866,864,,,,,988,,,866,,,,,,,,988,988,,,,988,864,,,,,,,,866', '864,864,864,864,,,,864,866,866,866,866,,,868,866,868,868,868,868,868', ',735,,735,735,735,735,735,868,,,,,,,,735,,1014,,1014,1014,1014,1014', '1014,,,,,,868,,,1014,,,,,735,,,868,868,,,,868,735,735,735,735,,,,735', '1014,,736,,736,736,736,736,736,,,1014,1014,,,,1014,736,,536,,536,536', '536,536,536,,892,,892,892,892,892,892,536,,,,,736,,,892,,,,,,736,736', '736,736,,,,736,536,,,,,,,,892,536,536,536,536,,,,536,892,892,892,892', ',,894,892,894,894,894,894,894,896,,896,896,896,896,896,898,894,898,898', '898,898,898,,896,,,,,,,898,,,,,,,,894,,,,,,,896,,,,894,894,,898,,894', ',896,896,,,,896,,898,898,,,,898' ] racc_action_check = arr = ::Array.new(25178, 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 = [ 2645, 916, nil, 219, nil, 6135, 1006, 927, 23498, 23114, 388, nil, 59, -25, 850, 121, 1012, 245, nil, -74, 6266, 2645, 1033, nil, 586, nil, 254, 746, 1014, 6397, 6528, 6659, nil, 1805, 6790, 6921, nil, 805, -83, 485, 827, 169, 7060, 7191, 7322, 734, 718, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1394, nil, -35, 7453, 7584, -21, nil, 7715, 7846, nil, nil, 7977, 8116, 8247, 8378, 23626, nil, nil, nil, nil, nil, 333, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 220, nil, nil, 608, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1150, nil, 8517, nil, nil, nil, nil, 8656, 8787, 8918, 9049, 9188, 5585, nil, 472, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 860, nil, 5865, 9319, 9450, 9581, 24349, 24410, nil, nil, 9712, 9843, 5996, 9974, 10105, 10236, nil, nil, 882, -63, 71, 156, 299, 79, 149, nil, 10367, 2925, 216, 10498, 10629, 10760, 10891, 11022, 11153, 11284, 11415, 11546, 11677, 11808, 11939, 12070, 12201, 12332, 12463, 12594, 12725, 12856, 12987, 13118, 13249, 13380, 13511, 13642, 13773, nil, nil, 24166, nil, nil, 431, 13904, 14035, nil, nil, nil, nil, nil, nil, nil, 14166, nil, 3905, nil, 422, 426, nil, 14297, 493, 14428, nil, nil, 14559, 14690, nil, nil, -81, nil, 14829, 868, 492, 463, 2225, 481, 524, 486, 14960, 2085, 986, 1094, 1098, 606, 1134, nil, 599, 559, 10, nil, nil, nil, 610, 273, 570, 15099, nil, 509, 690, 1137, nil, 806, nil, 15230, 5725, 15361, 922, nil, 291, 287, 979, 961, 322, 989, nil, nil, 1549, 486, 33, 32, 15492, 15623, 226, 630, 519, 4, -19, 481, 721, 39, 640, nil, nil, 846, 982, 187, nil, 576, nil, 258, 15754, nil, nil, nil, -57, 253, 451, 485, 514, 515, 554, 578, 581, nil, 582, nil, 15885, nil, 408, 394, 391, 464, 363, -30, -34, 461, nil, nil, nil, nil, nil, nil, nil, nil, 584, 23370, nil, nil, nil, nil, 471, nil, nil, 417, 16016, 381, nil, nil, 1945, 378, nil, 372, -32, 347, 140, 1126, nil, nil, nil, 110, 0, 1013, nil, nil, 1258, 878, nil, 2085, nil, 922, nil, nil, 1665, nil, nil, nil, nil, 240, nil, 953, 24593, 24532, 16147, 310, 16278, 16409, 16540, 4185, 5725, 627, 646, 913, 911, 903, 875, 5996, 6135, 5865, 5025, 4605, 4465, 4325, 1343, 4045, 5165, 4885, 4745, 5585, 931, 795, 5305, 5445, 2225, 206, 1530, nil, nil, nil, nil, 575, nil, -50, 165, 577, nil, nil, 16671, nil, 16802, nil, 16933, nil, 332, nil, nil, nil, 17072, 1118, 4185, 601, 601, nil, nil, 603, 17211, 617, 17342, 24044, 23983, 757, 674, nil, 17473, 641, nil, 17604, 17735, 24288, 23861, 2365, 17866, 773, 772, -4, 694, nil, 17997, nil, nil, 18128, nil, nil, nil, nil, 24999, nil, 665, 666, nil, 670, 676, 699, nil, nil, nil, nil, nil, nil, nil, nil, 694, 1190, nil, nil, 18259, nil, nil, nil, 805, nil, nil, nil, 811, nil, nil, 812, 3625, 853, nil, 3065, 25, -14, 853, 861, 18390, 18521, 24715, 24105, -18, nil, nil, 790, nil, 23800, 23922, 18652, nil, nil, 346, 2785, 800, nil, 154, nil, nil, nil, 614, nil, nil, nil, 776, nil, nil, 369, nil, 367, nil, nil, 768, nil, 778, nil, nil, nil, 23242, nil, 780, 18783, 18914, 418, 828, 19045, 19176, 19307, 19438, 828, nil, nil, 19569, 19700, 832, nil, 19831, 19962, nil, nil, 199, 386, 470, 332, 806, 1805, 805, nil, 1494, nil, 2505, 913, -8, -22, nil, 5165, 5025, nil, 830, nil, 877, 20093, nil, nil, 20224, nil, 854, 62, 20355, 837, nil, 843, 248, 234, 893, 135, 791, 905, 862, 20486, 2505, 940, 264, 1002, 20617, nil, 887, nil, 369, 60, 888, 666, nil, nil, 530, 24785, nil, 24777, nil, 6968, nil, 20748, nil, 1256, nil, 892, 333, 901, nil, nil, nil, nil, 612, nil, 1018, nil, nil, nil, nil, 1029, nil, 136, 912, 41, 40, 65, 5, 20879, 754, 1022, nil, 928, 4885, 21010, nil, 1055, 4745, 24926, 24982, 23739, nil, nil, nil, nil, nil, nil, 4465, nil, nil, nil, nil, nil, nil, nil, 934, 21141, 2785, 21272, nil, 939, nil, 2925, nil, 3065, nil, nil, 3205, nil, 3345, nil, 3485, 21403, 21534, 21665, 21796, -85, 21927, 972, 976, nil, 980, 985, 996, nil, 1021, 1001, 997, 993, 22058, nil, nil, 1128, nil, nil, 4325, 1030, 1137, nil, nil, nil, nil, 1015, 246, nil, nil, 1146, nil, 3765, 1044, 1092, nil, nil, 1090, nil, nil, nil, nil, 1091, 1050, nil, nil, nil, 1051, 1052, nil, 1053, 1055, nil, 1056, nil, nil, 1060, 947, 1073, 1119, nil, 1, nil, 22189, 44, 4045, 3905, nil, 22320, 3485, -5, 71, nil, 166, 182, 3345, nil, 258, 181, -73, nil, 192, 188, nil, 3625, 22451, 22582, 3765, 701, nil, nil, 24858, nil, 24866, nil, 24918, nil, nil, 322, 753, 22713, 919, 405, nil, 372, nil, nil, nil, 3205, nil, nil, 36, 22844, nil, nil, 2365, 1945, nil, nil, 25007, nil, 25059, nil, 25066, nil, 25073, nil, nil, nil, nil, 393, 1251, 434, nil, -1, nil, 585, 587, nil, 235, nil, nil, nil, 624, nil, nil, nil, 620, nil, 809, nil, nil, 866, 264, 303, 142, nil, 567, nil, -99, nil, nil, nil, 649, 24471, nil, nil, nil, 1665, 6, 26, 684, 672, 10, nil, 624, 743, 631, 636, 642, 645, 664, 1323, 712, 739, 5445, nil, nil, nil, nil, nil, 4605, nil, 5305, nil, 1530, nil, 24802, nil, 15007, nil, 8425, nil, nil, nil, 586, 836, 837, 922, 22975, 24654, 24227, 9, nil, nil, 24841, nil, nil, nil, nil, 1261, 886, 596, 1053, 1059, 936, 944, 945, 962, nil, nil, 970, 34, 35, 69, 120, 247, 260, nil, nil, nil, 24943, nil, nil, nil, nil, -10, nil, 798, nil ] racc_action_default = [ -3, -598, -1, -584, -4, -598, -7, -598, -598, -598, -598, -29, -598, -598, -598, -279, -598, -40, -43, -586, -598, -48, -50, -51, -52, -56, -256, -256, -256, -293, -328, -329, -68, -11, -72, -80, -82, -598, -488, -489, -598, -598, -598, -598, -598, -586, -237, -270, -271, -272, -273, -274, -275, -276, -277, -278, -572, -281, -283, -597, -562, -301, -389, -598, -598, -306, -309, -584, -598, -598, -598, -598, -330, -331, -429, -430, -431, -432, -433, -454, -436, -437, -456, -458, -441, -446, -450, -452, -468, -456, -470, -472, -473, -474, -475, -570, -477, -478, -571, -480, -481, -482, -483, -484, -485, -486, -487, -492, -493, -598, -2, -585, -593, -594, -595, -6, -598, -598, -598, -598, -598, -3, -17, -598, -111, -112, -113, -114, -115, -116, -117, -118, -119, -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, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -22, -120, -11, -598, -598, -246, -598, -598, -582, -583, -598, -598, -598, -598, -598, -586, -587, -47, -598, -488, -489, -598, -279, -598, -598, -229, -598, -11, -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, -398, -400, -598, -580, -581, -57, -246, -598, -300, -404, -413, -415, -63, -410, -64, -586, -65, -238, -251, -260, -260, -255, -598, -261, -598, -454, -564, -598, -598, -66, -67, -584, -12, -598, -15, -598, -70, -11, -586, -598, -73, -76, -11, -88, -89, -598, -598, -96, -293, -296, -586, -598, -328, -329, -332, -411, -598, -78, -598, -84, -290, -471, -598, -214, -215, -230, -598, -11, -598, -586, -239, -590, -590, -598, -598, -590, -598, -302, -303, -520, -49, -598, -598, -598, -598, -584, -598, -585, -488, -489, -598, -598, -279, -598, -342, -343, -106, -107, -598, -109, -598, -279, -496, -598, -488, -489, -321, -111, -112, -153, -154, -155, -171, -176, -183, -186, -323, -598, -560, -598, -434, -598, -598, -598, -598, -598, -598, -598, -598, 1023, -5, -596, -23, -24, -25, -26, -27, -598, -598, -19, -20, -21, -121, -598, -30, -39, -266, -598, -598, -265, -31, -196, -586, -247, -260, -260, -573, -574, -256, -408, -575, -576, -574, -573, -256, -407, -409, -575, -576, -37, -204, -38, -598, -41, -42, -194, -261, -44, -45, -46, -586, -299, -598, -598, -598, -246, -290, -598, -598, -598, -205, -206, -207, -208, -209, -210, -211, -212, -216, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -231, -232, -233, -234, -586, -378, -256, -573, -574, -54, -58, -586, -257, -378, -378, -586, -295, -252, -598, -253, -598, -258, -598, -262, -598, -567, -569, -10, -585, -14, -3, -586, -69, -288, -85, -74, -598, -586, -246, -598, -598, -95, -598, -471, -598, -81, -86, -598, -598, -598, -598, -235, -598, -421, -598, -284, -598, -240, -592, -591, -242, -592, -291, -292, -563, -390, -520, -393, -559, -559, -503, -505, -505, -505, -519, -521, -522, -523, -524, -525, -526, -527, -528, -598, -530, -532, -534, -539, -541, -542, -544, -549, -551, -552, -554, -555, -556, -598, -11, -333, -334, -11, -598, -598, -598, -598, -598, -246, -598, -598, -290, -314, -106, -107, -108, -598, -598, -246, -317, -494, -598, -11, -498, -325, -586, -435, -455, -460, -598, -462, -438, -457, -598, -459, -440, -598, -443, -598, -445, -448, -598, -449, -598, -469, -8, -18, -598, -28, -269, -598, -598, -412, -598, -248, -250, -598, -598, -59, -245, -405, -598, -598, -61, -406, -598, -598, -298, -588, -573, -574, -573, -574, -586, -194, -598, -379, -586, -381, -11, -53, -401, -378, -243, -11, -11, -294, -260, -259, -263, -598, -565, -566, -598, -13, -598, -71, -598, -77, -83, -586, -573, -574, -244, -577, -94, -598, -79, -598, -203, -213, -586, -597, -597, -282, -586, -287, -590, -598, -586, -598, -501, -502, -598, -598, -512, -598, -515, -598, -517, -598, -344, -598, -346, -348, -355, -586, -533, -543, -553, -557, -597, -335, -597, -307, -336, -337, -310, -598, -313, -598, -586, -573, -574, -577, -289, -598, -106, -107, -110, -586, -11, -598, -319, -598, -11, -520, -520, -598, -561, -461, -464, -465, -466, -467, -11, -439, -442, -444, -447, -451, -453, -122, -267, -598, -197, -598, -589, -260, -33, -199, -34, -200, -60, -35, -202, -36, -201, -62, -195, -598, -598, -598, -598, -412, -598, -559, -559, -360, -362, -362, -362, -377, -598, -586, -383, -528, -536, -537, -547, -598, -403, -402, -11, -598, -598, -254, -264, -568, -16, -75, -412, -87, -297, -597, -340, -11, -422, -597, -423, -424, -598, -241, -391, -394, -396, -598, -559, -540, -558, -504, -505, -505, -531, -505, -505, -550, -505, -528, -545, -586, -598, -353, -598, -529, -598, -338, -598, -598, -11, -11, -312, -598, -11, -412, -598, -412, -598, -598, -11, -322, -598, -586, -598, -326, -598, -268, -32, -198, -249, -598, -236, -598, -358, -359, -368, -370, -598, -373, -598, -375, -380, -598, -598, -598, -535, -598, -399, -598, -414, -416, -9, -11, -428, -341, -598, -598, -426, -285, -11, -11, -392, -500, -598, -508, -598, -510, -598, -513, -598, -516, -518, -345, -347, -351, -598, -356, -304, -598, -305, -598, -598, -263, -597, -315, -318, -495, -598, -324, -497, -499, -498, -463, -559, -538, -361, -362, -362, -362, -362, -548, -362, -382, -586, -385, -387, -388, -546, -598, -290, -55, -427, -11, -488, -489, -598, -598, -279, -425, -598, -598, -505, -505, -505, -505, -349, -598, -354, -598, -11, -308, -311, -417, -418, -419, -11, -320, -11, -357, -598, -365, -598, -367, -598, -371, -598, -374, -376, -384, -598, -289, -577, -421, -246, -598, -598, -290, -395, -397, -598, -506, -509, -511, -514, -598, -352, -597, -598, -598, -362, -362, -362, -362, -386, -420, -586, -573, -574, -577, -289, -505, -350, -339, -316, -327, -598, -363, -366, -369, -372, -412, -507, -362, -364 ] clist = [ '218,329,411,524,26,313,313,210,299,26,375,127,127,277,277,277,114,262', '260,2,132,132,336,621,26,489,325,6,417,423,408,681,6,26,26,26,261,26', '430,313,313,313,433,340,341,130,130,344,568,571,268,272,657,575,657', '734,713,716,481,316,122,205,660,782,110,320,115,26,26,221,480,26,111', '834,127,822,537,297,584,476,114,264,271,273,380,544,295,515,339,339', '779,705,339,933,905,803,391,392,393,394,527,530,825,660,534,815,690', '691,880,902,935,591,381,605,607,26,278,278,278,387,26,26,26,26,26,26', '837,929,345,592,780,361,365,737,279,279,279,920,6,730,396,339,339,339', '339,648,330,395,6,275,288,289,964,653,654,725,839,781,343,838,489,342', '328,783,331,334,956,552,684,327,326,376,389,932,588,352,535,821,812', '823,338,687,337,333,888,700,889,657,657,601,603,606,606,277,475,601', '660,483,484,1002,871,961,807,884,379,377,650,382,383,1,26,26,26,26,427', '442,935,994,26,26,26,26,26,26,332,384,385,386,739,929,744,731,616,651', '418,26,902,642,820,829,397,436,437,438,439,404,822,354,817,277,277,923', '204,298,773,1010,403,409,277,663,417,423,848,428,432,,,,733,26,26,313', ',,688,,667,,26,,822,800,717,544,676,,,,313,494,512,516,,,407,,26,509', ',825,26,669,407,114,,26,728,,925,526,,,,,519,,,,,499,,792,572,573,505', ',962,672,913,,26,26,843,700,268,,831,672,272,513,501,845,578,862,863', '507,26,26,926,295,927,497,525,278,295,,822,114,1011,498,,278,,,,552', '26,339,339,262,720,279,,,,,950,,,279,729,,26,966,891,,482,590,593,,14', ',622,,485,14,672,,,,127,,795,594,672,574,,846,,132,222,850,,747,,747', ',,,222,222,222,657,14,304,304,402,842,277,,660,,,762,130,13,799,,767', ',13,628,440,,,,427,633,26,615,,298,998,222,222,644,811,222,349,359,359', '433,700,,700,,418,,13,,,,627,851,852,785,,313,632,,516,,544,544,,313', ',,516,1003,967,,277,,,,,486,,,628,14,26,795,26,808,222,222,222,222,14', '14,26,427,,,298,,,664,502,298,552,427,552,916,26,6,,,,649,,418,,954', '700,,,,,,,418,,,13,680,,,,,,,,13,13,,,,,277,,,552,552,,,,,,277,26,,', '26,,,,,,26,427,,,714,714,700,427,700,,26,941,656,,26,14,222,222,222', '335,,418,732,222,222,222,222,222,222,418,791,,,,958,1019,,,127,963,14', ',622,809,700,,784,132,26,26,,,686,26,26,,313,26,,516,13,,997,,790,,', '313,,622,801,26,130,,222,222,26,26,,,,636,719,222,810,13,,751,784,,', ',,758,760,853,,,763,765,,14,432,,,14,,,,304,14,,785,,785,628,,,633,', '622,,,652,844,,304,655,,622,847,,,,,14,222,,,,552,,,665,,,13,757,26', '668,13,222,222,26,26,13,,26,,127,,,,,882,,405,26,886,339,,222,,,435', '339,313,,26,,13,,,784,,,,222,407,,,,,,1004,,,,,,694,696,698,,,,,710', ',,712,,,,,26,785,,,,672,,16,856,,,,16,26,,,,,,,907,738,,,,491,,493,', ',495,496,,,,,,,222,,16,,,,26,,26,26,313,,26,,,,,,26,,,,313,714,,,915', '339,,,,919,,,789,,,353,,793,794,,,,,,,,,,,26,,,14,,14,,26,26,,,304,', '222,,,,,802,304,,,,,,,,222,977,16,,,,,,15,,,16,16,15,777,,833,,,,,13', '786,13,,983,,,427,,,,,26,618,,,,,,,15,306,306,,,14,,,14,26,,854,,277', '222,26,818,26,,818,,,,,222,,,,14,,,,622,26,427,351,360,360,,,,,,,,,', ',,,13,,,13,418,,16,,,877,,,222,222,,431,,222,222,,,222,883,13,,658,', '335,15,661,,16,,,,14,,15,15,,14,14,,,,,,,,901,,,,304,,909,910,893,895', '912,897,899,,900,304,658,,,335,,,918,,,,,,,,,13,,,,,13,13,,,,776,,16', '706,,,16,,940,,,16,,,,948,949,,,,,,222,435,,,,14,222,,,14,,15,,,16,', ',,,14,,816,,,,,818,,,777,222,777,,777,786,,15,786,,786,,786,,,752,778', '981,,658,335,13,,,,13,,,,,,,874,,995,13,,,14,,996,,,,,,989,990,991,992', ',14,,,,796,,,797,,,,,,,824,,826,15,,,,15,,,,306,15,806,,,,222,13,14', '14,,,14,,,,,306,14,828,13,,,,,,15,,777,1020,777,,777,,777,,786,,786', ',786,,786,936,,,,,,,,14,,13,13,944,,13,14,14,,,,13,,,,,,,,,39,855,777', ',,39,,,,16,786,16,,,,,922,,,776,,776,,776,13,,865,867,869,,,13,13,39', '303,303,,,,14,,,,,,,,,,,,,,,,,14,,,,,,14,,14,,,,348,364,364,364,,,,', ',,,16,222,,16,,13,,,,928,911,930,,,,,,,,,,,13,16,,,,335,13,,13,,39,', ',951,,952,38,953,,39,39,38,776,,776,15,776,15,776,,,,,306,,,,,,,,306', ',,431,,,,,38,302,302,,,,,,,16,,,,,16,16,,,,776,,,,969,971,973,975,,976', ',,,,,,347,363,363,363,,999,,1000,,1001,,15,,,15,,,,,,,39,,,,1009,,,', ',,,,,15,,,,,,,743,,38,,,39,,,,,1021,38,38,,,16,,,,16,1015,1016,1017', '1018,,,,,,16,,,,,,,,,,,,,,1022,,,,,,,15,,,,,15,15,,,,,,,,,,39,,306,', '39,,,,303,39,,16,,306,,,,,,,,,,,16,303,,,,,,38,,,39,,,,,,,,,,,,,,,,', ',,,,,38,16,16,,,16,,,,,15,16,,,15,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,16', ',,,947,,,16,16,,,,,,,,,38,,,,38,360,,,302,38,,15,,,,,,,,,,,,,15,302', ',,,,,,,,38,,,,,,,,,16,,,,,,,,,,,,,,15,15,,16,15,,,,,16,15,16,,,,,,,', ',,,,,,,,,,,,,39,,39,360,,,,,303,,,15,,,,946,303,,15,15,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,39,15,,39,,,,,,,,,,,,,,,15,,,,', '39,15,,15,,,,,,,,,,,,,,,,,,,,,38,,38,,,,,,302,,,,,,,,302,,,,,,,,,,,', ',,,,,39,,,,,39,39,,,,,,,,,,,,303,,,,,,,,,,,303,,,,,,,,38,,,38,,,,,,', ',,,,,,,,,,,,,38,,,,,,,,,,,,,,,,,,,,,,39,,,,39,,,,,,,,,,39,,,,,,,,,,', ',,,,,,,,,,38,,,,,38,38,,,,,,,,,,,,302,,,364,,,,,,39,,302,,,,,,,,,,,39', '229,,,,,,,,,276,276,276,,,,,,,,,,,322,323,324,,,,,,,,39,39,,,39,,,276', '276,38,39,,,38,,,,,,,,,,38,,,,,,,,,,,,364,,,,,,,,39,,,,943,,,39,39,', ',,,,,,,,,,,,363,,,,,,38,,,,,,,,,,,,,38,,,,,,,,,,,,,,,,,,,39,,,,,,,,', ',,,,,38,38,,39,38,,,,,39,38,39,,,,,,,,,,,,,,,,,,,,,,,,363,,,276,410', '276,,,38,,429,434,942,,,38,38,,,,,,,,,,229,,,449,450,451,452,453,454', '455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471', '472,473,474,,,,,,,276,276,,,,,,38,,276,,,,,,,276,,276,,,276,276,,38', ',,,,,38,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,521,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,429,643,410,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,276,,276,,276,,,,,,,,,,,,,,,,276,,,,,,,,,678,679,,,', ',,,,,,276,,,276,,,,,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,276,276', ',,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,754,,,276,276,759,761', ',,,764,766,,,643,768,,,,,,,,,,,,,,,,,,,,,,,,276,,,276,,,,,,,,,,,,,,', ',,,,,276,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,276,,857,,,,,,,,,,,,,,759,761,766,764,,860,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,', ',,,,,,,276,857,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',276' ] racc_goto_table = arr = ::Array.new(3061, 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 = [ '32,68,23,8,42,65,65,25,50,42,57,58,58,34,34,34,96,25,139,2,62,62,87', '24,42,74,32,7,38,38,28,10,7,42,42,42,37,42,28,65,65,65,18,17,17,61,61', '17,90,90,72,72,75,93,75,97,92,92,23,51,15,15,179,130,4,64,5,42,42,20', '40,42,6,91,58,170,138,47,55,38,96,39,39,39,152,164,46,52,30,30,127,117', '30,132,118,11,17,17,17,17,70,70,175,179,70,130,122,122,12,115,133,111', '153,156,156,42,69,69,69,153,42,42,42,42,42,42,11,176,4,112,128,56,56', '113,71,71,71,114,7,109,2,30,30,30,30,41,69,7,7,45,45,45,108,41,41,107', '106,119,105,104,74,103,102,125,71,71,118,169,101,100,99,98,5,131,95', '94,134,128,135,128,136,137,89,86,140,116,141,75,75,157,157,157,157,34', '142,157,179,144,145,132,130,146,147,148,151,85,73,154,155,1,42,42,42', '42,58,25,133,118,42,42,42,42,42,42,67,158,159,160,161,176,162,163,63', '43,72,42,115,23,168,117,31,30,30,30,30,29,170,19,172,34,34,173,16,9', '24,118,20,20,34,14,38,38,110,20,20,,,,8,42,42,65,,,138,,52,,42,,170', '24,93,164,52,,,,65,152,32,50,,,69,,42,25,,175,42,23,69,96,,42,55,,127', '32,,,,,25,,,,,7,,41,17,17,51,,11,38,92,,42,42,24,116,72,,116,38,72,64', '47,24,25,122,122,47,42,42,128,46,128,4,30,69,46,,170,96,91,6,,69,,,', '169,42,30,30,25,23,71,,,,,128,,,71,23,,42,97,122,,45,30,37,,22,,32,', '45,22,38,,,,58,,74,30,38,4,,8,,62,22,8,,157,,157,,,,22,22,22,75,22,22', '22,9,90,34,,179,,,40,61,21,52,,40,,21,72,48,,,,58,72,42,15,,9,128,22', '22,32,70,22,22,22,22,18,116,,116,,72,,21,,,,39,138,138,169,,65,39,,50', ',164,164,,65,,,50,10,122,,34,,,,,48,,,72,22,42,74,42,28,22,22,22,22', '22,22,42,58,,,9,,,2,48,9,169,58,169,8,42,7,,,,39,,72,,116,116,,,,,,', '72,,,21,30,,,,,,,,21,21,,,,,34,,,169,169,,,,,,34,42,,,42,,,,,,42,58', ',,96,96,116,58,116,,42,90,71,,42,22,22,22,22,66,,72,96,22,22,22,22,22', '22,72,87,,,,90,24,,,58,93,22,,32,68,116,,32,62,42,42,,,71,42,42,,65', '42,,50,21,,8,,139,,,65,,32,50,42,61,,22,22,42,42,,,,48,69,22,32,21,', '15,32,,,,,20,20,57,,,20,20,,22,20,,,22,,,,22,22,,169,,169,72,,,72,,32', ',,48,17,,22,48,,32,17,,,,,22,22,,,,169,,,48,,,21,71,42,48,21,22,22,42', '42,21,,42,,58,,,,,68,,66,42,68,30,,22,,,66,30,65,,42,,21,,,32,,,,22', '69,,,,,,23,,,,,,167,167,167,,,,,9,,,9,,,,,42,169,,,,38,,27,20,,,,27', '42,,,,,,,17,48,,,,66,,66,,,66,66,,,,,,,22,,27,,,,42,,42,42,65,,42,,', ',,,42,,,,65,96,,,96,30,,,,96,,,9,,,27,,9,9,,,,,,,,,,,42,,,22,,22,,42', '42,,,22,,22,,,,,48,22,,,,,,,,22,32,27,,,,,,26,,,27,27,26,123,,48,,,', ',21,171,21,,25,,,58,,,,,42,66,,,,,,,26,26,26,,,22,,,22,42,,9,,34,22', '42,123,42,,123,,,,,22,,,,22,,,,32,42,58,26,26,26,,,,,,,,,,,,,21,,,21', '72,,27,,,9,,,22,22,,27,,22,22,,,22,9,21,,66,,66,26,66,,27,,,,22,,26', '26,,22,22,,,,,,,,48,,,,22,,9,9,167,167,9,167,167,,167,22,66,,,66,,,48', ',,,,,,,,21,,,,,21,21,,,,121,,27,66,,,27,,9,,,27,,,,9,9,,,,,,22,66,,', ',22,22,,,22,,26,,,27,,,,,22,,121,,,,,123,,,123,22,123,,123,171,,26,171', ',171,,171,,,66,126,9,,66,66,21,,,,21,,,,,,,22,,9,21,,,22,,9,,,,,,167', '167,167,167,,22,,,,66,,,66,,,,,,,126,,126,26,,,,26,,,,26,26,66,,,,22', '21,22,22,,,22,,,,,26,22,66,21,,,,,,26,,123,167,123,,123,,123,,171,,171', ',171,,171,22,,,,,,,,22,,21,21,22,,21,22,22,,,,21,,,,,,,,,54,66,123,', ',54,,,,27,171,27,,,,,121,,,121,,121,,121,21,,124,124,124,,,21,21,54', '54,54,,,,22,,,,,,,,,,,,,,,,,22,,,,,,22,,22,,,,54,54,54,54,,,,,,,,27', '22,,27,,21,,,,126,66,126,,,,,,,,,,,21,27,,,,66,21,,21,,54,,,126,,126', '53,126,,54,54,53,121,,121,26,121,26,121,,,,,26,,,,,,,,26,,,27,,,,,53', '53,53,,,,,,,27,,,,,27,27,,,,121,,,,124,124,124,124,,124,,,,,,,53,53', '53,53,,126,,126,,126,,26,,,26,,,,,,,54,,,,126,,,,,,,,,26,,,,,,,26,,53', ',,54,,,,,126,53,53,,,27,,,,27,124,124,124,124,,,,,,27,,,,,,,,,,,,,,124', ',,,,,,26,,,,,26,26,,,,,,,,,,54,,26,,54,,,,54,54,,27,,26,,,,,,,,,,,27', '54,,,,,,53,,,54,,,,,,,,,,,,,,,,,,,,,,53,27,27,,,27,,,,,26,27,,,26,,', ',,,,,,,26,,,,,,,,,,,,,,,,,,,,27,,,,27,,,27,27,,,,,,,,,53,,,,53,26,,', '53,53,,26,,,,,,,,,,,,,26,53,,,,,,,,,53,,,,,,,,,27,,,,,,,,,,,,,,26,26', ',27,26,,,,,27,26,27,,,,,,,,,,,,,,,,,,,,,54,,54,26,,,,,54,,,26,,,,26', '54,,26,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,54,26,,54', ',,,,,,,,,,,,,,26,,,,,54,26,,26,,,,,,,,,,,,,,,,,,,,,53,,53,,,,,,53,,', ',,,,,53,,,,,,,,,,,,,,,,,54,,,,,54,54,,,,,,,,,,,,54,,,,,,,,,,,54,,,,', ',,,53,,,53,,,,,,,,,,,,,,,,,,,,53,,,,,,,,,,,,,,,,,,,,,,54,,,,54,,,,,', ',,,,54,,,,,,,,,,,,,,,,,,,,,53,,,,,53,53,,,,,,,,,,,,53,,,54,,,,,,54,', '53,,,,,,,,,,,54,33,,,,,,,,,33,33,33,,,,,,,,,,,33,33,33,,,,,,,,54,54', ',,54,,,33,33,53,54,,,53,,,,,,,,,,53,,,,,,,,,,,,54,,,,,,,,54,,,,54,,', '54,54,,,,,,,,,,,,,,53,,,,,,53,,,,,,,,,,,,,53,,,,,,,,,,,,,,,,,,,54,,', ',,,,,,,,,,,53,53,,54,53,,,,,54,53,54,,,,,,,,,,,,,,,,,,,,,,,,53,,,33', '33,33,,,53,,33,33,53,,,53,53,,,,,,,,,,33,,,33,33,33,33,33,33,33,33,33', '33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,,,,,,,33,33,,,,,', '53,,33,,,,,,,33,,33,,,33,33,,53,,,,,,53,,53,,,,,,,,,,,,,,,,,,,,,,,,', ',,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33,,33,33', '33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33,,33,,33,,,,,,,,,,,,,,,', '33,,,,,,,,,33,33,,,,,,,,,,33,,,33,,,,,,,,,,,,,,,,,,,,,,,,,33,,,,,,,', ',,,,,,,,,,,,33,33,,,,,,,,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33,33,', ',33,33,33,33,,,,33,33,,,33,33,,,,,,,,,,,,,,,,,,,,,,,,33,,,33,,,,,,,', ',,,,,,,,,,,,33,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,33,,33,,,,,,,,,,,,,,33,33,33,33,,33,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33,,,,,,,,,,,,', ',,,,33,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,33' ] racc_goto_check = arr = ::Array.new(3061, 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, 209, 19, nil, 61, 61, 69, 27, -323, 220, -492, -586, -695, nil, -239, 52, 243, -20, -173, 179, 49, 435, 390, -207, -388, -7, 920, 803, -177, 38, 25, 118, -19, 2078, -16, nil, nil, 12, -182, 55, -194, -330, 4, -246, nil, 120, 53, 44, 223, nil, -26, 24, -230, 1409, 1292, -279, 62, -61, 3, nil, nil, 37, 12, -169, 24, -29, 540, 165, -58, 87, -230, 105, 24, -270, -254, -436, nil, nil, nil, nil, nil, nil, nil, nil, nil, 134, 123, -39, nil, 120, -292, -637, -516, -292, 107, -187, 13, -537, 100, 113, 111, -357, 104, 96, -554, 92, -560, -426, -761, -449, -470, -254, -246, -460, -716, -721, -368, -462, -738, -489, nil, 447, -432, 280, 540, -483, 514, -556, -516, nil, -583, -699, -779, -762, -162, -509, 118, -354, -262, -4, -629, -628, -65, nil, -72, -72, -711, -480, -604, nil, nil, 127, 5, 30, 124, 124, -270, -192, 140, 140, 140, -370, -369, -358, -253, nil, nil, 240, -455, -171, -618, 288, -441, -610, nil, -593, -739, nil, nil, -428 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 346, 293, nil, 523, nil, 835, nil, 290, 291, nil, nil, nil, 11, 12, 18, 228, 321, nil, nil, 586, 226, 227, nil, nil, 17, nil, 441, 21, 22, 23, 24, nil, 675, nil, nil, nil, 310, nil, 25, 412, 32, nil, nil, 34, 37, 36, nil, 223, 224, 358, nil, 129, 420, 128, 131, 75, 76, nil, 90, 46, 282, nil, 804, 413, nil, 414, 425, 629, 487, 280, 266, 47, 48, 49, 50, 51, 52, 53, 54, 55, nil, 267, 61, nil, nil, nil, nil, nil, nil, nil, 569, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 702, 551, nil, 703, 924, 775, 539, nil, 540, nil, nil, 541, nil, 543, 645, nil, nil, nil, 549, nil, nil, nil, nil, nil, nil, nil, nil, nil, 424, nil, nil, nil, nil, nil, 74, 77, 78, nil, nil, nil, nil, nil, 596, nil, nil, nil, nil, nil, nil, 819, 736, 538, nil, 542, 827, 554, 556, 557, 787, 560, 561, 788, 564, 567, 285 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 146, :_reduce_none, 2, 147, :_reduce_2, 0, 148, :_reduce_3, 1, 148, :_reduce_4, 3, 148, :_reduce_5, 2, 148, :_reduce_6, 1, 150, :_reduce_none, 4, 150, :_reduce_8, 4, 153, :_reduce_9, 2, 154, :_reduce_10, 0, 158, :_reduce_11, 1, 158, :_reduce_12, 3, 158, :_reduce_13, 2, 158, :_reduce_14, 1, 159, :_reduce_none, 4, 159, :_reduce_16, 0, 176, :_reduce_17, 4, 152, :_reduce_18, 3, 152, :_reduce_19, 3, 152, :_reduce_20, 3, 152, :_reduce_21, 2, 152, :_reduce_22, 3, 152, :_reduce_23, 3, 152, :_reduce_24, 3, 152, :_reduce_25, 3, 152, :_reduce_26, 3, 152, :_reduce_27, 4, 152, :_reduce_28, 1, 152, :_reduce_none, 3, 152, :_reduce_30, 3, 152, :_reduce_31, 6, 152, :_reduce_32, 5, 152, :_reduce_33, 5, 152, :_reduce_34, 5, 152, :_reduce_35, 5, 152, :_reduce_36, 3, 152, :_reduce_37, 3, 152, :_reduce_38, 3, 152, :_reduce_39, 1, 152, :_reduce_none, 3, 163, :_reduce_41, 3, 163, :_reduce_42, 1, 175, :_reduce_none, 3, 175, :_reduce_44, 3, 175, :_reduce_45, 3, 175, :_reduce_46, 2, 175, :_reduce_47, 1, 175, :_reduce_none, 1, 162, :_reduce_none, 1, 165, :_reduce_none, 1, 165, :_reduce_none, 1, 180, :_reduce_none, 4, 180, :_reduce_53, 0, 188, :_reduce_54, 5, 185, :_reduce_55, 1, 187, :_reduce_none, 2, 179, :_reduce_57, 3, 179, :_reduce_58, 4, 179, :_reduce_59, 5, 179, :_reduce_60, 4, 179, :_reduce_61, 5, 179, :_reduce_62, 2, 179, :_reduce_63, 2, 179, :_reduce_64, 2, 179, :_reduce_65, 2, 179, :_reduce_66, 2, 179, :_reduce_67, 1, 164, :_reduce_68, 3, 164, :_reduce_69, 1, 192, :_reduce_70, 3, 192, :_reduce_71, 1, 191, :_reduce_none, 2, 191, :_reduce_73, 3, 191, :_reduce_74, 5, 191, :_reduce_75, 2, 191, :_reduce_76, 4, 191, :_reduce_77, 2, 191, :_reduce_78, 4, 191, :_reduce_79, 1, 191, :_reduce_80, 3, 191, :_reduce_81, 1, 195, :_reduce_none, 3, 195, :_reduce_83, 2, 194, :_reduce_84, 3, 194, :_reduce_85, 1, 197, :_reduce_86, 3, 197, :_reduce_87, 1, 196, :_reduce_88, 1, 196, :_reduce_89, 4, 196, :_reduce_90, 3, 196, :_reduce_91, 3, 196, :_reduce_92, 3, 196, :_reduce_93, 3, 196, :_reduce_94, 2, 196, :_reduce_95, 1, 196, :_reduce_96, 1, 172, :_reduce_97, 1, 172, :_reduce_98, 4, 172, :_reduce_99, 3, 172, :_reduce_100, 3, 172, :_reduce_101, 3, 172, :_reduce_102, 3, 172, :_reduce_103, 2, 172, :_reduce_104, 1, 172, :_reduce_105, 1, 200, :_reduce_106, 1, 200, :_reduce_none, 2, 201, :_reduce_108, 1, 201, :_reduce_109, 3, 201, :_reduce_110, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 205, :_reduce_116, 1, 205, :_reduce_none, 1, 160, :_reduce_none, 1, 160, :_reduce_none, 1, 161, :_reduce_120, 0, 208, :_reduce_121, 4, 161, :_reduce_122, 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, 178, :_reduce_194, 5, 178, :_reduce_195, 3, 178, :_reduce_196, 5, 178, :_reduce_197, 6, 178, :_reduce_198, 5, 178, :_reduce_199, 5, 178, :_reduce_200, 5, 178, :_reduce_201, 5, 178, :_reduce_202, 4, 178, :_reduce_203, 3, 178, :_reduce_204, 3, 178, :_reduce_205, 3, 178, :_reduce_206, 3, 178, :_reduce_207, 3, 178, :_reduce_208, 3, 178, :_reduce_209, 3, 178, :_reduce_210, 3, 178, :_reduce_211, 3, 178, :_reduce_212, 4, 178, :_reduce_213, 2, 178, :_reduce_214, 2, 178, :_reduce_215, 3, 178, :_reduce_216, 3, 178, :_reduce_217, 3, 178, :_reduce_218, 3, 178, :_reduce_219, 3, 178, :_reduce_220, 3, 178, :_reduce_221, 3, 178, :_reduce_222, 3, 178, :_reduce_223, 3, 178, :_reduce_224, 3, 178, :_reduce_225, 3, 178, :_reduce_226, 3, 178, :_reduce_227, 3, 178, :_reduce_228, 2, 178, :_reduce_229, 2, 178, :_reduce_230, 3, 178, :_reduce_231, 3, 178, :_reduce_232, 3, 178, :_reduce_233, 3, 178, :_reduce_234, 3, 178, :_reduce_235, 6, 178, :_reduce_236, 1, 178, :_reduce_none, 1, 211, :_reduce_none, 1, 212, :_reduce_none, 2, 212, :_reduce_none, 4, 212, :_reduce_241, 2, 212, :_reduce_242, 3, 217, :_reduce_243, 0, 218, :_reduce_244, 1, 218, :_reduce_none, 0, 168, :_reduce_246, 1, 168, :_reduce_none, 2, 168, :_reduce_none, 4, 168, :_reduce_249, 2, 168, :_reduce_250, 1, 190, :_reduce_251, 2, 190, :_reduce_252, 2, 190, :_reduce_253, 4, 190, :_reduce_254, 1, 190, :_reduce_255, 0, 221, :_reduce_256, 2, 184, :_reduce_257, 2, 220, :_reduce_258, 2, 219, :_reduce_259, 0, 219, :_reduce_260, 1, 214, :_reduce_261, 2, 214, :_reduce_262, 3, 214, :_reduce_263, 4, 214, :_reduce_264, 1, 174, :_reduce_265, 1, 174, :_reduce_none, 3, 173, :_reduce_267, 4, 173, :_reduce_268, 2, 173, :_reduce_269, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_280, 0, 244, :_reduce_281, 4, 210, :_reduce_282, 0, 245, :_reduce_283, 0, 246, :_reduce_284, 6, 210, :_reduce_285, 0, 247, :_reduce_286, 4, 210, :_reduce_287, 3, 210, :_reduce_288, 3, 210, :_reduce_289, 2, 210, :_reduce_290, 3, 210, :_reduce_291, 3, 210, :_reduce_292, 1, 210, :_reduce_293, 4, 210, :_reduce_294, 3, 210, :_reduce_295, 1, 210, :_reduce_296, 5, 210, :_reduce_297, 4, 210, :_reduce_298, 3, 210, :_reduce_299, 2, 210, :_reduce_300, 1, 210, :_reduce_none, 2, 210, :_reduce_302, 2, 210, :_reduce_303, 6, 210, :_reduce_304, 6, 210, :_reduce_305, 0, 248, :_reduce_306, 0, 249, :_reduce_307, 7, 210, :_reduce_308, 0, 250, :_reduce_309, 0, 251, :_reduce_310, 7, 210, :_reduce_311, 5, 210, :_reduce_312, 4, 210, :_reduce_313, 0, 252, :_reduce_314, 0, 253, :_reduce_315, 9, 210, :_reduce_316, 0, 254, :_reduce_317, 6, 210, :_reduce_318, 0, 255, :_reduce_319, 7, 210, :_reduce_320, 0, 256, :_reduce_321, 5, 210, :_reduce_322, 0, 257, :_reduce_323, 6, 210, :_reduce_324, 0, 258, :_reduce_325, 0, 259, :_reduce_326, 9, 210, :_reduce_327, 1, 210, :_reduce_328, 1, 210, :_reduce_329, 1, 210, :_reduce_330, 1, 210, :_reduce_331, 1, 167, :_reduce_none, 1, 235, :_reduce_none, 1, 235, :_reduce_none, 2, 235, :_reduce_335, 1, 237, :_reduce_none, 1, 237, :_reduce_none, 1, 236, :_reduce_none, 5, 236, :_reduce_339, 1, 156, :_reduce_none, 2, 156, :_reduce_341, 1, 239, :_reduce_none, 1, 239, :_reduce_none, 1, 260, :_reduce_344, 3, 260, :_reduce_345, 1, 263, :_reduce_346, 3, 263, :_reduce_347, 1, 262, :_reduce_none, 4, 262, :_reduce_349, 6, 262, :_reduce_350, 3, 262, :_reduce_351, 5, 262, :_reduce_352, 2, 262, :_reduce_353, 4, 262, :_reduce_354, 1, 262, :_reduce_355, 3, 262, :_reduce_356, 4, 264, :_reduce_357, 2, 264, :_reduce_358, 2, 264, :_reduce_359, 1, 264, :_reduce_360, 2, 269, :_reduce_361, 0, 269, :_reduce_362, 6, 270, :_reduce_363, 8, 270, :_reduce_364, 4, 270, :_reduce_365, 6, 270, :_reduce_366, 4, 270, :_reduce_367, 2, 270, :_reduce_none, 6, 270, :_reduce_369, 2, 270, :_reduce_370, 4, 270, :_reduce_371, 6, 270, :_reduce_372, 2, 270, :_reduce_373, 4, 270, :_reduce_374, 2, 270, :_reduce_375, 4, 270, :_reduce_376, 1, 270, :_reduce_none, 0, 186, :_reduce_378, 1, 186, :_reduce_379, 3, 274, :_reduce_380, 1, 274, :_reduce_381, 4, 274, :_reduce_382, 1, 275, :_reduce_383, 4, 275, :_reduce_384, 1, 276, :_reduce_385, 3, 276, :_reduce_386, 1, 277, :_reduce_387, 1, 277, :_reduce_none, 0, 281, :_reduce_389, 0, 282, :_reduce_390, 4, 234, :_reduce_391, 4, 279, :_reduce_392, 1, 279, :_reduce_393, 0, 285, :_reduce_394, 4, 280, :_reduce_395, 0, 286, :_reduce_396, 4, 280, :_reduce_397, 0, 287, :_reduce_398, 5, 284, :_reduce_399, 2, 181, :_reduce_400, 4, 181, :_reduce_401, 5, 181, :_reduce_402, 5, 181, :_reduce_403, 2, 233, :_reduce_404, 4, 233, :_reduce_405, 4, 233, :_reduce_406, 3, 233, :_reduce_407, 3, 233, :_reduce_408, 3, 233, :_reduce_409, 2, 233, :_reduce_410, 1, 233, :_reduce_411, 4, 233, :_reduce_412, 0, 289, :_reduce_413, 5, 232, :_reduce_414, 0, 290, :_reduce_415, 5, 232, :_reduce_416, 5, 238, :_reduce_417, 1, 291, :_reduce_418, 1, 291, :_reduce_none, 6, 155, :_reduce_420, 0, 155, :_reduce_421, 1, 292, :_reduce_422, 1, 292, :_reduce_none, 1, 292, :_reduce_none, 2, 293, :_reduce_425, 1, 293, :_reduce_none, 2, 157, :_reduce_427, 1, 157, :_reduce_none, 1, 222, :_reduce_none, 1, 222, :_reduce_none, 1, 222, :_reduce_none, 1, 223, :_reduce_432, 1, 295, :_reduce_433, 2, 295, :_reduce_434, 3, 296, :_reduce_435, 1, 296, :_reduce_436, 1, 296, :_reduce_437, 3, 224, :_reduce_438, 4, 225, :_reduce_439, 3, 226, :_reduce_440, 0, 300, :_reduce_441, 3, 300, :_reduce_442, 1, 301, :_reduce_443, 2, 301, :_reduce_444, 3, 228, :_reduce_445, 0, 303, :_reduce_446, 3, 303, :_reduce_447, 3, 227, :_reduce_448, 3, 229, :_reduce_449, 0, 304, :_reduce_450, 3, 304, :_reduce_451, 0, 305, :_reduce_452, 3, 305, :_reduce_453, 0, 297, :_reduce_454, 2, 297, :_reduce_455, 0, 298, :_reduce_456, 2, 298, :_reduce_457, 0, 299, :_reduce_458, 2, 299, :_reduce_459, 1, 302, :_reduce_460, 2, 302, :_reduce_461, 0, 307, :_reduce_462, 4, 302, :_reduce_463, 1, 306, :_reduce_464, 1, 306, :_reduce_465, 1, 306, :_reduce_466, 1, 306, :_reduce_none, 1, 206, :_reduce_468, 3, 207, :_reduce_469, 1, 294, :_reduce_470, 2, 294, :_reduce_471, 1, 209, :_reduce_472, 1, 209, :_reduce_473, 1, 209, :_reduce_474, 1, 209, :_reduce_475, 1, 198, :_reduce_476, 1, 198, :_reduce_477, 1, 198, :_reduce_478, 1, 198, :_reduce_479, 1, 198, :_reduce_480, 1, 199, :_reduce_481, 1, 199, :_reduce_482, 1, 199, :_reduce_483, 1, 199, :_reduce_484, 1, 199, :_reduce_485, 1, 199, :_reduce_486, 1, 199, :_reduce_487, 1, 230, :_reduce_488, 1, 230, :_reduce_489, 1, 166, :_reduce_490, 1, 166, :_reduce_491, 1, 171, :_reduce_492, 1, 171, :_reduce_493, 0, 308, :_reduce_494, 4, 240, :_reduce_495, 0, 240, :_reduce_496, 3, 242, :_reduce_497, 0, 310, :_reduce_498, 3, 242, :_reduce_499, 4, 309, :_reduce_500, 2, 309, :_reduce_501, 2, 309, :_reduce_502, 1, 309, :_reduce_503, 2, 312, :_reduce_504, 0, 312, :_reduce_505, 6, 283, :_reduce_506, 8, 283, :_reduce_507, 4, 283, :_reduce_508, 6, 283, :_reduce_509, 4, 283, :_reduce_510, 6, 283, :_reduce_511, 2, 283, :_reduce_512, 4, 283, :_reduce_513, 6, 283, :_reduce_514, 2, 283, :_reduce_515, 4, 283, :_reduce_516, 2, 283, :_reduce_517, 4, 283, :_reduce_518, 1, 283, :_reduce_519, 0, 283, :_reduce_520, 1, 278, :_reduce_521, 1, 278, :_reduce_522, 1, 278, :_reduce_523, 1, 278, :_reduce_524, 1, 261, :_reduce_none, 1, 261, :_reduce_526, 1, 314, :_reduce_527, 1, 315, :_reduce_528, 3, 315, :_reduce_529, 1, 271, :_reduce_530, 3, 271, :_reduce_531, 1, 316, :_reduce_532, 2, 317, :_reduce_533, 1, 317, :_reduce_534, 2, 318, :_reduce_535, 1, 318, :_reduce_536, 1, 265, :_reduce_537, 3, 265, :_reduce_538, 1, 311, :_reduce_539, 3, 311, :_reduce_540, 1, 319, :_reduce_none, 1, 319, :_reduce_none, 2, 266, :_reduce_543, 1, 266, :_reduce_544, 3, 320, :_reduce_545, 3, 321, :_reduce_546, 1, 272, :_reduce_547, 3, 272, :_reduce_548, 1, 313, :_reduce_549, 3, 313, :_reduce_550, 1, 322, :_reduce_none, 1, 322, :_reduce_none, 2, 273, :_reduce_553, 1, 273, :_reduce_554, 1, 323, :_reduce_none, 1, 323, :_reduce_none, 2, 268, :_reduce_557, 2, 267, :_reduce_558, 0, 267, :_reduce_559, 1, 243, :_reduce_none, 3, 243, :_reduce_561, 0, 231, :_reduce_562, 2, 231, :_reduce_none, 1, 216, :_reduce_564, 3, 216, :_reduce_565, 3, 324, :_reduce_566, 2, 324, :_reduce_567, 4, 324, :_reduce_568, 2, 324, :_reduce_569, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 288, :_reduce_none, 1, 288, :_reduce_none, 1, 288, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 170, :_reduce_582, 1, 170, :_reduce_583, 0, 149, :_reduce_none, 1, 149, :_reduce_none, 0, 177, :_reduce_none, 1, 177, :_reduce_none, 2, 193, :_reduce_588, 2, 169, :_reduce_589, 0, 215, :_reduce_none, 1, 215, :_reduce_none, 1, 215, :_reduce_none, 1, 241, :_reduce_593, 1, 241, :_reduce_none, 1, 151, :_reduce_none, 2, 151, :_reduce_none, 0, 213, :_reduce_597 ] racc_reduce_n = 598 racc_shift_n = 1023 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tDSTAR => 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, :tREGEXP_OPT => 119, :tWORDS_BEG => 120, :tQWORDS_BEG => 121, :tSYMBOLS_BEG => 122, :tQSYMBOLS_BEG => 123, :tSTRING_DBEG => 124, :tSTRING_DVAR => 125, :tSTRING_END => 126, :tSTRING_DEND => 127, :tSTRING => 128, :tSYMBOL => 129, :tNL => 130, :tEH => 131, :tCOLON => 132, :tCOMMA => 133, :tSPACE => 134, :tSEMI => 135, :tLAMBDA => 136, :tLAMBEG => 137, :tCHARACTER => 138, :tRATIONAL => 139, :tIMAGINARY => 140, :tLABEL_END => 141, :tANDDOT => 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tDSTAR", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING_DEND", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tANDDOT", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "stmt_or_begin", "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", "@1", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@2", "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", "@3", "simple_numeric", "primary", "arg_value", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@4", "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", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "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", "@21", "@22", "f_args", "do_block", "@23", "@24", "@25", "operation3", "@26", "@27", "cases", "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", "@28", "@29", "args_tail", "@30", "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", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_9(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_10(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_11(val, _values, result) result = [] result end def _reduce_12(val, _values, result) result = [ val[0] ] result end def _reduce_13(val, _values, result) result = val[0] << val[2] result end def _reduce_14(val, _values, result) result = [ val[1] ] result end # reduce 15 omitted def _reduce_16(val, _values, result) diagnostic :error, :begin_in_method, nil, val[0] result end def _reduce_17(val, _values, result) @lexer.state = :expr_fname result end def _reduce_18(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_19(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_20(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_21(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_22(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_23(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_25(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_26(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_27(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_28(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 29 omitted def _reduce_30(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_31(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_32(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_33(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_34(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_35(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_36(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_37(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_38(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_39(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end # reduce 40 omitted def _reduce_41(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_42(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end # reduce 43 omitted def _reduce_44(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_45(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_46(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_47(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 48 omitted # reduce 49 omitted # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_54(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_55(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end # reduce 56 omitted def _reduce_57(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_58(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_59(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_60(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_61(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_62(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_63(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_64(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_65(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_66(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_67(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_68(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_69(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_70(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_71(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 72 omitted def _reduce_73(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_74(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_75(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_76(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_77(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_78(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_79(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_80(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_81(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 82 omitted def _reduce_83(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_84(val, _values, result) result = [ val[0] ] result end def _reduce_85(val, _values, result) result = val[0] << val[1] result end def _reduce_86(val, _values, result) result = [ val[0] ] result end def _reduce_87(val, _values, result) result = val[0] << val[2] result end def _reduce_88(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_89(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_90(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_91(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_92(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_93(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_94(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_95(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_96(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_97(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_98(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_99(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_100(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_101(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_102(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_103(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_104(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_105(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_106(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 107 omitted def _reduce_108(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_109(val, _values, result) result = @builder.const(val[0]) result end def _reduce_110(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 111 omitted # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted # reduce 115 omitted def _reduce_116(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 117 omitted # reduce 118 omitted # reduce 119 omitted def _reduce_120(val, _values, result) result = [ val[0] ] result end def _reduce_121(val, _values, result) @lexer.state = :expr_fname result end def _reduce_122(val, _values, result) result = val[0] << val[3] result end # 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 # 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 def _reduce_194(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_195(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) result end def _reduce_196(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_197(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) result end def _reduce_198(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_199(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_200(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_201(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_202(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_203(val, _values, result) const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) result end def _reduce_204(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_205(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_207(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) result end def _reduce_214(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_215(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_218(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_225(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_229(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_230(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_231(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_232(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_233(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_235(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_236(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 237 omitted # reduce 238 omitted # reduce 239 omitted # reduce 240 omitted def _reduce_241(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_242(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_243(val, _values, result) result = val result end def _reduce_244(val, _values, result) result = [ nil, [], nil ] result end # reduce 245 omitted def _reduce_246(val, _values, result) result = [] result end # reduce 247 omitted # reduce 248 omitted def _reduce_249(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_250(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_251(val, _values, result) result = [ val[0] ] result end def _reduce_252(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_253(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_254(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_255(val, _values, result) result = [ val[0] ] result end def _reduce_256(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) result end def _reduce_257(val, _values, result) @lexer.cmdarg = val[0] result = val[1] result end def _reduce_258(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_259(val, _values, result) result = [ val[1] ] result end def _reduce_260(val, _values, result) result = [] result end def _reduce_261(val, _values, result) result = [ val[0] ] result end def _reduce_262(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_263(val, _values, result) result = val[0] << val[2] result end def _reduce_264(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_265(val, _values, result) result = @builder.array(nil, val[0], nil) result end # reduce 266 omitted def _reduce_267(val, _values, result) result = val[0] << val[2] result end def _reduce_268(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_269(val, _values, result) result = [ @builder.splat(val[0], 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 # reduce 278 omitted # reduce 279 omitted def _reduce_280(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_281(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_282(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin_keyword(val[0], val[2], val[3]) result end def _reduce_283(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_284(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_285(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) result end def _reduce_286(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_287(val, _values, result) result = @builder.begin(val[0], nil, val[3]) result end def _reduce_288(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_289(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_290(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_291(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_292(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_293(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_294(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_295(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_296(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_297(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_298(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_299(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_300(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 301 omitted def _reduce_302(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_303(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_304(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_305(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) 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 = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_309(val, _values, result) @lexer.cond.push(true) result end def _reduce_310(val, _values, result) @lexer.cond.pop result end def _reduce_311(val, _values, result) result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_312(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_313(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_314(val, _values, result) @lexer.cond.push(true) result end def _reduce_315(val, _values, result) @lexer.cond.pop result end def _reduce_316(val, _values, result) result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_317(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:class) result end def _reduce_318(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_319(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) result end def _reduce_320(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_321(val, _values, result) @static_env.extend_static @lexer.push_cmdarg result end def _reduce_322(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend result end def _reduce_323(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:def) result end def _reduce_324(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_325(val, _values, result) @lexer.state = :expr_fname result end def _reduce_326(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) result end def _reduce_327(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_328(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_329(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_330(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_331(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 332 omitted # reduce 333 omitted # reduce 334 omitted def _reduce_335(val, _values, result) result = val[1] result end # reduce 336 omitted # reduce 337 omitted # reduce 338 omitted def _reduce_339(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 340 omitted def _reduce_341(val, _values, result) result = val result end # reduce 342 omitted # reduce 343 omitted def _reduce_344(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_345(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_346(val, _values, result) result = [ val[0] ] result end def _reduce_347(val, _values, result) result = val[0] << val[2] result end # reduce 348 omitted def _reduce_349(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])) result end def _reduce_350(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) result end def _reduce_351(val, _values, result) result = val[0]. push(@builder.restarg(val[2])) result end def _reduce_352(val, _values, result) result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) result end def _reduce_353(val, _values, result) result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_354(val, _values, result) result = [ @builder.restarg(val[0], val[1]), *val[3] ] result end def _reduce_355(val, _values, result) result = [ @builder.restarg(val[0]) ] result end def _reduce_356(val, _values, result) result = [ @builder.restarg(val[0]), *val[2] ] result end def _reduce_357(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_358(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_359(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_360(val, _values, result) result = [ val[0] ] result end def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = [] result end def _reduce_363(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_364(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_365(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_366(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_367(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 368 omitted def _reduce_369(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_370(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_371(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_372(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_373(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_374(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_375(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_376(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 377 omitted def _reduce_378(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_379(val, _values, result) @lexer.state = :expr_value result end def _reduce_380(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_381(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_382(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_383(val, _values, result) result = [] result end def _reduce_384(val, _values, result) result = val[2] result end def _reduce_385(val, _values, result) result = [ val[0] ] result end def _reduce_386(val, _values, result) result = val[0] << val[2] result end def _reduce_387(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 388 omitted def _reduce_389(val, _values, result) @static_env.extend_dynamic result end def _reduce_390(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_391(val, _values, result) @lexer.cmdarg = val[2] @lexer.cmdarg.lexpop result = [ val[1], val[3] ] @static_env.unextend result end def _reduce_392(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_393(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_394(val, _values, result) @context.push(:lambda) result end def _reduce_395(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_396(val, _values, result) @context.push(:lambda) result end def _reduce_397(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_398(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_399(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_400(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_401(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_402(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_403(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_404(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_405(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_406(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_407(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_408(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_409(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_410(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_411(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_412(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_413(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_414(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_415(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_416(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_417(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_418(val, _values, result) result = [ val[0] ] result end # reduce 419 omitted def _reduce_420(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_421(val, _values, result) result = [] result end def _reduce_422(val, _values, result) result = [ val[0] ] result end # reduce 423 omitted # reduce 424 omitted def _reduce_425(val, _values, result) result = [ val[0], val[1] ] result end # reduce 426 omitted def _reduce_427(val, _values, result) result = [ val[0], val[1] ] result end # reduce 428 omitted # reduce 429 omitted # reduce 430 omitted # reduce 431 omitted def _reduce_432(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_433(val, _values, result) result = [ val[0] ] result end def _reduce_434(val, _values, result) result = val[0] << val[1] result end def _reduce_435(val, _values, result) string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_436(val, _values, result) string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_437(val, _values, result) result = @builder.character(val[0]) result end def _reduce_438(val, _values, result) string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_439(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_440(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_441(val, _values, result) result = [] result end def _reduce_442(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_443(val, _values, result) result = [ val[0] ] result end def _reduce_444(val, _values, result) result = val[0] << val[1] result end def _reduce_445(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_446(val, _values, result) result = [] result end def _reduce_447(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_448(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_449(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_450(val, _values, result) result = [] result end def _reduce_451(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_452(val, _values, result) result = [] result end def _reduce_453(val, _values, result) result = val[0] << @builder.symbol_internal(val[1]) result end def _reduce_454(val, _values, result) result = [] result end def _reduce_455(val, _values, result) result = val[0] << val[1] result end def _reduce_456(val, _values, result) result = [] result end def _reduce_457(val, _values, result) result = val[0] << val[1] result end def _reduce_458(val, _values, result) result = [] result end def _reduce_459(val, _values, result) result = val[0] << val[1] result end def _reduce_460(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_461(val, _values, result) result = val[1] result end def _reduce_462(val, _values, result) @lexer.cond.push(false) @lexer.cmdarg.push(false) result end def _reduce_463(val, _values, result) @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_464(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_465(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_466(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 467 omitted def _reduce_468(val, _values, result) result = @builder.symbol(val[0]) result end def _reduce_469(val, _values, result) result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_470(val, _values, result) result = val[0] result end def _reduce_471(val, _values, result) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end result end def _reduce_472(val, _values, result) result = @builder.integer(val[0]) result end def _reduce_473(val, _values, result) result = @builder.float(val[0]) result end def _reduce_474(val, _values, result) result = @builder.rational(val[0]) result end def _reduce_475(val, _values, result) result = @builder.complex(val[0]) result end def _reduce_476(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_477(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_478(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_479(val, _values, result) result = @builder.const(val[0]) result end def _reduce_480(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_481(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_482(val, _values, result) result = @builder.self(val[0]) result end def _reduce_483(val, _values, result) result = @builder.true(val[0]) result end def _reduce_484(val, _values, result) result = @builder.false(val[0]) result end def _reduce_485(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_486(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_487(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_488(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_489(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_490(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_491(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_492(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_493(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_494(val, _values, result) @lexer.state = :expr_value result end def _reduce_495(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_496(val, _values, result) result = nil result end def _reduce_497(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_498(val, _values, result) result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_499(val, _values, result) @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) result end def _reduce_500(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_501(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_502(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_503(val, _values, result) result = [ val[0] ] result end def _reduce_504(val, _values, result) result = val[1] result end def _reduce_505(val, _values, result) result = [] result end def _reduce_506(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_507(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_508(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_509(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_510(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_511(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_512(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_513(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_514(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_515(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_516(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_517(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_518(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_519(val, _values, result) result = val[0] result end def _reduce_520(val, _values, result) result = [] result end def _reduce_521(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_522(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_523(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_524(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 525 omitted def _reduce_526(val, _values, result) @static_env.declare val[0][0] result = val[0] result end def _reduce_527(val, _values, result) result = val[0] result end def _reduce_528(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_529(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_530(val, _values, result) result = [ val[0] ] result end def _reduce_531(val, _values, result) result = val[0] << val[2] result end def _reduce_532(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] result end def _reduce_533(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_534(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_535(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_536(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_537(val, _values, result) result = [ val[0] ] result end def _reduce_538(val, _values, result) result = val[0] << val[2] result end def _reduce_539(val, _values, result) result = [ val[0] ] result end def _reduce_540(val, _values, result) result = val[0] << val[2] result end # reduce 541 omitted # reduce 542 omitted def _reduce_543(val, _values, result) @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] result end def _reduce_544(val, _values, result) result = [ @builder.kwrestarg(val[0]) ] result end def _reduce_545(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_546(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_547(val, _values, result) result = [ val[0] ] result end def _reduce_548(val, _values, result) result = val[0] << val[2] result end def _reduce_549(val, _values, result) result = [ val[0] ] result end def _reduce_550(val, _values, result) result = val[0] << val[2] result end # reduce 551 omitted # reduce 552 omitted def _reduce_553(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_554(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 555 omitted # reduce 556 omitted def _reduce_557(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_558(val, _values, result) result = [ val[1] ] result end def _reduce_559(val, _values, result) result = [] result end # reduce 560 omitted def _reduce_561(val, _values, result) result = val[1] result end def _reduce_562(val, _values, result) result = [] result end # reduce 563 omitted def _reduce_564(val, _values, result) result = [ val[0] ] result end def _reduce_565(val, _values, result) result = val[0] << val[2] result end def _reduce_566(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_567(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end def _reduce_568(val, _values, result) result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) result end def _reduce_569(val, _values, result) result = @builder.kwsplat(val[0], val[1]) result end # reduce 570 omitted # reduce 571 omitted # reduce 572 omitted # reduce 573 omitted # reduce 574 omitted # reduce 575 omitted # reduce 576 omitted # reduce 577 omitted # reduce 578 omitted # reduce 579 omitted # reduce 580 omitted # reduce 581 omitted def _reduce_582(val, _values, result) result = [:dot, val[0][1]] result end def _reduce_583(val, _values, result) result = [:anddot, val[0][1]] result end # reduce 584 omitted # reduce 585 omitted # reduce 586 omitted # reduce 587 omitted def _reduce_588(val, _values, result) result = val[1] result end def _reduce_589(val, _values, result) result = val[1] result end # reduce 590 omitted # reduce 591 omitted # reduce 592 omitted def _reduce_593(val, _values, result) yyerrok result end # reduce 594 omitted # reduce 595 omitted # reduce 596 omitted def _reduce_597(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby23 end # module Parser parser-2.7.0.2/lib/parser/ruby20.y0000644000004100000410000024352213617025313016574 0ustar www-datawww-dataclass Parser::Ruby20 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 tUPLUS tUMINUS tUNARY_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 tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { result = @builder.preexe(val[0], val[1], val[2], val[3]) } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt_or_begin { result = [ val[0] ] } | stmts terms stmt_or_begin { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt_or_begin: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { if @context.indirectly_in_def? diagnostic :error, :begin_in_method, nil, val[0] end result = @builder.preexe(val[0], val[1], val[2], val[3]) } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_call { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_call { @builder.op_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL arg_value { result = @builder.multi_assign(val[0], val[1], val[2]) } | mlhs tEQL mrhs { result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | expr command_asgn: lhs tEQL command_call { result = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL command_asgn { result = @builder.assign(val[0], val[1], val[2]) } expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } fcall: operation command: fcall command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | fcall command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tDOT operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tDOT operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 | tDSTAR | 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 = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) } | var_lhs tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | tCOLON3 tCONSTANT tOP_ASGN arg { const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) } | backref tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM tINTEGER tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) } | tUNARY_NUM tFLOAT tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) } call_args { @lexer.cmdarg = val[0] result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } bodystmt kEND { @lexer.cmdarg = val[1] result = @builder.begin_keyword(val[0], val[2], val[3]) } | tLPAREN_ARG { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } expr { @lexer.state = :expr_endarg } opt_nl tRPAREN { @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) } | tLPAREN_ARG { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], nil, val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | fcall brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.push_cmdarg @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.push_cmdarg } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { @static_env.declare val[0][0] result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { @static_env.declare val[3][0] result = val[0]. push(@builder.restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { @static_env.declare val[3][0] result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.restarg(val[0]), *val[2] ] } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_block_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_block_args_tail: tCOMMA block_args_tail { result = val[1] } | # nothing { result = [] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_block_args_tail { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | block_args_tail opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: opt_nl { result = [] } | opt_nl tSEMI bv_decls opt_nl { result = val[2] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist lambda_body { result = [ val[1], val[2] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call dot_or_colon operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call dot_or_colon operation2 opt_paren_args brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | block_call dot_or_colon operation2 command_args do_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } method_call: fcall paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value tDOT paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } | kDO { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = @builder.string_compose(val[0], val[1], val[2]) } | tSTRING { result = @builder.string(val[0]) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = @builder.xstring_compose(val[0], val[1], val[2]) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } symbols: tSYMBOLS_BEG symbol_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } symbol_list: # nothing { result = [] } | symbol_list word tSPACE { result = val[0] << @builder.word(val[1]) } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } qsym_list: # nothing { result = [] } | qsym_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.symbol_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cond.push(false) @lexer.cmdarg.push(false) } compstmt tSTRING_DEND { @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: tINTEGER { result = @builder.integer(val[0]) } | tFLOAT { result = @builder.float(val[0]) } | tUNARY_NUM tINTEGER =tLOWEST { num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } | tUNARY_NUM tFLOAT =tLOWEST { num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: term { result = nil } | tLT { @lexer.state = :expr_value } expr_value term { result = [ val[0], val[2] ] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | f_args term { result = @builder.args(nil, val[0], nil) } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_args_tail: tCOMMA args_tail { result = val[1] } | # nothing { result = [] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | args_tail { result = val[0] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER f_arg_item: f_norm_arg { @static_env.declare val[0][0] result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_kw: tLABEL arg_value { check_kwarg_name(val[0]) @static_env.declare val[0][0] result = @builder.kwoptarg(val[0], val[1]) } f_block_kw: tLABEL primary_value { check_kwarg_name(val[0]) @static_env.declare val[0][0] result = @builder.kwoptarg(val[0], val[1]) } f_block_kwarg: f_block_kw { result = [ val[0] ] } | f_block_kwarg tCOMMA f_block_kw { result = val[0] << val[2] } f_kwarg: f_kw { result = [ val[0] ] } | f_kwarg tCOMMA f_kw { result = val[0] << val[2] } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.kwrestarg(val[0]) ] } f_opt: tIDENTIFIER tEQL arg_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: tIDENTIFIER tEQL primary_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } | tDSTAR arg_value { result = @builder.kwsplat(val[0], val[1]) } 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 { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 20 end def default_encoding Encoding::UTF_8 end parser-2.7.0.2/lib/parser/builders/0000755000004100000410000000000013617025313017060 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/builders/default.rb0000644000004100000410000014555313617025313021046 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # Default AST builder. Uses {AST::Node}s. # class Builders::Default class << self ## # AST compatibility attribute; since `-> {}` is not semantically # equivalent to `lambda {}`, all new code should set this attribute # to true. # # If set to false (the default), `-> {}` is emitted as # `s(:block, s(:send, nil, :lambda), s(:args), nil)`. # # If set to true, `-> {}` is emitted as # `s(:block, s(:lambda), s(:args), nil)`. # # @return [Boolean] attr_accessor :emit_lambda end @emit_lambda = false class << self ## # AST compatibility attribute; block arguments of `m { |a| }` are # not semantically equivalent to block arguments of `m { |a,| }` or `m { |a, b| }`, # all new code should set this attribute to true. # # If set to false (the default), arguments of `m { |a| }` are emitted as # `s(:args, s(:arg, :a))`. # # If set to true, arguments of `m { |a| }` are emitted as # `s(:args, s(:procarg0, :a)). # # @return [Boolean] attr_accessor :emit_procarg0 end @emit_procarg0 = false class << self ## # AST compatibility attribute; locations of `__ENCODING__` are not the same # as locations of `Encoding::UTF_8` causing problems during rewriting, # all new code should set this attribute to true. # # If set to false (the default), `__ENCODING__` is emitted as # ` s(:const, s(:const, nil, :Encoding), :UTF_8)`. # # If set to true, `__ENCODING__` is emitted as # `s(:__ENCODING__)`. # # @return [Boolean] attr_accessor :emit_encoding end @emit_encoding = false class << self ## # AST compatibility attribute; indexed assignment, `x[] = 1`, is not # semantically equivalent to calling the method directly, `x.[]=(1)`. # Specifically, in the former case, the expression's value is always 1, # and in the latter case, the expression's value is the return value # of the `[]=` method. # # If set to false (the default), `self[1]` is emitted as # `s(:send, s(:self), :[], s(:int, 1))`, and `self[1] = 2` is # emitted as `s(:send, s(:self), :[]=, s(:int, 1), s(:int, 2))`. # # If set to true, `self[1]` is emitted as # `s(:index, s(:self), s(:int, 1))`, and `self[1] = 2` is # emitted as `s(:indexasgn, s(:self), s(:int, 1), s(:int, 2))`. # # @return [Boolean] attr_accessor :emit_index end class << self ## # AST compatibility attribute; causes a single non-mlhs # block argument to be wrapped in s(:procarg0). # # If set to false (the default), block arguments `|a|` are emitted as # `s(:args, s(:procarg0, :a))` # # If set to true, block arguments `|a|` are emitted as # `s(:args, s(:procarg0, s(:arg, :a))` # # @return [Boolean] attr_accessor :emit_arg_inside_procarg0 end @emit_index = false class << self ## # @api private def modernize @emit_lambda = true @emit_procarg0 = true @emit_encoding = true @emit_index = true @emit_arg_inside_procarg0 = true end end ## # @api private attr_accessor :parser ## # If set to true (the default), `__FILE__` and `__LINE__` are transformed to # literal nodes. For example, `s(:str, "lib/foo.rb")` and `s(:int, 10)`. # # If set to false, `__FILE__` and `__LINE__` are emitted as-is, # i.e. as `s(:__FILE__)` and `s(:__LINE__)` nodes. # # Source maps are identical in both cases. # # @return [Boolean] attr_accessor :emit_file_line_as_literals ## # Initializes attributes: # # * `emit_file_line_as_literals`: `true` def initialize @emit_file_line_as_literals = true end # @!parse private # # Literals # # Singletons def nil(nil_t) n0(:nil, token_map(nil_t)) end def true(true_t) n0(:true, token_map(true_t)) end def false(false_t) n0(:false, token_map(false_t)) end # Numerics def integer(integer_t) numeric(:int, integer_t) end def float(float_t) numeric(:float, float_t) end def rational(rational_t) numeric(:rational, rational_t) end def complex(complex_t) numeric(:complex, complex_t) end def numeric(kind, token) n(kind, [ value(token) ], Source::Map::Operator.new(nil, loc(token))) end private :numeric def unary_num(unary_t, numeric) value, = *numeric operator_loc = loc(unary_t) case value(unary_t) when '+' value = +value when '-' value = -value end numeric.updated(nil, [ value ], :location => Source::Map::Operator.new( operator_loc, operator_loc.join(numeric.loc.expression))) end def __LINE__(__LINE__t) n0(:__LINE__, token_map(__LINE__t)) end # Strings def string(string_t) n(:str, [ string_value(string_t) ], delimited_string_map(string_t)) end def string_internal(string_t) n(:str, [ string_value(string_t) ], unquoted_map(string_t)) end def string_compose(begin_t, parts, end_t) if collapse_string_parts?(parts) if begin_t.nil? && end_t.nil? parts.first else n(:str, parts.first.children, string_map(begin_t, parts, end_t)) end else n(:dstr, [ *parts ], string_map(begin_t, parts, end_t)) end end def character(char_t) n(:str, [ string_value(char_t) ], prefix_string_map(char_t)) end def __FILE__(__FILE__t) n0(:__FILE__, token_map(__FILE__t)) end # Symbols def symbol(symbol_t) n(:sym, [ string_value(symbol_t).to_sym ], prefix_string_map(symbol_t)) end def symbol_internal(symbol_t) n(:sym, [ string_value(symbol_t).to_sym ], unquoted_map(symbol_t)) end def symbol_compose(begin_t, parts, end_t) if collapse_string_parts?(parts) str = parts.first n(:sym, [ str.children.first.to_sym ], collection_map(begin_t, str.loc.expression, end_t)) elsif @parser.version == 18 && parts.empty? diagnostic :error, :empty_symbol, nil, loc(begin_t).join(loc(end_t)) else n(:dsym, [ *parts ], collection_map(begin_t, parts, end_t)) end end # Executable strings def xstring_compose(begin_t, parts, end_t) n(:xstr, [ *parts ], string_map(begin_t, parts, end_t)) end # Indented (interpolated, noninterpolated, executable) strings def dedent_string(node, dedent_level) if !dedent_level.nil? dedenter = Lexer::Dedenter.new(dedent_level) if node.type == :str str = node.children.first dedenter.dedent(str) elsif node.type == :dstr || node.type == :xstr node.children.each do |str_node| if str_node.type == :str str = str_node.children.first dedenter.dedent(str) else dedenter.interrupt end end end end node end # Regular expressions def regexp_options(regopt_t) options = value(regopt_t). each_char.sort.uniq. map(&:to_sym) n(:regopt, options, token_map(regopt_t)) end def regexp_compose(begin_t, parts, end_t, options) begin static_regexp(parts, options) rescue RegexpError => e diagnostic :error, :invalid_regexp, { :message => e.message }, loc(begin_t).join(loc(end_t)) end n(:regexp, (parts << options), regexp_map(begin_t, end_t, options)) end # Arrays def array(begin_t, elements, end_t) n(:array, elements, collection_map(begin_t, elements, end_t)) end def splat(star_t, arg=nil) if arg.nil? n0(:splat, unary_op_map(star_t)) else n(:splat, [ arg ], unary_op_map(star_t, arg)) end end def word(parts) if collapse_string_parts?(parts) parts.first else n(:dstr, [ *parts ], collection_map(nil, parts, nil)) end end def words_compose(begin_t, parts, end_t) n(:array, [ *parts ], collection_map(begin_t, parts, end_t)) end def symbols_compose(begin_t, parts, end_t) parts = parts.map do |part| case part.type when :str value, = *part part.updated(:sym, [ value.to_sym ]) when :dstr part.updated(:dsym) else part end end n(:array, [ *parts ], collection_map(begin_t, parts, end_t)) end # Hashes def pair(key, assoc_t, value) n(:pair, [ key, value ], binary_op_map(key, assoc_t, value)) end def pair_list_18(list) if list.size % 2 != 0 diagnostic :error, :odd_hash, nil, list.last.loc.expression else list. each_slice(2).map do |key, value| n(:pair, [ key, value ], binary_op_map(key, nil, value)) end end end def pair_keyword(key_t, value) key_map, pair_map = pair_keyword_map(key_t, value) key = n(:sym, [ value(key_t).to_sym ], key_map) n(:pair, [ key, value ], pair_map) end def pair_quoted(begin_t, parts, end_t, value) end_t, pair_map = pair_quoted_map(begin_t, end_t, value) key = symbol_compose(begin_t, parts, end_t) n(:pair, [ key, value ], pair_map) end def kwsplat(dstar_t, arg) n(:kwsplat, [ arg ], unary_op_map(dstar_t, arg)) end def associate(begin_t, pairs, end_t) n(:hash, [ *pairs ], collection_map(begin_t, pairs, end_t)) end # Ranges def range_inclusive(lhs, dot2_t, rhs) n(:irange, [ lhs, rhs ], range_map(lhs, dot2_t, rhs)) end def range_exclusive(lhs, dot3_t, rhs) n(:erange, [ lhs, rhs ], range_map(lhs, dot3_t, rhs)) end # # Access # def self(token) n0(:self, token_map(token)) end def ident(token) n(:ident, [ value(token).to_sym ], variable_map(token)) end def ivar(token) n(:ivar, [ value(token).to_sym ], variable_map(token)) end def gvar(token) n(:gvar, [ value(token).to_sym ], variable_map(token)) end def cvar(token) n(:cvar, [ value(token).to_sym ], variable_map(token)) end def back_ref(token) n(:back_ref, [ value(token).to_sym ], token_map(token)) end def nth_ref(token) n(:nth_ref, [ value(token) ], token_map(token)) end def accessible(node) case node.type when :__FILE__ if @emit_file_line_as_literals n(:str, [ node.loc.expression.source_buffer.name ], node.loc.dup) else node end when :__LINE__ if @emit_file_line_as_literals n(:int, [ node.loc.expression.line ], node.loc.dup) else node end when :__ENCODING__ if !self.class.emit_encoding n(:const, [ n(:const, [ nil, :Encoding], nil), :UTF_8 ], node.loc.dup) else node end when :ident name, = *node if @parser.static_env.declared?(name) if name.to_s == parser.current_arg_stack.top diagnostic :error, :circular_argument_reference, { :var_name => name.to_s }, node.loc.expression end node.updated(:lvar) else name, = *node n(:send, [ nil, name ], var_send_map(node)) end else node end end def const(name_t) n(:const, [ nil, value(name_t).to_sym ], constant_map(nil, nil, name_t)) end def const_global(t_colon3, name_t) cbase = n0(:cbase, token_map(t_colon3)) n(:const, [ cbase, value(name_t).to_sym ], constant_map(cbase, t_colon3, name_t)) end def const_fetch(scope, t_colon2, name_t) n(:const, [ scope, value(name_t).to_sym ], constant_map(scope, t_colon2, name_t)) end def __ENCODING__(__ENCODING__t) n0(:__ENCODING__, token_map(__ENCODING__t)) end # # Assignment # def assignable(node) case node.type when :cvar node.updated(:cvasgn) when :ivar node.updated(:ivasgn) when :gvar node.updated(:gvasgn) when :const unless @parser.context.dynamic_const_definition_allowed? diagnostic :error, :dynamic_const, nil, node.loc.expression end node.updated(:casgn) when :ident name, = *node check_assignment_to_numparam(node) @parser.static_env.declare(name) node.updated(:lvasgn) when :nil, :self, :true, :false, :__FILE__, :__LINE__, :__ENCODING__ diagnostic :error, :invalid_assignment, nil, node.loc.expression when :back_ref, :nth_ref diagnostic :error, :backref_assignment, nil, node.loc.expression end end def const_op_assignable(node) node.updated(:casgn) end def assign(lhs, eql_t, rhs) (lhs << rhs).updated(nil, nil, :location => lhs.loc. with_operator(loc(eql_t)). with_expression(join_exprs(lhs, rhs))) end def op_assign(lhs, op_t, rhs) case lhs.type when :gvasgn, :ivasgn, :lvasgn, :cvasgn, :casgn, :send, :csend, :index operator = value(op_t)[0..-1].to_sym source_map = lhs.loc. with_operator(loc(op_t)). with_expression(join_exprs(lhs, rhs)) if lhs.type == :index lhs = lhs.updated(:indexasgn) end case operator when :'&&' n(:and_asgn, [ lhs, rhs ], source_map) when :'||' n(:or_asgn, [ lhs, rhs ], source_map) else n(:op_asgn, [ lhs, operator, rhs ], source_map) end when :back_ref, :nth_ref diagnostic :error, :backref_assignment, nil, lhs.loc.expression end end def multi_lhs(begin_t, items, end_t) n(:mlhs, [ *items ], collection_map(begin_t, items, end_t)) end def multi_assign(lhs, eql_t, rhs) n(:masgn, [ lhs, rhs ], binary_op_map(lhs, eql_t, rhs)) end # # Class and module definition # def def_class(class_t, name, lt_t, superclass, body, end_t) n(:class, [ name, superclass, body ], module_definition_map(class_t, name, lt_t, end_t)) end def def_sclass(class_t, lshft_t, expr, body, end_t) n(:sclass, [ expr, body ], module_definition_map(class_t, nil, lshft_t, end_t)) end def def_module(module_t, name, body, end_t) n(:module, [ name, body ], module_definition_map(module_t, name, nil, end_t)) end # # Method (un)definition # def def_method(def_t, name_t, args, body, end_t) n(:def, [ value(name_t).to_sym, args, body ], definition_map(def_t, nil, name_t, end_t)) end def def_singleton(def_t, definee, dot_t, name_t, args, body, end_t) case definee.type when :int, :str, :dstr, :sym, :dsym, :regexp, :array, :hash diagnostic :error, :singleton_literal, nil, definee.loc.expression else n(:defs, [ definee, value(name_t).to_sym, args, body ], definition_map(def_t, dot_t, name_t, end_t)) end end def undef_method(undef_t, names) n(:undef, [ *names ], keyword_map(undef_t, nil, names, nil)) end def alias(alias_t, to, from) n(:alias, [ to, from ], keyword_map(alias_t, nil, [to, from], nil)) end # # Formal arguments # def args(begin_t, args, end_t, check_args=true) args = check_duplicate_args(args) if check_args n(:args, args, collection_map(begin_t, args, end_t)) end def numargs(max_numparam) n(:numargs, [ max_numparam ], nil) end def forward_args(begin_t, dots_t, end_t) n(:forward_args, [], collection_map(begin_t, token_map(dots_t), end_t)) end def arg(name_t) n(:arg, [ value(name_t).to_sym ], variable_map(name_t)) end def optarg(name_t, eql_t, value) n(:optarg, [ value(name_t).to_sym, value ], variable_map(name_t). with_operator(loc(eql_t)). with_expression(loc(name_t).join(value.loc.expression))) end def restarg(star_t, name_t=nil) if name_t n(:restarg, [ value(name_t).to_sym ], arg_prefix_map(star_t, name_t)) else n0(:restarg, arg_prefix_map(star_t)) end end def kwarg(name_t) n(:kwarg, [ value(name_t).to_sym ], kwarg_map(name_t)) end def kwoptarg(name_t, value) n(:kwoptarg, [ value(name_t).to_sym, value ], kwarg_map(name_t, value)) end def kwrestarg(dstar_t, name_t=nil) if name_t n(:kwrestarg, [ value(name_t).to_sym ], arg_prefix_map(dstar_t, name_t)) else n0(:kwrestarg, arg_prefix_map(dstar_t)) end end def kwnilarg(dstar_t, nil_t) n0(:kwnilarg, arg_prefix_map(dstar_t, nil_t)) end def shadowarg(name_t) n(:shadowarg, [ value(name_t).to_sym ], variable_map(name_t)) end def blockarg(amper_t, name_t) n(:blockarg, [ value(name_t).to_sym ], arg_prefix_map(amper_t, name_t)) end def procarg0(arg) if self.class.emit_procarg0 if arg.type == :arg && self.class.emit_arg_inside_procarg0 n(:procarg0, [ arg ], Source::Map::Collection.new(nil, nil, arg.location.expression)) else arg.updated(:procarg0) end else arg end end # Ruby 1.8 block arguments def arg_expr(expr) if expr.type == :lvasgn expr.updated(:arg) else n(:arg_expr, [ expr ], expr.loc.dup) end end def restarg_expr(star_t, expr=nil) if expr.nil? n0(:restarg, token_map(star_t)) elsif expr.type == :lvasgn expr.updated(:restarg) else n(:restarg_expr, [ expr ], expr.loc.dup) end end def blockarg_expr(amper_t, expr) if expr.type == :lvasgn expr.updated(:blockarg) else n(:blockarg_expr, [ expr ], expr.loc.dup) end end # MacRuby Objective-C arguments def objc_kwarg(kwname_t, assoc_t, name_t) kwname_l = loc(kwname_t) if assoc_t.nil? # a: b, not a => b kwname_l = kwname_l.resize(kwname_l.size - 1) operator_l = kwname_l.end.resize(1) else operator_l = loc(assoc_t) end n(:objc_kwarg, [ value(kwname_t).to_sym, value(name_t).to_sym ], Source::Map::ObjcKwarg.new(kwname_l, operator_l, loc(name_t), kwname_l.join(loc(name_t)))) end def objc_restarg(star_t, name=nil) if name.nil? n0(:restarg, arg_prefix_map(star_t)) elsif name.type == :arg # regular restarg name.updated(:restarg, nil, { :location => name.loc.with_operator(loc(star_t)) }) else # restarg with objc_kwarg inside n(:objc_restarg, [ name ], unary_op_map(star_t, name)) end end # # Method calls # def call_type_for_dot(dot_t) if !dot_t.nil? && value(dot_t) == :anddot :csend else # This case is a bit tricky. ruby23.y returns the token tDOT with # the value :dot, and the token :tANDDOT with the value :anddot. # # But, ruby{18..22}.y (which unconditionally expect tDOT) just # return "." there, since they are to be kept close to the corresponding # Ruby MRI grammars. # # Thankfully, we don't have to care. :send end end def forwarded_args(dots_t) n(:forwarded_args, [], token_map(dots_t)) end def call_method(receiver, dot_t, selector_t, lparen_t=nil, args=[], rparen_t=nil) type = call_type_for_dot(dot_t) if selector_t.nil? n(type, [ receiver, :call, *args ], send_map(receiver, dot_t, nil, lparen_t, args, rparen_t)) else n(type, [ receiver, value(selector_t).to_sym, *args ], send_map(receiver, dot_t, selector_t, lparen_t, args, rparen_t)) end end def call_lambda(lambda_t) if self.class.emit_lambda n0(:lambda, expr_map(loc(lambda_t))) else n(:send, [ nil, :lambda ], send_map(nil, nil, lambda_t)) end end def block(method_call, begin_t, args, body, end_t) _receiver, _selector, *call_args = *method_call if method_call.type == :yield diagnostic :error, :block_given_to_yield, nil, method_call.loc.keyword, [loc(begin_t)] end last_arg = call_args.last if last_arg && (last_arg.type == :block_pass || last_arg.type == :forwarded_args) diagnostic :error, :block_and_blockarg, nil, last_arg.loc.expression, [loc(begin_t)] end if args.type == :numargs block_type = :numblock args = args.children[0] else block_type = :block end if [:send, :csend, :index, :super, :zsuper, :lambda].include?(method_call.type) n(block_type, [ method_call, args, body ], block_map(method_call.loc.expression, begin_t, end_t)) else # Code like "return foo 1 do end" is reduced in a weird sequence. # Here, method_call is actually (return). actual_send, = *method_call block = n(block_type, [ actual_send, args, body ], block_map(actual_send.loc.expression, begin_t, end_t)) n(method_call.type, [ block ], method_call.loc.with_expression(join_exprs(method_call, block))) end end def block_pass(amper_t, arg) n(:block_pass, [ arg ], unary_op_map(amper_t, arg)) end def objc_varargs(pair, rest_of_varargs) value, first_vararg = *pair vararg_array = array(nil, [ first_vararg, *rest_of_varargs ], nil). updated(:objc_varargs) pair.updated(nil, [ value, vararg_array ], { :location => pair.loc.with_expression( pair.loc.expression.join(vararg_array.loc.expression)) }) end def attr_asgn(receiver, dot_t, selector_t) method_name = (value(selector_t) + '=').to_sym type = call_type_for_dot(dot_t) # Incomplete method call. n(type, [ receiver, method_name ], send_map(receiver, dot_t, selector_t)) end def index(receiver, lbrack_t, indexes, rbrack_t) if self.class.emit_index n(:index, [ receiver, *indexes ], index_map(receiver, lbrack_t, rbrack_t)) else n(:send, [ receiver, :[], *indexes ], send_index_map(receiver, lbrack_t, rbrack_t)) end end def index_asgn(receiver, lbrack_t, indexes, rbrack_t) if self.class.emit_index n(:indexasgn, [ receiver, *indexes ], index_map(receiver, lbrack_t, rbrack_t)) else # Incomplete method call. n(:send, [ receiver, :[]=, *indexes ], send_index_map(receiver, lbrack_t, rbrack_t)) end end def binary_op(receiver, operator_t, arg) source_map = send_binary_op_map(receiver, operator_t, arg) if @parser.version == 18 operator = value(operator_t) if operator == '!=' method_call = n(:send, [ receiver, :==, arg ], source_map) elsif operator == '!~' method_call = n(:send, [ receiver, :=~, arg ], source_map) end if %w(!= !~).include?(operator) return n(:not, [ method_call ], expr_map(source_map.expression)) end end n(:send, [ receiver, value(operator_t).to_sym, arg ], source_map) end def match_op(receiver, match_t, arg) source_map = send_binary_op_map(receiver, match_t, arg) if (regexp = static_regexp_node(receiver)) regexp.names.each do |name| @parser.static_env.declare(name) end n(:match_with_lvasgn, [ receiver, arg ], source_map) else n(:send, [ receiver, :=~, arg ], source_map) end end def unary_op(op_t, receiver) case value(op_t) when '+', '-' method = value(op_t) + '@' else method = value(op_t) end n(:send, [ receiver, method.to_sym ], send_unary_op_map(op_t, receiver)) end def not_op(not_t, begin_t=nil, receiver=nil, end_t=nil) if @parser.version == 18 n(:not, [ check_condition(receiver) ], unary_op_map(not_t, receiver)) else if receiver.nil? nil_node = n0(:begin, collection_map(begin_t, nil, end_t)) n(:send, [ nil_node, :'!' ], send_unary_op_map(not_t, nil_node)) else n(:send, [ check_condition(receiver), :'!' ], send_map(nil, nil, not_t, begin_t, [receiver], end_t)) end end end # # Control flow # # Logical operations: and, or def logical_op(type, lhs, op_t, rhs) n(type, [ lhs, rhs ], binary_op_map(lhs, op_t, rhs)) end # Conditionals def condition(cond_t, cond, then_t, if_true, else_t, if_false, end_t) n(:if, [ check_condition(cond), if_true, if_false ], condition_map(cond_t, cond, then_t, if_true, else_t, if_false, end_t)) end def condition_mod(if_true, if_false, cond_t, cond) n(:if, [ check_condition(cond), if_true, if_false ], keyword_mod_map(if_true || if_false, cond_t, cond)) end def ternary(cond, question_t, if_true, colon_t, if_false) n(:if, [ check_condition(cond), if_true, if_false ], ternary_map(cond, question_t, if_true, colon_t, if_false)) end # Case matching def when(when_t, patterns, then_t, body) children = patterns << body n(:when, children, keyword_map(when_t, then_t, children, nil)) end def case(case_t, expr, when_bodies, else_t, else_body, end_t) n(:case, [ expr, *(when_bodies << else_body)], condition_map(case_t, expr, nil, nil, else_t, else_body, end_t)) end # Loops def loop(type, keyword_t, cond, do_t, body, end_t) n(type, [ check_condition(cond), body ], keyword_map(keyword_t, do_t, nil, end_t)) end def loop_mod(type, body, keyword_t, cond) if body.type == :kwbegin type = :"#{type}_post" end n(type, [ check_condition(cond), body ], keyword_mod_map(body, keyword_t, cond)) end def for(for_t, iterator, in_t, iteratee, do_t, body, end_t) n(:for, [ iterator, iteratee, body ], for_map(for_t, in_t, do_t, end_t)) end # Keywords def keyword_cmd(type, keyword_t, lparen_t=nil, args=[], rparen_t=nil) if type == :yield && args.count > 0 last_arg = args.last if last_arg.type == :block_pass diagnostic :error, :block_given_to_yield, nil, loc(keyword_t), [last_arg.loc.expression] end end n(type, args, keyword_map(keyword_t, lparen_t, args, rparen_t)) end # BEGIN, END def preexe(preexe_t, lbrace_t, compstmt, rbrace_t) n(:preexe, [ compstmt ], keyword_map(preexe_t, lbrace_t, [], rbrace_t)) end def postexe(postexe_t, lbrace_t, compstmt, rbrace_t) n(:postexe, [ compstmt ], keyword_map(postexe_t, lbrace_t, [], rbrace_t)) end # Exception handling def rescue_body(rescue_t, exc_list, assoc_t, exc_var, then_t, compound_stmt) n(:resbody, [ exc_list, exc_var, compound_stmt ], rescue_body_map(rescue_t, exc_list, assoc_t, exc_var, then_t, compound_stmt)) end def begin_body(compound_stmt, rescue_bodies=[], else_t=nil, else_=nil, ensure_t=nil, ensure_=nil) if rescue_bodies.any? if else_t compound_stmt = n(:rescue, [ compound_stmt, *(rescue_bodies + [ else_ ]) ], eh_keyword_map(compound_stmt, nil, rescue_bodies, else_t, else_)) else compound_stmt = n(:rescue, [ compound_stmt, *(rescue_bodies + [ nil ]) ], eh_keyword_map(compound_stmt, nil, rescue_bodies, nil, nil)) end elsif else_t statements = [] if !compound_stmt.nil? if compound_stmt.type == :begin statements += compound_stmt.children else statements.push(compound_stmt) end end statements.push( n(:begin, [ else_ ], collection_map(else_t, [ else_ ], nil))) compound_stmt = n(:begin, statements, collection_map(nil, statements, nil)) end if ensure_t compound_stmt = n(:ensure, [ compound_stmt, ensure_ ], eh_keyword_map(compound_stmt, ensure_t, [ ensure_ ], nil, nil)) end compound_stmt end # # Expression grouping # def compstmt(statements) case when statements.none? nil when statements.one? statements.first else n(:begin, statements, collection_map(nil, statements, nil)) end end def begin(begin_t, body, end_t) if body.nil? # A nil expression: `()'. n0(:begin, collection_map(begin_t, nil, end_t)) elsif body.type == :mlhs || (body.type == :begin && body.loc.begin.nil? && body.loc.end.nil?) # Synthesized (begin) from compstmt "a; b" or (mlhs) # from multi_lhs "(a, b) = *foo". n(body.type, body.children, collection_map(begin_t, body.children, end_t)) else n(:begin, [ body ], collection_map(begin_t, [ body ], end_t)) end end def begin_keyword(begin_t, body, end_t) if body.nil? # A nil expression: `begin end'. n0(:kwbegin, collection_map(begin_t, nil, end_t)) elsif (body.type == :begin && body.loc.begin.nil? && body.loc.end.nil?) # Synthesized (begin) from compstmt "a; b". n(:kwbegin, body.children, collection_map(begin_t, body.children, end_t)) else n(:kwbegin, [ body ], collection_map(begin_t, [ body ], end_t)) end end # # PATTERN MATCHING # def case_match(case_t, expr, in_bodies, else_t, else_body, end_t) n(:case_match, [ expr, *(in_bodies << else_body)], condition_map(case_t, expr, nil, nil, else_t, else_body, end_t)) end def in_match(lhs, in_t, rhs) n(:in_match, [lhs, rhs], binary_op_map(lhs, in_t, rhs)) end def in_pattern(in_t, pattern, guard, then_t, body) children = [pattern, guard, body] n(:in_pattern, children, keyword_map(in_t, then_t, children.compact, nil)) end def if_guard(if_t, if_body) n(:if_guard, [if_body], guard_map(if_t, if_body)) end def unless_guard(unless_t, unless_body) n(:unless_guard, [unless_body], guard_map(unless_t, unless_body)) end def match_var(name_t) name = value(name_t).to_sym check_duplicate_pattern_variable(name, loc(name_t)) @parser.static_env.declare(name) n(:match_var, [ name ], variable_map(name_t)) end def match_hash_var(name_t) name = value(name_t).to_sym expr_l = loc(name_t) name_l = expr_l.adjust(end_pos: -1) check_duplicate_pattern_variable(name, name_l) @parser.static_env.declare(name) n(:match_var, [ name ], Source::Map::Variable.new(name_l, expr_l)) end def match_hash_var_from_str(begin_t, strings, end_t) if strings.length > 1 diagnostic :error, :pm_interp_in_var_name, nil, loc(begin_t).join(loc(end_t)) end string = strings[0] case string.type when :str # MRI supports plain strings in hash pattern matching name, = *string name_l = string.loc.expression check_lvar_name(name, name_l) check_duplicate_pattern_variable(name, name_l) @parser.static_env.declare(name) if (begin_l = string.loc.begin) # exclude beginning of the string from the location of the variable name_l = name_l.adjust(begin_pos: begin_l.length) end if (end_l = string.loc.end) # exclude end of the string from the location of the variable name_l = name_l.adjust(end_pos: -end_l.length) end expr_l = loc(begin_t).join(string.loc.expression).join(loc(end_t)) n(:match_var, [ name.to_sym ], Source::Map::Variable.new(name_l, expr_l)) when :begin match_hash_var_from_str(begin_t, string.children, end_t) end end def match_rest(star_t, name_t = nil) if name_t.nil? n0(:match_rest, unary_op_map(star_t)) else name = match_var(name_t) n(:match_rest, [ name ], unary_op_map(star_t, name)) end end def hash_pattern(lbrace_t, kwargs, rbrace_t) args = check_duplicate_args(kwargs) n(:hash_pattern, args, collection_map(lbrace_t, args, rbrace_t)) end def array_pattern(lbrack_t, elements, rbrack_t) trailing_comma = false elements = elements.map do |element| if element.type == :match_with_trailing_comma trailing_comma = true element.children.first else trailing_comma = false element end end node_type = trailing_comma ? :array_pattern_with_tail : :array_pattern n(node_type, elements, collection_map(lbrack_t, elements, rbrack_t)) end def match_with_trailing_comma(match) n(:match_with_trailing_comma, [ match ], nil) end def const_pattern(const, ldelim_t, pattern, rdelim_t) n(:const_pattern, [const, pattern], collection_map(ldelim_t, [pattern], rdelim_t)) end def pin(pin_t, var) n(:pin, [ var ], send_unary_op_map(pin_t, var)) end def match_alt(left, pipe_t, right) source_map = binary_op_map(left, pipe_t, right) n(:match_alt, [ left, right ], source_map) end def match_as(value, assoc_t, as) source_map = binary_op_map(value, assoc_t, as) n(:match_as, [ value, as ], source_map) end def match_nil_pattern(dstar_t, nil_t) n0(:match_nil_pattern, arg_prefix_map(dstar_t, nil_t)) end def match_pair(label_type, label, value) if label_type == :label check_duplicate_pattern_key(label[0], label[1]) pair_keyword(label, value) else begin_t, parts, end_t = label # quoted label like "label": value if (var_name = static_string(parts)) loc = loc(begin_t).join(loc(end_t)) check_duplicate_pattern_key(var_name, loc) end pair_quoted(begin_t, parts, end_t, value) end end def match_label(label_type, label) if label_type == :label match_hash_var(label) else # quoted label like "label": value begin_t, strings, end_t = label match_hash_var_from_str(begin_t, strings, end_t) end end private # # VERIFICATION # def check_condition(cond) case cond.type when :masgn if @parser.version <= 23 diagnostic :error, :masgn_as_condition, nil, cond.loc.expression else cond end when :begin if cond.children.count == 1 cond.updated(nil, [ check_condition(cond.children.last) ]) else cond end when :and, :or, :irange, :erange lhs, rhs = *cond type = case cond.type when :irange then :iflipflop when :erange then :eflipflop end if [:and, :or].include?(cond.type) && @parser.version == 18 cond else cond.updated(type, [ check_condition(lhs), check_condition(rhs) ]) end when :regexp n(:match_current_line, [ cond ], expr_map(cond.loc.expression)) else cond end end def check_duplicate_args(args, map={}) args.each do |this_arg| case this_arg.type when :arg, :optarg, :restarg, :blockarg, :kwarg, :kwoptarg, :kwrestarg, :shadowarg check_duplicate_arg(this_arg, map) when :procarg0 if this_arg.children[0].is_a?(Symbol) # s(:procarg0, :a) check_duplicate_arg(this_arg, map) else # s(:procarg0, s(:arg, :a), ...) check_duplicate_args(this_arg.children, map) end when :mlhs check_duplicate_args(this_arg.children, map) end end end def check_duplicate_arg(this_arg, map={}) this_name, = *this_arg that_arg = map[this_name] that_name, = *that_arg if that_arg.nil? map[this_name] = this_arg elsif arg_name_collides?(this_name, that_name) diagnostic :error, :duplicate_argument, nil, this_arg.loc.name, [ that_arg.loc.name ] end end def check_assignment_to_numparam(node) name = node.children[0].to_s assigning_to_numparam = @parser.context.in_dynamic_block? && name =~ /\A_([1-9])\z/ && @parser.max_numparam_stack.has_numparams? if assigning_to_numparam diagnostic :error, :cant_assign_to_numparam, { :name => name }, node.loc.expression end end def arg_name_collides?(this_name, that_name) case @parser.version when 18 this_name == that_name when 19 # Ignore underscore. this_name != :_ && this_name == that_name else # Ignore everything beginning with underscore. this_name && this_name[0] != '_' && this_name == that_name end end def check_lvar_name(name, loc) if name =~ /\A[[[:lower:]]|_][[[:alnum:]]_]*\z/ # OK else diagnostic :error, :lvar_name, { name: name }, loc end end def check_duplicate_pattern_variable(name, loc) return if name.to_s.start_with?('_') if @parser.pattern_variables.declared?(name) diagnostic :error, :duplicate_variable_name, { name: name.to_s }, loc end @parser.pattern_variables.declare(name) end def check_duplicate_pattern_key(name, loc) if @parser.pattern_hash_keys.declared?(name) diagnostic :error, :duplicate_pattern_key, { name: name.to_s }, loc end @parser.pattern_hash_keys.declare(name) end # # SOURCE MAPS # def n(type, children, source_map) AST::Node.new(type, children, :location => source_map) end def n0(type, source_map) n(type, [], source_map) end def join_exprs(left_expr, right_expr) left_expr.loc.expression. join(right_expr.loc.expression) end def token_map(token) Source::Map.new(loc(token)) end def delimited_string_map(string_t) str_range = loc(string_t) begin_l = str_range.with(end_pos: str_range.begin_pos + 1) end_l = str_range.with(begin_pos: str_range.end_pos - 1) Source::Map::Collection.new(begin_l, end_l, loc(string_t)) end def prefix_string_map(symbol) str_range = loc(symbol) begin_l = str_range.with(end_pos: str_range.begin_pos + 1) Source::Map::Collection.new(begin_l, nil, loc(symbol)) end def unquoted_map(token) Source::Map::Collection.new(nil, nil, loc(token)) end def pair_keyword_map(key_t, value_e) key_range = loc(key_t) key_l = key_range.adjust(end_pos: -1) colon_l = key_range.with(begin_pos: key_range.end_pos - 1) [ # key map Source::Map::Collection.new(nil, nil, key_l), # pair map Source::Map::Operator.new(colon_l, key_range.join(value_e.loc.expression)) ] end def pair_quoted_map(begin_t, end_t, value_e) end_l = loc(end_t) quote_l = end_l.with(begin_pos: end_l.end_pos - 2, end_pos: end_l.end_pos - 1) colon_l = end_l.with(begin_pos: end_l.end_pos - 1) [ # modified end token [ value(end_t), quote_l ], # pair map Source::Map::Operator.new(colon_l, loc(begin_t).join(value_e.loc.expression)) ] end def expr_map(loc) Source::Map.new(loc) end def collection_map(begin_t, parts, end_t) if begin_t.nil? || end_t.nil? if parts.any? expr_l = join_exprs(parts.first, parts.last) elsif !begin_t.nil? expr_l = loc(begin_t) elsif !end_t.nil? expr_l = loc(end_t) end else expr_l = loc(begin_t).join(loc(end_t)) end Source::Map::Collection.new(loc(begin_t), loc(end_t), expr_l) end def string_map(begin_t, parts, end_t) if begin_t && value(begin_t).start_with?('<<') if parts.any? expr_l = join_exprs(parts.first, parts.last) else expr_l = loc(end_t).begin end Source::Map::Heredoc.new(loc(begin_t), expr_l, loc(end_t)) else collection_map(begin_t, parts, end_t) end end def regexp_map(begin_t, end_t, options_e) Source::Map::Collection.new(loc(begin_t), loc(end_t), loc(begin_t).join(options_e.loc.expression)) end def constant_map(scope, colon2_t, name_t) if scope.nil? expr_l = loc(name_t) else expr_l = scope.loc.expression.join(loc(name_t)) end Source::Map::Constant.new(loc(colon2_t), loc(name_t), expr_l) end def variable_map(name_t) Source::Map::Variable.new(loc(name_t)) end def binary_op_map(left_e, op_t, right_e) Source::Map::Operator.new(loc(op_t), join_exprs(left_e, right_e)) end def unary_op_map(op_t, arg_e=nil) if arg_e.nil? expr_l = loc(op_t) else expr_l = loc(op_t).join(arg_e.loc.expression) end Source::Map::Operator.new(loc(op_t), expr_l) end def range_map(start_e, op_t, end_e) if start_e && end_e expr_l = join_exprs(start_e, end_e) elsif start_e expr_l = start_e.loc.expression.join(loc(op_t)) elsif end_e expr_l = loc(op_t).join(end_e.loc.expression) end Source::Map::Operator.new(loc(op_t), expr_l) end def arg_prefix_map(op_t, name_t=nil) if name_t.nil? expr_l = loc(op_t) else expr_l = loc(op_t).join(loc(name_t)) end Source::Map::Variable.new(loc(name_t), expr_l) end def kwarg_map(name_t, value_e=nil) label_range = loc(name_t) name_range = label_range.adjust(end_pos: -1) if value_e expr_l = loc(name_t).join(value_e.loc.expression) else expr_l = loc(name_t) end Source::Map::Variable.new(name_range, expr_l) end def module_definition_map(keyword_t, name_e, operator_t, end_t) if name_e name_l = name_e.loc.expression end Source::Map::Definition.new(loc(keyword_t), loc(operator_t), name_l, loc(end_t)) end def definition_map(keyword_t, operator_t, name_t, end_t) Source::Map::Definition.new(loc(keyword_t), loc(operator_t), loc(name_t), loc(end_t)) end def send_map(receiver_e, dot_t, selector_t, begin_t=nil, args=[], end_t=nil) if receiver_e begin_l = receiver_e.loc.expression elsif selector_t begin_l = loc(selector_t) end if end_t end_l = loc(end_t) elsif args.any? end_l = args.last.loc.expression elsif selector_t end_l = loc(selector_t) end Source::Map::Send.new(loc(dot_t), loc(selector_t), loc(begin_t), loc(end_t), begin_l.join(end_l)) end def var_send_map(variable_e) Source::Map::Send.new(nil, variable_e.loc.expression, nil, nil, variable_e.loc.expression) end def send_binary_op_map(lhs_e, selector_t, rhs_e) Source::Map::Send.new(nil, loc(selector_t), nil, nil, join_exprs(lhs_e, rhs_e)) end def send_unary_op_map(selector_t, arg_e) if arg_e.nil? expr_l = loc(selector_t) else expr_l = loc(selector_t).join(arg_e.loc.expression) end Source::Map::Send.new(nil, loc(selector_t), nil, nil, expr_l) end def index_map(receiver_e, lbrack_t, rbrack_t) Source::Map::Index.new(loc(lbrack_t), loc(rbrack_t), receiver_e.loc.expression.join(loc(rbrack_t))) end def send_index_map(receiver_e, lbrack_t, rbrack_t) Source::Map::Send.new(nil, loc(lbrack_t).join(loc(rbrack_t)), nil, nil, receiver_e.loc.expression.join(loc(rbrack_t))) end def block_map(receiver_l, begin_t, end_t) Source::Map::Collection.new(loc(begin_t), loc(end_t), receiver_l.join(loc(end_t))) end def keyword_map(keyword_t, begin_t, args, end_t) args ||= [] if end_t end_l = loc(end_t) elsif args.any? && !args.last.nil? end_l = args.last.loc.expression elsif args.any? && args.count > 1 end_l = args[-2].loc.expression else end_l = loc(keyword_t) end Source::Map::Keyword.new(loc(keyword_t), loc(begin_t), loc(end_t), loc(keyword_t).join(end_l)) end def keyword_mod_map(pre_e, keyword_t, post_e) Source::Map::Keyword.new(loc(keyword_t), nil, nil, join_exprs(pre_e, post_e)) end def condition_map(keyword_t, cond_e, begin_t, body_e, else_t, else_e, end_t) if end_t end_l = loc(end_t) elsif else_e && else_e.loc.expression end_l = else_e.loc.expression elsif loc(else_t) end_l = loc(else_t) elsif body_e && body_e.loc.expression end_l = body_e.loc.expression elsif loc(begin_t) end_l = loc(begin_t) else end_l = cond_e.loc.expression end Source::Map::Condition.new(loc(keyword_t), loc(begin_t), loc(else_t), loc(end_t), loc(keyword_t).join(end_l)) end def ternary_map(begin_e, question_t, mid_e, colon_t, end_e) Source::Map::Ternary.new(loc(question_t), loc(colon_t), join_exprs(begin_e, end_e)) end def for_map(keyword_t, in_t, begin_t, end_t) Source::Map::For.new(loc(keyword_t), loc(in_t), loc(begin_t), loc(end_t), loc(keyword_t).join(loc(end_t))) end def rescue_body_map(keyword_t, exc_list_e, assoc_t, exc_var_e, then_t, compstmt_e) end_l = compstmt_e.loc.expression if compstmt_e end_l = loc(then_t) if end_l.nil? && then_t end_l = exc_var_e.loc.expression if end_l.nil? && exc_var_e end_l = exc_list_e.loc.expression if end_l.nil? && exc_list_e end_l = loc(keyword_t) if end_l.nil? Source::Map::RescueBody.new(loc(keyword_t), loc(assoc_t), loc(then_t), loc(keyword_t).join(end_l)) end def eh_keyword_map(compstmt_e, keyword_t, body_es, else_t, else_e) if compstmt_e.nil? if keyword_t.nil? begin_l = body_es.first.loc.expression else begin_l = loc(keyword_t) end else begin_l = compstmt_e.loc.expression end if else_t if else_e.nil? end_l = loc(else_t) else end_l = else_e.loc.expression end elsif !body_es.last.nil? end_l = body_es.last.loc.expression else end_l = loc(keyword_t) end Source::Map::Condition.new(loc(keyword_t), nil, loc(else_t), nil, begin_l.join(end_l)) end def guard_map(keyword_t, guard_body_e) keyword_l = loc(keyword_t) guard_body_l = guard_body_e.loc.expression Source::Map::Keyword.new(keyword_l, nil, nil, keyword_l.join(guard_body_l)) end # # HELPERS # # Extract a static string from e.g. a regular expression, # honoring the fact that MRI expands interpolations like #{""} # at parse time. def static_string(nodes) nodes.map do |node| case node.type when :str node.children[0] when :begin if (string = static_string(node.children)) string else return nil end else return nil end end.join end def static_regexp(parts, options) source = static_string(parts) return nil if source.nil? source = case when options.children.include?(:u) source.encode(Encoding::UTF_8) when options.children.include?(:e) source.encode(Encoding::EUC_JP) when options.children.include?(:s) source.encode(Encoding::WINDOWS_31J) when options.children.include?(:n) source.encode(Encoding::BINARY) else source end Regexp.new(source, (Regexp::EXTENDED if options.children.include?(:x))) end def static_regexp_node(node) if node.type == :regexp parts, options = node.children[0..-2], node.children[-1] static_regexp(parts, options) end end def collapse_string_parts?(parts) parts.one? && [:str, :dstr].include?(parts.first.type) end def value(token) token[0] end def string_value(token) unless token[0].valid_encoding? diagnostic(:error, :invalid_encoding, nil, token[1]) end token[0] end def loc(token) # Pass through `nil`s and return nil for tNL. token[1] if token && token[0] end def diagnostic(type, reason, arguments, location, highlights=[]) @parser.diagnostics.process( Diagnostic.new(type, reason, arguments, location, highlights)) if type == :error @parser.send :yyerror end end end end parser-2.7.0.2/lib/parser/clobbering_error.rb0000644000004100000410000000051313617025313021112 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # {Parser::ClobberingError} is raised when {Parser::Source::Rewriter} # detects a clobbering rewrite action. This class inherits {RuntimeError} # rather than {StandardError} for backward compatibility. # # @api public # class ClobberingError < RuntimeError end end parser-2.7.0.2/lib/parser/max_numparam_stack.rb0000644000004100000410000000107513617025313021451 0ustar www-datawww-data# frozen_string_literal: true module Parser class MaxNumparamStack attr_reader :stack def initialize @stack = [] end def has_ordinary_params! set(-1) end def has_ordinary_params? top < 0 end def has_numparams? top > 0 end def register(numparam) set( [top, numparam].max ) end def top @stack.last end def push @stack.push(0) end def pop @stack.pop end private def set(value) @stack.pop @stack.push(value) end end end parser-2.7.0.2/lib/parser/lexer.rl0000644000004100000410000020700613617025313016732 0ustar www-datawww-data%%machine lex; # % fix highlighting # # === BEFORE YOU START === # # Read the Ruby Hacking Guide chapter 11, available in English at # http://whitequark.org/blog/2013/04/01/ruby-hacking-guide-ch-11-finite-state-lexer/ # # Remember two things about Ragel scanners: # # 1) Longest match wins. # # 2) If two matches have the same length, the first # in source code wins. # # General rules of making Ragel and Bison happy: # # * `p` (position) and `@te` contain the index of the character # they're pointing to ("current"), plus one. `@ts` contains the index # of the corresponding character. The code for extracting matched token is: # # @source_buffer.slice(@ts...@te) # # * If your input is `foooooooobar` and the rule is: # # 'f' 'o'+ # # the result will be: # # foooooooobar # ^ ts=0 ^ p=te=9 # # * A Ragel lexer action should not emit more than one token, unless # you know what you are doing. # # * All Ragel commands (fnext, fgoto, ...) end with a semicolon. # # * If an action emits the token and transitions to another state, use # these Ragel commands: # # emit($whatever) # fnext $next_state; fbreak; # # If you perform `fgoto` in an action which does not emit a token nor # rewinds the stream pointer, the parser's side-effectful, # context-sensitive lookahead actions will break in a hard to detect # and debug way. # # * If an action does not emit a token: # # fgoto $next_state; # # * If an action features lookbehind, i.e. matches characters with the # intent of passing them to another action: # # p = @ts - 1 # fgoto $next_state; # # or, if the lookbehind consists of a single character: # # fhold; fgoto $next_state; # # * Ragel merges actions. So, if you have `e_lparen = '(' %act` and # `c_lparen = '('` and a lexer action `e_lparen | c_lparen`, the result # _will_ invoke the action `act`. # # e_something stands for "something with **e**mbedded action". # # * EOF is explicit and is matched by `c_eof`. If you want to introspect # the state of the lexer, add this rule to the state: # # c_eof => do_eof; # # * If you proceed past EOF, the lexer will complain: # # NoMethodError: undefined method `ord' for nil:NilClass # class Parser::Lexer %% write data nofinal; # % ESCAPES = { ?a.ord => "\a", ?b.ord => "\b", ?e.ord => "\e", ?f.ord => "\f", ?n.ord => "\n", ?r.ord => "\r", ?s.ord => "\s", ?t.ord => "\t", ?v.ord => "\v", ?\\.ord => "\\" }.freeze REGEXP_META_CHARACTERS = Regexp.union(*"\\$()*+.<>?[]^{|}".chars).freeze attr_reader :source_buffer attr_accessor :diagnostics attr_accessor :static_env attr_accessor :force_utf32 attr_accessor :cond, :cmdarg, :in_kwarg, :context, :command_start attr_accessor :tokens, :comments def initialize(version) @version = version @static_env = nil @context = nil @tokens = nil @comments = nil reset end def reset(reset_state=true) # Ragel state: if reset_state # Unit tests set state prior to resetting lexer. @cs = self.class.lex_en_line_begin @cond = StackState.new('cond') @cmdarg = StackState.new('cmdarg') @cond_stack = [] @cmdarg_stack = [] end @force_utf32 = false # Set to true by some tests @source_pts = nil # @source as a codepoint array @p = 0 # stream position (saved manually in #advance) @ts = nil # token start @te = nil # token end @act = 0 # next action @stack = [] # state stack @top = 0 # state stack top pointer # Lexer state: @token_queue = [] @literal_stack = [] @eq_begin_s = nil # location of last encountered =begin @sharp_s = nil # location of last encountered # @newline_s = nil # location of last encountered newline @num_base = nil # last numeric base @num_digits_s = nil # starting position of numeric digits @num_suffix_s = nil # starting position of numeric suffix @num_xfrm = nil # numeric suffix-induced transformation @escape_s = nil # starting position of current sequence @escape = nil # last escaped sequence, as string @herebody_s = nil # starting position of current heredoc line # Ruby 1.9 ->() lambdas emit a distinct token if do/{ is # encountered after a matching closing parenthesis. @paren_nest = 0 @lambda_stack = [] # After encountering the closing line of <<~SQUIGGLY_HEREDOC, # we store the indentation level and give it out to the parser # on request. It is not possible to infer indentation level just # from the AST because escape sequences such as `\ ` or `\t` are # expanded inside the lexer, but count as non-whitespace for # indentation purposes. @dedent_level = nil # If the lexer is in `command state' (aka expr_value) # at the entry to #advance, it will transition to expr_cmdarg # instead of expr_arg at certain points. @command_start = true # True at the end of "def foo a:" @in_kwarg = false # State before =begin / =end block comment @cs_before_block_comment = self.class.lex_en_line_begin end def source_buffer=(source_buffer) @source_buffer = source_buffer if @source_buffer source = @source_buffer.source if source.encoding == Encoding::UTF_8 @source_pts = source.unpack('U*') else @source_pts = source.unpack('C*') end if @source_pts[0] == 0xfeff # Skip byte order mark. @p = 1 end else @source_pts = nil end end def encoding @source_buffer.source.encoding end LEX_STATES = { :line_begin => lex_en_line_begin, :expr_dot => lex_en_expr_dot, :expr_fname => lex_en_expr_fname, :expr_value => lex_en_expr_value, :expr_beg => lex_en_expr_beg, :expr_mid => lex_en_expr_mid, :expr_arg => lex_en_expr_arg, :expr_cmdarg => lex_en_expr_cmdarg, :expr_end => lex_en_expr_end, :expr_endarg => lex_en_expr_endarg, :expr_endfn => lex_en_expr_endfn, :expr_labelarg => lex_en_expr_labelarg, :interp_string => lex_en_interp_string, :interp_words => lex_en_interp_words, :plain_string => lex_en_plain_string, :plain_words => lex_en_plain_string, } def state LEX_STATES.invert.fetch(@cs, @cs) end def state=(state) @cs = LEX_STATES.fetch(state) end def push_cmdarg @cmdarg_stack.push(@cmdarg) @cmdarg = StackState.new("cmdarg.#{@cmdarg_stack.count}") end def pop_cmdarg @cmdarg = @cmdarg_stack.pop end def push_cond @cond_stack.push(@cond) @cond = StackState.new("cond.#{@cond_stack.count}") end def pop_cond @cond = @cond_stack.pop end def dedent_level # We erase @dedent_level as a precaution to avoid accidentally # using a stale value. dedent_level, @dedent_level = @dedent_level, nil dedent_level end # Return next token: [type, value]. def advance if @token_queue.any? return @token_queue.shift end # Ugly, but dependent on Ragel output. Consider refactoring it somehow. klass = self.class _lex_trans_keys = klass.send :_lex_trans_keys _lex_key_spans = klass.send :_lex_key_spans _lex_index_offsets = klass.send :_lex_index_offsets _lex_indicies = klass.send :_lex_indicies _lex_trans_targs = klass.send :_lex_trans_targs _lex_trans_actions = klass.send :_lex_trans_actions _lex_to_state_actions = klass.send :_lex_to_state_actions _lex_from_state_actions = klass.send :_lex_from_state_actions _lex_eof_trans = klass.send :_lex_eof_trans pe = @source_pts.size + 2 p, eof = @p, pe cmd_state = @command_start @command_start = false %% write exec; # % @p = p if @token_queue.any? @token_queue.shift elsif @cs == klass.lex_error [ false, [ '$error'.freeze, range(p - 1, p) ] ] else eof = @source_pts.size [ false, [ '$eof'.freeze, range(eof, eof) ] ] end end protected def eof_codepoint?(point) [0x04, 0x1a, 0x00].include? point end def version?(*versions) versions.include?(@version) end def stack_pop @top -= 1 @stack[@top] end def encode_escape(ord) ord.chr.force_encoding(@source_buffer.source.encoding) end def tok(s = @ts, e = @te) @source_buffer.slice(s...e) end def range(s = @ts, e = @te) Parser::Source::Range.new(@source_buffer, s, e) end def emit(type, value = tok, s = @ts, e = @te) token = [ type, [ value, range(s, e) ] ] @token_queue.push(token) @tokens.push(token) if @tokens token end def emit_table(table, s = @ts, e = @te) value = tok(s, e) emit(table[value], value, s, e) end def emit_do(do_block=false) if @cond.active? emit(:kDO_COND, 'do'.freeze) elsif @cmdarg.active? || do_block emit(:kDO_BLOCK, 'do'.freeze) else emit(:kDO, 'do'.freeze) end end def arg_or_cmdarg(cmd_state) if cmd_state self.class.lex_en_expr_cmdarg else self.class.lex_en_expr_arg end end def emit_comment(s = @ts, e = @te) if @comments @comments.push(Parser::Source::Comment.new(range(s, e))) end if @tokens @tokens.push([ :tCOMMENT, [ tok(s, e), range(s, e) ] ]) end nil end def diagnostic(type, reason, arguments=nil, location=range, highlights=[]) @diagnostics.process( Parser::Diagnostic.new(type, reason, arguments, location, highlights)) end # # === LITERAL STACK === # def push_literal(*args) new_literal = Literal.new(self, *args) @literal_stack.push(new_literal) next_state_for_literal(new_literal) end def next_state_for_literal(literal) if literal.words? && literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_backslash_delimited_words else self.class.lex_en_plain_backslash_delimited_words end elsif literal.words? && !literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_words else self.class.lex_en_plain_words end elsif !literal.words? && literal.backslash_delimited? if literal.interpolate? self.class.lex_en_interp_backslash_delimited else self.class.lex_en_plain_backslash_delimited end else if literal.interpolate? self.class.lex_en_interp_string else self.class.lex_en_plain_string end end end def literal @literal_stack.last end def pop_literal old_literal = @literal_stack.pop @dedent_level = old_literal.dedent_level if old_literal.type == :tREGEXP_BEG # Fetch modifiers. self.class.lex_en_regexp_modifiers else self.class.lex_en_expr_end end end # Mapping of strings to parser tokens. PUNCTUATION = { '=' => :tEQL, '&' => :tAMPER2, '|' => :tPIPE, '!' => :tBANG, '^' => :tCARET, '+' => :tPLUS, '-' => :tMINUS, '*' => :tSTAR2, '/' => :tDIVIDE, '%' => :tPERCENT, '~' => :tTILDE, ',' => :tCOMMA, ';' => :tSEMI, '.' => :tDOT, '..' => :tDOT2, '...' => :tDOT3, '[' => :tLBRACK2, ']' => :tRBRACK, '(' => :tLPAREN2, ')' => :tRPAREN, '?' => :tEH, ':' => :tCOLON, '&&' => :tANDOP, '||' => :tOROP, '-@' => :tUMINUS, '+@' => :tUPLUS, '~@' => :tTILDE, '**' => :tPOW, '->' => :tLAMBDA, '=~' => :tMATCH, '!~' => :tNMATCH, '==' => :tEQ, '!=' => :tNEQ, '>' => :tGT, '>>' => :tRSHFT, '>=' => :tGEQ, '<' => :tLT, '<<' => :tLSHFT, '<=' => :tLEQ, '=>' => :tASSOC, '::' => :tCOLON2, '===' => :tEQQ, '<=>' => :tCMP, '[]' => :tAREF, '[]=' => :tASET, '{' => :tLCURLY, '}' => :tRCURLY, '`' => :tBACK_REF2, '!@' => :tBANG, '&.' => :tANDDOT, } PUNCTUATION_BEGIN = { '&' => :tAMPER, '*' => :tSTAR, '**' => :tDSTAR, '+' => :tUPLUS, '-' => :tUMINUS, '::' => :tCOLON3, '(' => :tLPAREN, '{' => :tLBRACE, '[' => :tLBRACK, } KEYWORDS = { 'if' => :kIF_MOD, 'unless' => :kUNLESS_MOD, 'while' => :kWHILE_MOD, 'until' => :kUNTIL_MOD, 'rescue' => :kRESCUE_MOD, 'defined?' => :kDEFINED, 'BEGIN' => :klBEGIN, 'END' => :klEND, } KEYWORDS_BEGIN = { 'if' => :kIF, 'unless' => :kUNLESS, 'while' => :kWHILE, 'until' => :kUNTIL, 'rescue' => :kRESCUE, 'defined?' => :kDEFINED, 'BEGIN' => :klBEGIN, 'END' => :klEND, } %w(class module def undef begin end then elsif else ensure case when for break next redo retry in do return yield super self nil true false and or not alias __FILE__ __LINE__ __ENCODING__).each do |keyword| KEYWORDS_BEGIN[keyword] = KEYWORDS[keyword] = :"k#{keyword.upcase}" end %%{ # % access @; getkey (@source_pts[p] || 0); # === CHARACTER CLASSES === # # Pay close attention to the differences between c_any and any. # c_any does not include EOF and so will cause incorrect behavior # for machine subtraction (any-except rules) and default transitions # for scanners. action do_nl { # Record position of a newline for precise location reporting on tNL # tokens. # # This action is embedded directly into c_nl, as it is idempotent and # there are no cases when we need to skip it. @newline_s = p } c_nl = '\n' $ do_nl; c_space = [ \t\r\f\v]; c_space_nl = c_space | c_nl; c_eof = 0x04 | 0x1a | 0 | zlen; # ^D, ^Z, \0, EOF c_eol = c_nl | c_eof; c_any = any - c_eof; c_nl_zlen = c_nl | zlen; c_line = any - c_nl_zlen; c_unicode = c_any - 0x00..0x7f; c_upper = [A-Z]; c_lower = [a-z_] | c_unicode; c_alpha = c_lower | c_upper; c_alnum = c_alpha | [0-9]; action do_eof { # Sit at EOF indefinitely. #advance would return $eof each time. # This allows to feed the lexer more data if needed; this is only used # in tests. # # Note that this action is not embedded into e_eof like e_heredoc_nl and e_bs # below. This is due to the fact that scanner state at EOF is observed # by tests, and encapsulating it in a rule would break the introspection. fhold; fbreak; } # # === TOKEN DEFINITIONS === # # All operators are punctuation. There is more to punctuation # than just operators. Operators can be overridden by user; # punctuation can not. # A list of operators which are valid in the function name context, but # have different semantics in others. operator_fname = '[]' | '[]=' | '`' | '-@' | '+@' | '~@' | '!@' ; # A list of operators which can occur within an assignment shortcut (+ → +=). operator_arithmetic = '&' | '|' | '&&' | '||' | '^' | '+' | '-' | '*' | '/' | '**' | '~' | '<<' | '>>' | '%' ; # A list of all user-definable operators not covered by groups above. operator_rest = '=~' | '!~' | '==' | '!=' | '!' | '===' | '<' | '<=' | '>' | '>=' | '<=>' | '=>' ; # Note that `{` and `}` need to be referred to as e_lbrace and e_rbrace, # as they are ambiguous with interpolation `#{}` and should be counted. # These braces are not present in punctuation lists. # A list of punctuation which has different meaning when used at the # beginning of expression. punctuation_begin = '-' | '+' | '::' | '(' | '[' | '*' | '**' | '&' ; # A list of all punctuation except punctuation_begin. punctuation_end = ',' | '=' | '->' | '(' | '[' | ']' | '::' | '?' | ':' | '.' | '..' | '...' ; # A list of keywords which have different meaning at the beginning of expression. keyword_modifier = 'if' | 'unless' | 'while' | 'until' | 'rescue' ; # A list of keywords which accept an argument-like expression, i.e. have the # same post-processing as method calls or commands. Example: `yield 1`, # `yield (1)`, `yield(1)`, are interpreted as if `yield` was a function. keyword_with_arg = 'yield' | 'super' | 'not' | 'defined?' ; # A list of keywords which accept a literal function name as an argument. keyword_with_fname = 'def' | 'undef' | 'alias' ; # A list of keywords which accept an expression after them. keyword_with_value = 'else' | 'case' | 'ensure' | 'module' | 'elsif' | 'then' | 'for' | 'in' | 'do' | 'when' | 'begin' | 'class' | 'and' | 'or' ; # A list of keywords which accept a value, and treat the keywords from # `keyword_modifier` list as modifiers. keyword_with_mid = 'rescue' | 'return' | 'break' | 'next' ; # A list of keywords which do not accept an expression after them. keyword_with_end = 'end' | 'self' | 'true' | 'false' | 'retry' | 'redo' | 'nil' | 'BEGIN' | 'END' | '__FILE__' | '__LINE__' | '__ENCODING__'; # All keywords. keyword = keyword_with_value | keyword_with_mid | keyword_with_end | keyword_with_arg | keyword_with_fname | keyword_modifier ; constant = c_upper c_alnum*; bareword = c_alpha c_alnum*; call_or_var = c_lower c_alnum*; class_var = '@@' bareword; instance_var = '@' bareword; global_var = '$' ( bareword | digit+ | [`'+~*$&?!@/\\;,.=:<>"] # ` | '-' c_alnum ) ; # Ruby accepts (and fails on) variables with leading digit # in literal context, but not in unquoted symbol body. class_var_v = '@@' c_alnum+; instance_var_v = '@' c_alnum+; label = bareword [?!]? ':'; # # === NUMERIC PARSING === # int_hex = ( xdigit+ '_' )* xdigit* '_'? ; int_dec = ( digit+ '_' )* digit* '_'? ; int_bin = ( [01]+ '_' )* [01]* '_'? ; flo_int = [1-9] [0-9]* ( '_' digit+ )* | '0'; flo_frac = '.' ( digit+ '_' )* digit+; flo_pow = [eE] [+\-]? ( digit+ '_' )* digit+; int_suffix = '' % { @num_xfrm = lambda { |chars| emit(:tINTEGER, chars) } } | 'r' % { @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } } | 'i' % { @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, chars)) } } | 'ri' % { @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } } | 're' % { @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 2); p -= 2 } } | 'if' % { @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 2); p -= 2 } } | 'rescue' % { @num_xfrm = lambda { |chars| emit(:tINTEGER, chars, @ts, @te - 6); p -= 6 } }; flo_pow_suffix = '' % { @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars)) } } | 'i' % { @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Float(chars))) } } | 'if' % { @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars), @ts, @te - 2); p -= 2 } }; flo_suffix = flo_pow_suffix | 'r' % { @num_xfrm = lambda { |chars| emit(:tRATIONAL, Rational(chars)) } } | 'ri' % { @num_xfrm = lambda { |chars| emit(:tIMAGINARY, Complex(0, Rational(chars))) } } | 'rescue' % { @num_xfrm = lambda { |chars| emit(:tFLOAT, Float(chars), @ts, @te - 6); p -= 6 } }; # # === ESCAPE SEQUENCE PARSING === # # Escape parsing code is a Ragel pattern, not a scanner, and therefore # it shouldn't directly raise errors or perform other actions with side effects. # In reality this would probably just mess up error reporting in pathological # cases, through. # The amount of code required to parse \M\C stuff correctly is ridiculous. escaped_nl = "\\" c_nl; action unicode_points { @escape = "" codepoints = tok(@escape_s + 2, p - 1) codepoint_s = @escape_s + 2 if @version < 24 if codepoints.start_with?(" ") || codepoints.start_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s + 2, @escape_s + 3) end if spaces_p = codepoints.index(/[ \t]{2}/) diagnostic :fatal, :invalid_unicode_escape, nil, range(codepoint_s + spaces_p + 1, codepoint_s + spaces_p + 2) end if codepoints.end_with?(" ") || codepoints.end_with?("\t") diagnostic :fatal, :invalid_unicode_escape, nil, range(p - 1, p) end end codepoints.scan(/([0-9a-fA-F]+)|([ \t]+)/).each do |(codepoint_str, spaces)| if spaces codepoint_s += spaces.length else codepoint = codepoint_str.to_i(16) if codepoint >= 0x110000 diagnostic :error, :unicode_point_too_large, nil, range(codepoint_s, codepoint_s + codepoint_str.length) break end @escape += codepoint.chr(Encoding::UTF_8) codepoint_s += codepoint_str.length end end } action unescape_char { codepoint = @source_pts[p - 1] if (@escape = ESCAPES[codepoint]).nil? @escape = encode_escape(@source_buffer.slice(p - 1)) end } action invalid_complex_escape { diagnostic :fatal, :invalid_escape } action read_post_meta_or_ctrl_char { @escape = @source_buffer.slice(p - 1).chr if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) diagnostic :fatal, :invalid_escape end } action slash_c_char { @escape = encode_escape(@escape[0].ord & 0x9f) } action slash_m_char { @escape = encode_escape(@escape[0].ord | 0x80) } maybe_escaped_char = ( '\\' c_any %unescape_char | ( c_any - [\\] ) %read_post_meta_or_ctrl_char ); maybe_escaped_ctrl_char = ( # why?! '\\' c_any %unescape_char %slash_c_char | '?' % { @escape = "\x7f" } | ( c_any - [\\?] ) %read_post_meta_or_ctrl_char %slash_c_char ); escape = ( # \377 [0-7]{1,3} % { @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) } # \xff | 'x' xdigit{1,2} % { @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) } # %q[\x] | 'x' ( c_any - xdigit ) % { diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) } # \u263a | 'u' xdigit{4} % { @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) } # \u123 | 'u' xdigit{0,3} % { diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) } # u{not hex} or u{} | 'u{' ( c_any - xdigit - [ \t}] )* '}' % { diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) } # \u{ \t 123 \t 456 \t\t } | 'u{' [ \t]* ( xdigit{1,6} [ \t]+ )* ( ( xdigit{1,6} [ \t]* '}' %unicode_points ) | ( xdigit* ( c_any - xdigit - [ \t}] )+ '}' | ( c_any - [ \t}] )* c_eof | xdigit{7,} ) % { diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) } ) # \C-\a \cx | ( 'C-' | 'c' ) escaped_nl? maybe_escaped_ctrl_char # \M-a | 'M-' escaped_nl? maybe_escaped_char %slash_m_char # \C-\M-f \M-\cf \c\M-f | ( ( 'C-' | 'c' ) escaped_nl? '\\M-' | 'M-\\' escaped_nl? ( 'C-' | 'c' ) ) escaped_nl? maybe_escaped_ctrl_char %slash_m_char | 'C' c_any %invalid_complex_escape | 'M' c_any %invalid_complex_escape | ( 'M-\\C' | 'C-\\M' ) c_any %invalid_complex_escape | ( c_any - [0-7xuCMc] ) %unescape_char | c_eof % { diagnostic :fatal, :escape_eof, nil, range(p - 1, p) } ); # Use rules in form of `e_bs escape' when you need to parse a sequence. e_bs = '\\' % { @escape_s = p @escape = nil }; # # === STRING AND HEREDOC PARSING === # # Heredoc parsing is quite a complex topic. First, consider that heredocs # can be arbitrarily nested. For example: # # puts <= 2.2 if @version >= 22 && !@cond.active? lookahead = @source_buffer.slice(@te...@te+2) end current_literal = literal if !current_literal.heredoc? && (token = current_literal.nest_and_try_closing(string, @ts, @te, lookahead)) if token[0] == :tLABEL_END p += 1 pop_literal fnext expr_labelarg; else fnext *pop_literal; end fbreak; else current_literal.extend_string(string, @ts, @te) end } action extend_string_escaped { current_literal = literal # Get the first character after the backslash. escaped_char = @source_buffer.slice(@escape_s).chr if current_literal.munge_escape? escaped_char # If this particular literal uses this character as an opening # or closing delimiter, it is an escape sequence for that # particular character. Write it without the backslash. if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) # Regular expressions should include escaped delimiters in their # escaped form, except when the escaped character is # a closing delimiter but not a regexp metacharacter. # # The backslash itself cannot be used as a closing delimiter # at the same time as an escape symbol, but it is always munged, # so this branch also executes for the non-closing-delimiter case # for the backslash. current_literal.extend_string(tok, @ts, @te) else current_literal.extend_string(escaped_char, @ts, @te) end else # It does not. So this is an actual escape sequence, yay! if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze # Squiggly heredocs like # <<~-HERE # 1\ # 2 # HERE # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". # This information is emitted as is, without escaping, # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter current_literal.extend_string(tok, @ts, @te) elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze # Heredocs, regexp and a few other types of literals support line # continuation via \\\n sequence. The code like # "a\ # b" # must be parsed as "ab" current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) elsif current_literal.regexp? # Regular expressions should include escape sequences in their # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) else current_literal.extend_string(@escape || tok, @ts, @te) end end } # Extend a string with a newline or a EOF character. # As heredoc closing line can immediately precede EOF, this action # has to handle such case specially. action extend_string_eol { current_literal = literal if @te == pe diagnostic :fatal, :string_eof, nil, range(current_literal.str_s, current_literal.str_s + 1) end if current_literal.heredoc? line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) if version?(18, 19, 20) # See ruby:c48b4209c line = line.gsub(/\r.*$/, ''.freeze) end # Try ending the heredoc with the complete most recently # scanned line. @herebody_s always refers to the start of such line. if current_literal.nest_and_try_closing(line, @herebody_s, @ts) # Adjust @herebody_s to point to the next line. @herebody_s = @te # Continue regular lexing after the heredoc reference (< 2.7 # If interpolated instance/class variable starts with a digit we parse it as a plain substring # However, "#$1" is still a regular interpolation interp_digit_var = '#' ('@' | '@@') digit c_alpha*; action extend_interp_digit_var { if @version >= 27 literal.extend_string(tok, @ts, @te) else message = tok.start_with?('#@@') ? :cvar_name : :ivar_name diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) end } # Interpolations with code blocks must match nested curly braces, as # interpolation ending is ambiguous with a block ending. So, every # opening and closing brace should be matched with e_[lr]brace rules, # which automatically perform the counting. # # Note that interpolations can themselves be nested, so brace balance # is tied to the innermost literal. # # Also note that literals themselves should not use e_[lr]brace rules # when matching their opening and closing delimiters, as the amount of # braces inside the characters of a string literal is independent. interp_code = '#{'; e_lbrace = '{' % { @cond.push(false); @cmdarg.push(false) current_literal = literal if current_literal current_literal.start_interp_brace end }; e_rbrace = '}' % { current_literal = literal if current_literal if current_literal.end_interp_brace_and_try_closing if version?(18, 19) emit(:tRCURLY, '}'.freeze, p - 1, p) @cond.lexpop @cmdarg.lexpop else emit(:tSTRING_DEND, '}'.freeze, p - 1, p) end if current_literal.saved_herebody_s @herebody_s = current_literal.saved_herebody_s end fhold; fnext *next_state_for_literal(current_literal); fbreak; end end @paren_nest -= 1 }; action extend_interp_code { current_literal = literal current_literal.flush_string current_literal.extend_content emit(:tSTRING_DBEG, '#{'.freeze) if current_literal.heredoc? current_literal.saved_herebody_s = @herebody_s @herebody_s = nil end current_literal.start_interp_brace @command_start = true fnext expr_value; fbreak; } # Actual string parsers are simply combined from the primitives defined # above. interp_words := |* interp_code => extend_interp_code; interp_digit_var => extend_interp_digit_var; interp_var => extend_interp_var; e_bs escape => extend_string_escaped; c_space+ => extend_string_space; c_eol => extend_string_eol; c_any => extend_string; *|; interp_string := |* interp_code => extend_interp_code; interp_digit_var => extend_interp_digit_var; interp_var => extend_interp_var; e_bs escape => extend_string_escaped; c_eol => extend_string_eol; c_any => extend_string; *|; plain_words := |* e_bs c_any => extend_string_escaped; c_space+ => extend_string_space; c_eol => extend_string_eol; c_any => extend_string; *|; plain_string := |* '\\' c_nl => extend_string_eol; e_bs c_any => extend_string_escaped; c_eol => extend_string_eol; c_any => extend_string; *|; interp_backslash_delimited := |* interp_code => extend_interp_code; interp_digit_var => extend_interp_digit_var; interp_var => extend_interp_var; c_eol => extend_string_eol; c_any => extend_string; *|; plain_backslash_delimited := |* c_eol => extend_string_eol; c_any => extend_string; *|; interp_backslash_delimited_words := |* interp_code => extend_interp_code; interp_digit_var => extend_interp_digit_var; interp_var => extend_interp_var; c_space+ => extend_string_space; c_eol => extend_string_eol; c_any => extend_string; *|; plain_backslash_delimited_words := |* c_space+ => extend_string_space; c_eol => extend_string_eol; c_any => extend_string; *|; regexp_modifiers := |* [A-Za-z]+ => { unknown_options = tok.scan(/[^imxouesn]/) if unknown_options.any? diagnostic :error, :regexp_options, { :options => unknown_options.join } end emit(:tREGEXP_OPT) fnext expr_end; fbreak; }; any => { emit(:tREGEXP_OPT, tok(@ts, @te - 1), @ts, @te - 1) fhold; fgoto expr_end; }; *|; # # === WHITESPACE HANDLING === # # Various contexts in Ruby allow various kinds of whitespace # to be used. They are grouped to clarify the lexing machines # and ease collection of comments. # A line of code with inline #comment at end is always equivalent # to a line of code ending with just a newline, so an inline # comment is deemed equivalent to non-newline whitespace # (c_space character class). w_space = c_space+ | '\\' e_heredoc_nl ; w_comment = '#' %{ @sharp_s = p - 1 } # The (p == pe) condition compensates for added "\0" and # the way Ragel handles EOF. c_line* %{ emit_comment(@sharp_s, p == pe ? p - 2 : p) } ; w_space_comment = w_space | w_comment ; # A newline in non-literal context always interoperates with # here document logic and can always be escaped by a backslash, # still interoperating with here document logic in the same way, # yet being invisible to anything else. # # To demonstrate: # # foo = <' %{ tm = p - 2 } | # a=>b a => b '===' %{ tm = p - 3 } # a===b a === b ; ambiguous_symbol_suffix = # actual parsed ambiguous_ident_suffix | '==>' %{ tm = p - 2 } # :a==>b :a= => b ; # Ambiguous with 1.9 hash labels. ambiguous_const_suffix = # actual parsed '::' %{ tm = p - 2 } # A::B A :: B ; # Resolving kDO/kDO_COND/kDO_BLOCK ambiguity requires embedding # @cond/@cmdarg-related code to e_lbrack, e_lparen and e_lbrace. e_lbrack = '[' % { @cond.push(false); @cmdarg.push(false) @paren_nest += 1 }; e_rbrack = ']' % { @paren_nest -= 1 }; # Ruby 1.9 lambdas require parentheses counting in order to # emit correct opening kDO/tLBRACE. e_lparen = '(' % { @cond.push(false); @cmdarg.push(false) @paren_nest += 1 if version?(18) @command_start = true end }; e_rparen = ')' % { @paren_nest -= 1 }; # Ruby is context-sensitive wrt/ local identifiers. action local_ident { emit(:tIDENTIFIER) if !@static_env.nil? && @static_env.declared?(tok) fnext expr_endfn; fbreak; else fnext *arg_or_cmdarg(cmd_state); fbreak; end } # Variable lexing code is accessed from both expressions and # string interpolation related code. # expr_variable := |* global_var => { if tok =~ /^\$([1-9][0-9]*)$/ emit(:tNTH_REF, tok(@ts + 1).to_i) elsif tok =~ /^\$([&`'+])$/ emit(:tBACK_REF) else emit(:tGVAR) end fnext *stack_pop; fbreak; }; class_var_v => { if tok =~ /^@@[0-9]/ diagnostic :error, :cvar_name, { :name => tok } end emit(:tCVAR) fnext *stack_pop; fbreak; }; instance_var_v => { if tok =~ /^@[0-9]/ diagnostic :error, :ivar_name, { :name => tok } end emit(:tIVAR) fnext *stack_pop; fbreak; }; *|; # Literal function name in definition (e.g. `def class`). # Keywords are returned as their respective tokens; this is used # to support singleton def `def self.foo`. Global variables are # returned as `tGVAR`; this is used in global variable alias # statements `alias $a $b`. Symbols are returned verbatim; this # is used in `alias :a :"b#{foo}"` and `undef :a`. # # Transitions to `expr_endfn` afterwards. # expr_fname := |* keyword => { emit_table(KEYWORDS_BEGIN); fnext expr_endfn; fbreak; }; constant => { emit(:tCONSTANT) fnext expr_endfn; fbreak; }; bareword [?=!]? => { emit(:tIDENTIFIER) fnext expr_endfn; fbreak; }; global_var => { p = @ts - 1 fnext expr_end; fcall expr_variable; }; # If the handling was to be delegated to expr_end, # these cases would transition to something else than # expr_endfn, which is incorrect. operator_fname | operator_arithmetic | operator_rest => { emit_table(PUNCTUATION) fnext expr_endfn; fbreak; }; '::' => { fhold; fhold; fgoto expr_end; }; ':' => { fhold; fgoto expr_beg; }; '%s' c_any => { if version?(23) type, delimiter = tok[0..-2], tok[-1].chr fgoto *push_literal(type, delimiter, @ts); else p = @ts - 1 fgoto expr_end; end }; w_any; c_any => { fhold; fgoto expr_end; }; c_eof => do_eof; *|; # After literal function name in definition. Behaves like `expr_end`, # but allows a tLABEL. # # Transitions to `expr_end` afterwards. # expr_endfn := |* label ( any - ':' ) => { emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) fhold; fnext expr_labelarg; fbreak; }; w_space_comment; c_any => { fhold; fgoto expr_end; }; c_eof => do_eof; *|; # Literal function name in method call (e.g. `a.class`). # # Transitions to `expr_arg` afterwards. # expr_dot := |* constant => { emit(:tCONSTANT) fnext *arg_or_cmdarg(cmd_state); fbreak; }; call_or_var => { emit(:tIDENTIFIER) fnext *arg_or_cmdarg(cmd_state); fbreak; }; bareword ambiguous_fid_suffix => { emit(:tFID, tok(@ts, tm), @ts, tm) fnext *arg_or_cmdarg(cmd_state); p = tm - 1; fbreak; }; # See the comment in `expr_fname`. operator_fname | operator_arithmetic | operator_rest => { emit_table(PUNCTUATION) fnext expr_arg; fbreak; }; w_any; c_any => { fhold; fgoto expr_end; }; c_eof => do_eof; *|; # The previous token emitted was a `tIDENTIFIER` or `tFID`; no space # is consumed; the current expression is a command or method call. # expr_arg := |* # # COMMAND MODE SPECIFIC TOKENS # # cmd (1 + 2) # See below the rationale about expr_endarg. w_space+ e_lparen => { if version?(18) emit(:tLPAREN2, '('.freeze, @te - 1, @te) fnext expr_value; fbreak; else emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) fnext expr_beg; fbreak; end }; # meth(1 + 2) # Regular method call. e_lparen => { emit(:tLPAREN2, '('.freeze) fnext expr_beg; fbreak; }; # meth [...] # Array argument. Compare with indexing `meth[...]`. w_space+ e_lbrack => { emit(:tLBRACK, '['.freeze, @te - 1, @te) fnext expr_beg; fbreak; }; # cmd {} # Command: method call without parentheses. w_space* e_lbrace => { if @lambda_stack.last == @paren_nest @lambda_stack.pop emit(:tLAMBEG, '{'.freeze, @te - 1, @te) else emit(:tLCURLY, '{'.freeze, @te - 1, @te) end @command_start = true @paren_nest += 1 fnext expr_value; fbreak; }; # # AMBIGUOUS TOKENS RESOLVED VIA EXPR_BEG # # a?? # Ternary operator '?' c_space_nl => { # Unlike expr_beg as invoked in the next rule, do not warn p = @ts - 1 fgoto expr_end; }; # a ?b, a? ? # Character literal or ternary operator w_space* '?' => { fhold; fgoto expr_beg; }; # a %{1}, a %[1] (but not "a %=1=" or "a % foo") # a /foo/ (but not "a / foo" or "a /=foo") # a < { if tok(tm, tm + 1) == '/'.freeze # Ambiguous regexp literal. diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) end p = tm - 1 fgoto expr_beg; }; # x *1 # Ambiguous splat, kwsplat or block-pass. w_space+ %{ tm = p } ( '+' | '-' | '*' | '&' | '**' ) => { diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, range(tm, @te) p = tm - 1 fgoto expr_beg; }; # x ::Foo # Ambiguous toplevel constant access. w_space+ '::' => { fhold; fhold; fgoto expr_beg; }; # x:b # Symbol. w_space* ':' => { fhold; fgoto expr_beg; }; w_space+ label => { p = @ts - 1; fgoto expr_beg; }; # # AMBIGUOUS TOKENS RESOLVED VIA EXPR_END # # a ? b # Ternary operator. w_space+ %{ tm = p } '?' c_space_nl => { p = tm - 1; fgoto expr_end; }; # x + 1: Binary operator or operator-assignment. w_space* operator_arithmetic ( '=' | c_space_nl )? | # x rescue y: Modifier keyword. w_space* keyword_modifier | # a &. b: Safe navigation operator. w_space* '&.' | # Miscellanea. w_space* punctuation_end => { p = @ts - 1 fgoto expr_end; }; w_space; w_comment => { fgoto expr_end; }; w_newline => { fhold; fgoto expr_end; }; c_any => { fhold; fgoto expr_beg; }; c_eof => do_eof; *|; # The previous token was an identifier which was seen while in the # command mode (that is, the state at the beginning of #advance was # expr_value). This state is very similar to expr_arg, but disambiguates # two very rare and specific condition: # * In 1.8 mode, "foo (lambda do end)". # * In 1.9+ mode, "f x: -> do foo do end end". expr_cmdarg := |* w_space+ e_lparen => { emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) if version?(18) fnext expr_value; fbreak; else fnext expr_beg; fbreak; end }; w_space* 'do' => { if @cond.active? emit(:kDO_COND, 'do'.freeze, @te - 2, @te) else emit(:kDO, 'do'.freeze, @te - 2, @te) end fnext expr_value; fbreak; }; c_any | # Disambiguate with the `do' rule above. w_space* bareword | w_space* label => { p = @ts - 1 fgoto expr_arg; }; c_eof => do_eof; *|; # The rationale for this state is pretty complex. Normally, if an argument # is passed to a command and then there is a block (tLCURLY...tRCURLY), # the block is attached to the innermost argument (`f` in `m f {}`), or it # is a parse error (`m 1 {}`). But there is a special case for passing a single # primary expression grouped with parentheses: if you write `m (1) {}` or # (2.0 only) `m () {}`, then the block is attached to `m`. # # Thus, we recognize the opening `(` of a command (remember, a command is # a method call without parens) as a tLPAREN_ARG; then, in parser, we recognize # `tLPAREN_ARG expr rparen` as a `primary_expr` and before rparen, set the # lexer's state to `expr_endarg`, which makes it emit the possibly following # `{` as `tLBRACE_ARG`. # # The default post-`expr_endarg` state is `expr_end`, so this state also handles # `do` (as `kDO_BLOCK` in `expr_beg`). expr_endarg := |* e_lbrace => { if @lambda_stack.last == @paren_nest @lambda_stack.pop emit(:tLAMBEG, '{'.freeze) else emit(:tLBRACE_ARG, '{'.freeze) end @paren_nest += 1 @command_start = true fnext expr_value; fbreak; }; 'do' => { emit_do(true) fnext expr_value; fbreak; }; w_space_comment; c_any => { fhold; fgoto expr_end; }; c_eof => do_eof; *|; # The rationale for this state is that several keywords accept value # (i.e. should transition to `expr_beg`), do not accept it like a command # (i.e. not an `expr_arg`), and must behave like a statement, that is, # accept a modifier if/while/etc. # expr_mid := |* keyword_modifier => { emit_table(KEYWORDS) fnext expr_beg; fbreak; }; bareword => { p = @ts - 1; fgoto expr_beg; }; w_space_comment; w_newline => { fhold; fgoto expr_end; }; c_any => { fhold; fgoto expr_beg; }; c_eof => do_eof; *|; # Beginning of an expression. # # Don't fallthrough to this state from `c_any`; make sure to handle # `c_space* c_nl` and let `expr_end` handle the newline. # Otherwise code like `f\ndef x` gets glued together and the parser # explodes. # expr_beg := |* # +5, -5, - 5 [+\-] w_any* [0-9] => { emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) fhold; fnext expr_end; fbreak; }; # splat *a '*' => { emit(:tSTAR, '*'.freeze) fbreak; }; # # STRING AND REGEXP LITERALS # # /regexp/oui # /=/ (disambiguation with /=) '/' c_any => { type = delimiter = tok[0].chr fhold; fgoto *push_literal(type, delimiter, @ts); }; # % '%' ( any - [A-Za-z] ) => { type, delimiter = @source_buffer.slice(@ts).chr, tok[-1].chr fgoto *push_literal(type, delimiter, @ts); }; # %w(we are the people) '%' [A-Za-z]+ c_any => { type, delimiter = tok[0..-2], tok[-1].chr fgoto *push_literal(type, delimiter, @ts); }; '%' c_eof => { diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) }; # Heredoc start. # < { tok(@ts, heredoc_e) =~ /^<<(-?)(~?)(["'`]?)(.*)\3$/m indent = !$1.empty? || !$2.empty? dedent_body = !$2.empty? type = $3.empty? ? '<<"'.freeze : ('<<'.freeze + $3) delimiter = $4 if @version >= 27 if delimiter.count("\n") > 0 || delimiter.count("\r") > 0 diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) end elsif @version >= 24 if delimiter.count("\n") > 0 if delimiter.end_with?("\n") diagnostic :warning, :heredoc_id_ends_with_nl, nil, range(@ts, @ts + 1) delimiter = delimiter.rstrip else diagnostic :fatal, :heredoc_id_has_newline, nil, range(@ts, @ts + 1) end end end if dedent_body && version?(18, 19, 20, 21, 22) emit(:tLSHFT, '<<'.freeze, @ts, @ts + 2) p = @ts + 1 fnext expr_beg; fbreak; else fnext *push_literal(type, delimiter, @ts, heredoc_e, indent, dedent_body); @herebody_s ||= new_herebody_s p = @herebody_s - 1 end }; # Escaped unterminated heredoc start # <<'END | <<"END | <<`END | # <<-'END | <<-"END | <<-`END | # <<~'END | <<~"END | <<~`END # # If the heredoc is terminated the rule above should handle it '<<' [~\-]? ('"' (any - c_nl - '"')* |"'" (any - c_nl - "'")* |"`" (any - c_nl - "`") ) => { diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) }; # # SYMBOL LITERALS # # :&&, :|| ':' ('&&' | '||') => { fhold; fhold; emit(:tSYMBEG, tok(@ts, @ts + 1), @ts, @ts + 1) fgoto expr_fname; }; # :"bar", :'baz' ':' ['"] # ' => { type, delimiter = tok, tok[-1].chr fgoto *push_literal(type, delimiter, @ts); }; # :!@ is :! # :~@ is :~ ':' [!~] '@' => { emit(:tSYMBOL, tok(@ts + 1, @ts + 2)) fnext expr_end; fbreak; }; ':' bareword ambiguous_symbol_suffix => { emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) p = tm - 1 fnext expr_end; fbreak; }; ':' ( bareword | global_var | class_var | instance_var | operator_fname | operator_arithmetic | operator_rest ) => { emit(:tSYMBOL, tok(@ts + 1), @ts) fnext expr_end; fbreak; }; ':' ( '@' %{ tm = p - 1; diag_msg = :ivar_name } | '@@' %{ tm = p - 2; diag_msg = :cvar_name } ) [0-9]* => { if @version >= 27 diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) else emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) p = @ts end fnext expr_end; fbreak; }; # # AMBIGUOUS TERNARY OPERATOR # # Character constant, like ?a, ?\n, ?\u1000, and so on # Don't accept \u escape with multiple codepoints, like \u{1 2 3} '?' ( e_bs ( escape - ( '\u{' (xdigit+ [ \t]+)+ xdigit+ '}' )) | (c_any - c_space_nl - e_bs) % { @escape = nil } ) => { value = @escape || tok(@ts + 1) if version?(18) emit(:tINTEGER, value.getbyte(0)) else emit(:tCHARACTER, value) end fnext expr_end; fbreak; }; '?' c_space_nl => { escape = { " " => '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', "\v" => '\v', "\f" => '\f' }[@source_buffer.slice(@ts + 1)] diagnostic :warning, :invalid_escape_use, { :escape => escape }, range p = @ts - 1 fgoto expr_end; }; '?' c_eof => { diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) }; # f ?aa : b: Disambiguate with a character literal. '?' [A-Za-z_] bareword => { p = @ts - 1 fgoto expr_end; }; # # AMBIGUOUS EMPTY BLOCK ARGUMENTS # # Ruby >= 2.7 emits it as two tPIPE terminals # while Ruby < 2.7 as a single tOROP (like in `a || b`) '||' => { if @version >= 27 emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1) fhold; fnext expr_beg; fbreak; else p -= 2 fgoto expr_end; end }; # # KEYWORDS AND PUNCTUATION # # a({b=>c}) e_lbrace => { if @lambda_stack.last == @paren_nest @lambda_stack.pop @command_start = true emit(:tLAMBEG, '{'.freeze) else emit(:tLBRACE, '{'.freeze) end @paren_nest += 1 fbreak; }; # a([1, 2]) e_lbrack => { emit(:tLBRACK, '['.freeze) fbreak; }; # a() e_lparen => { emit(:tLPAREN, '('.freeze) fbreak; }; # a(+b) punctuation_begin => { emit_table(PUNCTUATION_BEGIN) fbreak; }; # rescue Exception => e: Block rescue. # Special because it should transition to expr_mid. 'rescue' %{ tm = p } '=>'? => { emit(:kRESCUE, 'rescue'.freeze, @ts, tm) p = tm - 1 fnext expr_mid; fbreak; }; # if a: Statement if. keyword_modifier => { emit_table(KEYWORDS_BEGIN) @command_start = true fnext expr_value; fbreak; }; # # RUBY 1.9 HASH LABELS # label ( any - ':' ) => { fhold; if version?(18) ident = tok(@ts, @te - 2) emit((@source_buffer.slice(@ts) =~ /[A-Z]/) ? :tCONSTANT : :tIDENTIFIER, ident, @ts, @te - 2) fhold; # continue as a symbol if !@static_env.nil? && @static_env.declared?(ident) fnext expr_end; else fnext *arg_or_cmdarg(cmd_state); end else emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) fnext expr_labelarg; end fbreak; }; # # RUBY 2.7 BEGINLESS RANGE '..' => { if @version >= 27 emit(:tBDOT2) else emit(:tDOT2) end fnext expr_beg; fbreak; }; '...' => { if @version >= 27 emit(:tBDOT3) else emit(:tDOT3) end fnext expr_beg; fbreak; }; # # CONTEXT-DEPENDENT VARIABLE LOOKUP OR COMMAND INVOCATION # # foo= bar: Disambiguate with bareword rule below. bareword ambiguous_ident_suffix | # def foo: Disambiguate with bareword rule below. keyword => { p = @ts - 1 fgoto expr_end; }; # a = 42; a [42]: Indexing. # def a; end; a [42]: Array argument. call_or_var => local_ident; (call_or_var - keyword) % { ident_tok = tok; ident_ts = @ts; ident_te = @te; } w_space+ '(' => { emit(:tIDENTIFIER, ident_tok, ident_ts, ident_te) p = ident_te - 1 if !@static_env.nil? && @static_env.declared?(ident_tok) && @version < 25 fnext expr_endfn; else fnext expr_cmdarg; end fbreak; }; # # WHITESPACE # w_any; e_heredoc_nl '=begin' ( c_space | c_nl_zlen ) => { p = @ts - 1 @cs_before_block_comment = @cs fgoto line_begin; }; # # DEFAULT TRANSITION # # The following rules match most binary and all unary operators. # Rules for binary operators provide better error reporting. operator_arithmetic '=' | operator_rest | punctuation_end | c_any => { p = @ts - 1; fgoto expr_end; }; c_eof => do_eof; *|; # Special newline handling for "def a b:" # expr_labelarg := |* w_space_comment; w_newline => { if @in_kwarg fhold; fgoto expr_end; else fgoto line_begin; end }; c_any => { fhold; fgoto expr_beg; }; c_eof => do_eof; *|; # Like expr_beg, but no 1.9 label or 2.2 quoted label possible. # expr_value := |* # a:b: a(:b), a::B, A::B label (any - ':') => { p = @ts - 1 fgoto expr_end; }; # "bar", 'baz' ['"] # ' => { fgoto *push_literal(tok, tok, @ts); }; w_space_comment; w_newline => { fgoto line_begin; }; c_any => { fhold; fgoto expr_beg; }; c_eof => do_eof; *|; expr_end := |* # # STABBY LAMBDA # '->' => { emit(:tLAMBDA, '->'.freeze, @ts, @ts + 2) @lambda_stack.push @paren_nest fnext expr_endfn; fbreak; }; e_lbrace | 'do' => { if @lambda_stack.last == @paren_nest @lambda_stack.pop if tok == '{'.freeze emit(:tLAMBEG, '{'.freeze) else # 'do' emit(:kDO_LAMBDA, 'do'.freeze) end else if tok == '{'.freeze emit(:tLCURLY, '{'.freeze) else # 'do' emit_do end end if tok == '{'.freeze @paren_nest += 1 end @command_start = true fnext expr_value; fbreak; }; # # KEYWORDS # keyword_with_fname => { emit_table(KEYWORDS) fnext expr_fname; fbreak; }; 'class' w_any* '<<' => { emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) emit(:tLSHFT, '<<'.freeze, @te - 2, @te) fnext expr_value; fbreak; }; # a if b:c: Syntax error. keyword_modifier => { emit_table(KEYWORDS) fnext expr_beg; fbreak; }; # elsif b:c: elsif b(:c) keyword_with_value => { emit_table(KEYWORDS) @command_start = true fnext expr_value; fbreak; }; keyword_with_mid => { emit_table(KEYWORDS) fnext expr_mid; fbreak; }; keyword_with_arg => { emit_table(KEYWORDS) if version?(18) && tok == 'not'.freeze fnext expr_beg; fbreak; else fnext expr_arg; fbreak; end }; '__ENCODING__' => { if version?(18) emit(:tIDENTIFIER) unless !@static_env.nil? && @static_env.declared?(tok) fnext *arg_or_cmdarg(cmd_state); end else emit(:k__ENCODING__, '__ENCODING__'.freeze) end fbreak; }; keyword_with_end => { emit_table(KEYWORDS) fbreak; }; # # NUMERIC LITERALS # ( '0' [Xx] %{ @num_base = 16; @num_digits_s = p } int_hex | '0' [Dd] %{ @num_base = 10; @num_digits_s = p } int_dec | '0' [Oo] %{ @num_base = 8; @num_digits_s = p } int_dec | '0' [Bb] %{ @num_base = 2; @num_digits_s = p } int_bin | [1-9] digit* '_'? %{ @num_base = 10; @num_digits_s = @ts } int_dec | '0' digit* '_'? %{ @num_base = 8; @num_digits_s = @ts } int_dec ) %{ @num_suffix_s = p } int_suffix => { digits = tok(@num_digits_s, @num_suffix_s) if digits.end_with? '_'.freeze diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, range(@te - 1, @te) elsif digits.empty? && @num_base == 8 && version?(18) # 1.8 did not raise an error on 0o. digits = '0'.freeze elsif digits.empty? diagnostic :error, :empty_numeric elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) invalid_s = @num_digits_s + invalid_idx diagnostic :error, :invalid_octal, nil, range(invalid_s, invalid_s + 1) end if version?(18, 19, 20) emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits.to_i(@num_base)) end fbreak; }; flo_frac flo_pow? => { diagnostic :error, :no_dot_digit_literal }; flo_int [eE] => { if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tINTEGER, tok(@ts, @te - 1).to_i, @ts, @te - 1) fhold; fbreak; end }; flo_int flo_frac [eE] => { if version?(18, 19, 20) diagnostic :error, :trailing_in_number, { :character => tok(@te - 1, @te) }, range(@te - 1, @te) else emit(:tFLOAT, tok(@ts, @te - 1).to_f, @ts, @te - 1) fhold; fbreak; end }; flo_int ( flo_frac? flo_pow %{ @num_suffix_s = p } flo_pow_suffix | flo_frac %{ @num_suffix_s = p } flo_suffix ) => { digits = tok(@ts, @num_suffix_s) if version?(18, 19, 20) emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) p = @num_suffix_s - 1 else @num_xfrm.call(digits) end fbreak; }; # # STRING AND XSTRING LITERALS # # `echo foo`, "bar", 'baz' '`' | ['"] # ' => { type, delimiter = tok, tok[-1].chr fgoto *push_literal(type, delimiter, @ts, nil, false, false, true); }; # # CONSTANTS AND VARIABLES # constant => { emit(:tCONSTANT) fnext *arg_or_cmdarg(cmd_state); fbreak; }; constant ambiguous_const_suffix => { emit(:tCONSTANT, tok(@ts, tm), @ts, tm) p = tm - 1; fbreak; }; global_var | class_var_v | instance_var_v => { p = @ts - 1; fcall expr_variable; }; # # METHOD CALLS # '.' | '&.' | '::' => { emit_table(PUNCTUATION) fnext expr_dot; fbreak; }; call_or_var => local_ident; bareword ambiguous_fid_suffix => { if tm == @te # Suffix was consumed, e.g. foo! emit(:tFID) else # Suffix was not consumed, e.g. foo!= emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) p = tm - 1 end fnext expr_arg; fbreak; }; # # OPERATORS # '*' | '=>' => { emit_table(PUNCTUATION) fgoto expr_value; }; # When '|', '~', '!', '=>' are used as operators # they do not accept any symbols (or quoted labels) after. # Other binary operators accept it. ( operator_arithmetic | operator_rest ) - ( '|' | '~' | '!' | '*' ) => { emit_table(PUNCTUATION); fnext expr_value; fbreak; }; ( e_lparen | '|' | '~' | '!' ) => { emit_table(PUNCTUATION) fnext expr_beg; fbreak; }; e_rbrace | e_rparen | e_rbrack => { emit_table(PUNCTUATION) if @version < 24 @cond.lexpop @cmdarg.lexpop else @cond.pop @cmdarg.pop end if tok == '}'.freeze || tok == ']'.freeze if @version >= 25 fnext expr_end; else fnext expr_endarg; end else # ) # fnext expr_endfn; ? end fbreak; }; operator_arithmetic '=' => { emit(:tOP_ASGN, tok(@ts, @te - 1)) fnext expr_beg; fbreak; }; '?' => { emit(:tEH, '?'.freeze) fnext expr_value; fbreak; }; e_lbrack => { emit(:tLBRACK2, '['.freeze) fnext expr_beg; fbreak; }; '...' c_nl => { if @paren_nest == 0 diagnostic :warning, :triple_dot_at_eol, nil, range(@ts, @te - 1) end emit(:tDOT3, '...'.freeze, @ts, @te - 1) fhold; fnext expr_beg; fbreak; }; punctuation_end => { emit_table(PUNCTUATION) fnext expr_beg; fbreak; }; # # WHITESPACE # w_space_comment; w_newline => { fgoto leading_dot; }; ';' => { emit(:tSEMI, ';'.freeze) @command_start = true fnext expr_value; fbreak; }; '\\' c_line { diagnostic :error, :bare_backslash, nil, range(@ts, @ts + 1) fhold; }; c_any => { diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } }; c_eof => do_eof; *|; leading_dot := |* # Insane leading dots: # a #comment # # post-2.7 comment # .b: a.b # Here we use '\n' instead of w_newline to not modify @newline_s # and eventually properly emit tNL (w_space_comment '\n')+ => { if @version < 27 # Ruby before 2.7 doesn't support comments before leading dot. # If a line after "a" starts with a comment then "a" is a self-contained statement. # So in that case we emit a special tNL token and start reading the # next line as a separate statement. # # Note: block comments before leading dot are not supported on any version of Ruby. emit(:tNL, nil, @newline_s, @newline_s + 1) fhold; fnext line_begin; fbreak; end }; c_space* %{ tm = p } ('.' | '&.') => { p = tm - 1; fgoto expr_end; }; any => { emit(:tNL, nil, @newline_s, @newline_s + 1) fhold; fnext line_begin; fbreak; }; *|; # # === EMBEDDED DOCUMENT (aka BLOCK COMMENT) PARSING === # line_comment := |* '=end' c_line* c_nl_zlen => { emit_comment(@eq_begin_s, @te) fgoto *@cs_before_block_comment; }; c_line* c_nl; c_line* zlen => { diagnostic :fatal, :embedded_document, nil, range(@eq_begin_s, @eq_begin_s + '=begin'.length) }; *|; line_begin := |* w_any; '=begin' ( c_space | c_nl_zlen ) => { @eq_begin_s = @ts fgoto line_comment; }; '__END__' ( c_eol - zlen ) => { p = pe - 3 }; c_any => { cmd_state = true; fhold; fgoto expr_value; }; c_eof => do_eof; *|; }%% # % end parser-2.7.0.2/lib/parser/ruby19.rb0000644000004100000410000071557213617025313016750 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby19 < Parser::Base def version 19 end def default_encoding Encoding::BINARY end ##### State transition tables begin ### clist = [ '-455,-99,205,206,229,542,665,-455,-455,-455,817,742,-455,-455,-455,258', '-455,679,-98,526,525,524,619,527,-455,542,-455,-455,-455,105,511,563', '498,510,104,-103,-455,-455,688,-455,-455,-455,-455,-455,542,-101,542', '209,-100,-104,-99,584,542,-100,208,-460,618,688,511,-98,-101,513,-460', '-101,-96,-97,-455,-455,-455,-455,-455,-455,-455,-455,-455,-455,-455', '-455,-455,-455,229,-103,-455,-455,-455,-98,-455,-455,229,688,-455,209', '105,-455,-455,899,-455,104,-455,229,-455,257,-455,-455,-455,-455,-455', '-455,-455,-530,-455,664,-455,-526,583,-99,-530,-530,-530,105,-99,609', '-530,-530,104,-530,-455,-455,-455,-455,-526,-455,-98,-455,-530,-455', '562,-98,105,105,-94,-82,799,104,104,-530,-530,-68,-530,-530,-530,-530', '-530,-91,-95,-90,105,105,105,-101,105,104,104,104,-101,104,105,-100', '-92,-87,-88,104,-100,258,-102,-530,-530,-530,-530,-530,-530,-530,-530', '-530,-530,-530,-530,-530,-530,105,-89,-530,-530,-530,104,603,205,206', '511,-530,428,513,-530,205,206,205,206,-530,258,-530,606,-530,-530,-530', '-530,-530,-530,-530,-467,-530,-530,-530,573,619,-92,105,-452,253,-523', '-396,104,619,229,-452,-281,-530,-530,253,-91,-527,-530,-281,-281,-281', '-100,-527,-281,-281,-281,-104,-281,209,679,-90,526,525,524,618,527,257', '-281,-281,-281,511,226,618,513,-97,228,227,-281,-281,253,-281,-281,-281', '-281,-281,596,-93,-452,-396,498,575,574,571,209,-452,-396,675,-92,807', '-523,209,257,209,-452,-396,-466,741,-281,-281,-281,-281,-281,-281,-281', '-281,-281,-281,-281,-281,-281,-281,-523,-396,-281,-281,-281,-90,744', '-281,595,597,-281,-94,-92,-281,-281,-92,-281,-103,-281,573,-281,-92', '-281,-281,-281,-281,-281,-281,-281,-281,-281,573,-281,-96,-99,598,-281', '-281,-281,-467,619,-90,-281,-281,-90,-281,-281,-281,-281,-281,-90,-281', '-90,-281,229,-102,-455,-530,-99,105,-462,794,656,-455,104,-281,-281', '-462,-281,-281,-281,-281,-281,679,618,526,525,524,-92,527,575,574,-88', '573,-101,656,226,548,-97,720,228,227,575,574,578,-281,-281,-281,-281', '-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-530,573,-281,-281', '-281,554,602,-530,209,555,-281,591,-526,-281,573,-524,-530,-466,-281', '-260,-281,-262,-281,-281,-281,-281,-281,-281,-281,76,-281,589,-281,568', '-530,575,574,580,77,-530,569,586,790,493,494,-530,-281,-281,78,-93,203', '-281,-530,-530,-530,-102,816,-530,-530,-530,-87,-530,575,574,585,553', '-96,-455,205,206,-530,-530,-530,-530,-455,575,574,576,819,-524,821,-530', '-530,-455,-530,-530,-530,-530,-530,-464,824,-530,825,-95,753,-461,-464', '727,-530,-104,831,-524,-461,-526,381,-464,832,-530,552,383,382,-530', '-530,-530,-530,-530,-530,-530,-530,-530,-530,-530,-530,-530,-530,-530', '201,-530,-530,-530,-463,743,-530,202,834,-530,835,-463,-530,-530,-89', '-530,200,-530,649,-530,-98,-530,-530,-530,-530,-530,-530,-530,105,-530', '-530,-530,754,104,526,525,524,679,527,526,525,524,373,527,-324,-530', '-530,-530,-530,-452,-530,-324,-530,548,-100,844,-452,-452,-452,475,-324', '-452,-452,-452,679,-452,526,525,524,531,527,205,206,-452,675,-452,-452', '-452,535,534,538,537,209,859,848,-452,-452,-459,-452,-452,-452,-452', '-452,679,-459,526,525,524,424,527,679,675,526,525,524,425,527,851,105', '853,678,855,753,104,426,-452,-452,-452,-452,-452,-452,-452,-452,-452', '-452,-452,-452,-452,-452,855,675,-452,-452,-452,-464,-452,-452,675,209', '-452,515,-464,-452,-452,860,-452,678,-452,514,-452,-464,-452,-452,-452', '-452,-452,-452,-452,-465,-452,679,-452,526,525,524,-465,527,829,862', '526,525,524,250,527,-465,-452,-452,-452,-452,251,-452,864,-452,507,-452', '278,66,67,68,9,54,-458,506,-457,60,61,229,531,-458,64,-457,62,63,65', '29,30,69,70,538,537,794,656,500,28,27,26,93,92,94,95,499,829,19,526', '525,524,870,527,8,44,495,10,97,96,98,87,53,89,88,90,872,91,99,100,209', '85,86,41,42,40,679,875,526,525,524,-263,527,253,679,209,526,525,524', '105,527,205,206,262,104,39,304,305,32,491,484,55,56,483,882,57,679,34', '526,525,524,43,527,675,529,489,526,525,524,20,527,531,490,883,84,76', '79,80,209,81,82,488,538,537,77,83,278,66,67,68,9,54,59,675,78,60,61', '886,-67,-526,64,531,62,63,65,29,30,69,70,891,535,534,538,537,28,27,26', '93,92,94,95,714,715,19,855,716,99,100,892,8,44,893,10,97,96,98,87,53', '89,88,90,475,91,99,100,473,85,86,41,42,40,679,471,526,525,524,462,527', '208,679,901,526,525,524,430,527,903,-274,501,904,39,550,909,32,-274', '502,55,56,551,429,57,911,34,-274,426,914,43,549,675,754,558,526,525', '524,20,527,531,557,916,84,76,79,80,855,81,82,559,538,537,77,83,278,66', '67,68,9,54,59,855,78,60,61,901,921,506,64,531,62,63,65,29,30,69,70,427', '535,534,538,537,28,27,26,93,92,94,95,384,101,19,108,109,110,111,112', '8,44,929,10,97,96,98,87,53,89,88,90,855,91,99,100,855,85,86,41,42,40', '-282,855,-282,933,371,901,209,-282,679,-282,526,525,524,303,527,302', '-282,248,-282,39,-281,-281,32,-465,204,55,56,-281,-281,57,-465,34,-527', '-527,209,43,-281,-281,754,-465,526,525,524,20,527,531,199,198,84,76', '79,80,197,81,82,855,538,537,77,83,278,66,67,68,9,54,59,113,78,60,61', '901,948,949,64,531,62,63,65,29,30,69,70,951,535,534,538,537,28,27,26', '93,92,94,95,855,855,19,462,462,728,-261,607,8,44,722,10,97,96,98,87', '53,89,88,90,719,91,99,100,209,85,86,41,42,40,229,233,238,239,240,235', '237,245,246,241,242,889,222,223,-274,746,243,244,890,39,691,-274,32', '548,684,55,56,888,682,57,-274,34,226,681,232,43,228,227,224,225,236', '234,230,20,231,473,475,673,84,76,79,80,672,81,82,229,649,558,77,83,209', '247,-275,-237,920,669,59,667,78,-275,-275,-275,253,559,-275,-275,-275', '529,-275,526,525,524,855,527,253,649,656,226,-275,-275,-275,228,227', '224,225,649,229,229,-275,-275,-282,-275,-275,-275,-275,-275,-281,-282', '108,109,110,111,112,-281,531,518,-282,504,-527,767,209,-260,-281,535', '534,538,537,771,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275', '-275,-275,-275,209,229,-275,-275,-275,753,638,-275,-82,209,-275,209', '788,-275,-275,209,-275,209,-275,656,-275,798,-275,-275,-275,-275,-275', '-275,-275,,-275,,-275,226,,,,228,227,224,225,108,109,110,111,112,-275', '-275,-275,-275,,-275,,-275,278,66,67,68,9,54,,,,60,61,,,,64,,62,63,65', '29,30,69,70,108,109,110,111,112,28,27,26,93,92,94,95,,,19,,,,,,8,44', ',10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,679,', '526,525,524,,527,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,529,,526,525,524', '20,527,531,,,84,76,79,80,,81,82,,538,537,77,83,5,66,67,68,9,54,59,,78', '60,61,,,,64,531,62,63,65,29,30,69,70,,535,534,538,537,28,27,26,93,92', '94,95,,,19,,,,,,8,44,7,10,97,96,98,87,53,89,88,90,,91,99,100,,85,86', '41,42,40,,,,,,,,679,,526,525,524,,527,,,,,,39,,,32,,,55,56,,,57,,34', ',,,43,679,,526,525,524,,527,20,531,,,,84,76,79,80,,81,82,538,537,,77', '83,278,66,67,68,9,54,59,,78,60,61,,,531,64,,62,63,65,29,30,69,70,,538', '537,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90', ',91,99,100,,85,86,41,42,40,,,,,,,,,679,,526,525,524,,527,,,,,39,,,32', ',,55,56,,,57,,34,,,,43,,,529,,526,525,524,20,527,531,,,84,76,79,80,', '81,82,,538,537,77,83,278,66,67,68,9,54,59,,78,60,61,,,,64,531,62,63', '65,29,30,69,70,,535,534,538,537,28,27,26,93,92,94,95,,,19,,,,,,8,44', ',10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,679,', '526,525,524,,527,,,,,39,,,280,,,55,56,,,57,,34,,,,43,,,529,,526,525', '524,20,527,531,,,84,76,79,80,,81,82,,538,537,77,83,278,66,67,68,9,54', '59,,78,60,61,,,,64,531,62,63,65,29,30,69,70,,535,534,538,537,28,27,26', '93,92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100,,85', '86,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,280,,,55,56,,,57,,34,,,,43,,,529', ',526,525,524,20,527,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54', '59,,78,60,61,,,,64,531,62,63,65,29,30,69,70,,535,534,538,537,28,27,26', '93,92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100,,85', '86,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,754', ',526,525,524,20,527,,,,84,76,79,80,,81,82,,,,77,83,5,66,67,68,9,54,59', ',78,60,61,,,,64,531,62,63,65,29,30,69,70,,535,534,538,537,28,27,26,93', '92,94,95,,,19,,,,,,8,44,7,10,97,96,98,87,53,89,88,90,,91,99,100,,85', '86,41,42,40,229,-549,-549,-549,-549,235,237,,,-549,-549,,,,,,243,244', ',39,,,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,236,234,230,20', '231,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61,,', ',64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,', '10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,233,238,239', '240,235,237,,,241,242,,,,,,243,244,,39,,,32,,,55,56,,,57,,34,226,,232', '43,228,227,224,225,236,234,230,20,231,,,,84,76,79,80,,81,82,,,,77,83', '278,66,67,68,9,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27', '26,93,92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,229,-549,-549,-549,-549,235,237,,,-549,-549,,,,,,243', '244,,39,,,280,,,55,56,,,57,,34,226,,232,43,228,227,224,225,236,234,230', '20,231,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61', ',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,592,8', '44,,10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,233,238', '239,240,235,237,245,246,241,242,,222,223,,,243,244,,39,,,32,,,55,56', ',,57,,34,226,,232,43,228,227,224,225,236,234,230,20,231,,,,84,76,79', '80,,81,82,,,,77,83,,247,-532,,,,59,,78,-532,-532,-532,,,-532,-532,-532', '529,-532,526,525,524,,527,,,,-532,-532,-532,-532,,,,,,,,-532,-532,,-532', '-532,-532,-532,-532,,,,,,,,,531,709,,,,,,,,535,534,538,537,,-532,-532', '-532,-532,-532,-532,-532,-532,-532,-532,-532,-532,-532,-532,,,-532,-532', '-532,,,-532,,,-532,,,-532,-532,,-532,,-532,,-532,,-532,-532,-532,-532', '-532,-532,-532,-531,-532,-532,-532,,,,-531,-531,-531,,,-531,-531,-531', '229,-531,-532,-532,-532,-532,,-532,,-532,-531,-531,-531,-531,,,243,244', ',,,-531,-531,,-531,-531,-531,-531,-531,,,,226,,232,,228,227,224,225', ',,230,,231,,,,,,,-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,278,66,67,68,9,54,,,,60,61,,,,64', ',62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97', '96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,-549,-549,-549,-549', '235,237,,,-549,-549,,,,,,243,244,,39,,,32,,,55,56,,,57,,34,226,,232', '43,228,227,224,225,236,234,230,20,231,,,,84,76,79,80,,81,82,,,,77,83', '278,66,67,68,9,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27', '26,93,92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,229,233,238,239,240,235,237,245,246,241,242,,-549,-549', ',,243,244,,39,,,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,236', '234,230,20,231,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,', '78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19', ',,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229', '233,238,239,240,235,237,245,246,241,242,,-549,-549,,,243,244,,39,,,32', ',,55,56,,,57,,34,226,,232,43,228,227,224,225,236,234,230,20,231,,,,84', '76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61,,,,64,,62,63', '65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97,96,98', '87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,-549,-549,-549,-549,235', '237,,,-549,-549,,,,,,243,244,,39,,,32,,,55,56,,,57,,34,226,,232,43,228', '227,224,225,236,234,230,20,231,,,,84,76,79,80,,81,82,,,,77,83,278,66', '67,68,9,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93', '92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100,,85,86', '41,42,40,229,-549,-549,-549,-549,235,237,,,-549,-549,,,,,,243,244,,39', ',,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,236,234,230,20,231', ',,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61,,,,64', ',62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97', '96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,,,,,,,,,,,,,,,,243', '244,,39,,,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,,,230,20,231', ',,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61,,,,64', ',62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97', '96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,,,,,,,,,,,,,,,,243', '244,,39,,,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,,,230,20,231', ',,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61,,,,64', ',62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97', '96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,,,,,,,,,,,,,,,,243', '244,,39,,,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,,,230,20,231', ',,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61,,,,64', ',62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97', '96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,-549,-549,-549,-549', '235,237,,,-549,-549,,,,,,243,244,,39,,,32,,,55,56,,,57,,34,226,,232', '43,228,227,224,225,236,234,230,20,231,,,,84,76,79,80,,81,82,,,,77,83', '278,66,67,68,9,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27', '26,93,92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,229,233,238,239,240,235,237,245,,241,242,,,,,,243,244', ',39,,,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,236,234,230,20', '231,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61,,', ',64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,', '10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,,,,,,,,,,', ',,,,,243,244,,39,,,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,', ',,20,,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61', ',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44', ',10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,,,,,,,,,', ',,,,,,243,244,,39,,,32,,,55,56,,,57,,34,226,,,43,228,227,224,225,,,', '20,,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61,,', ',64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,', '10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,,,,,,,,,,', ',,,,,243,244,,39,,,32,,,55,56,,,57,,34,226,,232,43,228,227,224,225,', ',,20,,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54,59,,78,60,61', ',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44', ',10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,', ',,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82', ',,,77,83,278,66,67,68,9,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70', ',,,,,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90', ',91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,', '34,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,278,66,67,68,9,54', '59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,', ',19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40', ',,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,,,,,,20,,,,,84,76', '79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29', '30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89', '88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56', ',,57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,', ',19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,', ',,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,84,76', '79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29', '30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89', '88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56', ',,57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,9,54', '59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,', ',19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40', ',,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,,,,,,20,,,,,84,76', '79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295', '296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,293,,,97,96,98,87', '53,89,88,90,,91,99,100,,85,86,,529,299,526,525,524,,527,,,,,,,,,,,,', ',,289,,,285,,,55,56,,,57,,,,,,531,709,,,,,,,,535,534,538,537,84,76,79', '80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30', '69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,', ',221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,', ',,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,389,,,,43,,,,,,,,219,,,,,84', '76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65', '29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53', '89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55', '56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68', ',54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,,85,86,41', '42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,271,,269,,43,,,,,,', ',219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64', ',62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44', ',,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,', ',,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82', ',,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,', ',,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90', ',91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57', ',,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59', ',78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221', ',,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,', ',,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79', '80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30', '69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,389,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68', ',54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94', '95,,,19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40', ',,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,84,76', '79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29', '30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89', '88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56', ',,57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,', ',19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,', ',,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,84,76', '79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29', '30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89', '88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56', ',,57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,209,66,67,68', '9,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94', '95,,,19,,,,,,8,44,7,10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41', '42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,,,,43,,,,,,,,20,,', ',,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83', ',66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,293,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,,,299,,,,,,,,,,,,,,,,,,,,289,,,285,,,55,56,,,57,,,,,,,,,,,,,', ',,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62', '63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98', '87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,271,,269,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,', ',,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,', '28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91', '99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,271', ',269,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59', ',78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95', ',,221,,,,,,,293,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,,,299,,', ',,,,,,,,,,,,,,,,,289,,,285,,,55,56,,,57,,,,,,,,,,,,,,,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69', '70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42', '40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83', ',66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,', ',,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69', '70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42', '40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83', ',66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,', ',,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69', '70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42', '40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83', ',66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,', ',,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69', '70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42', '40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83', ',66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,', ',,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69', '70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42', '40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83', ',66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,', ',,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69', '70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42', '40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,9,54,59,,78,60,61,,,,64,,62,63', '65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,607,8,44,,10,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,233,238,239,240,235', '237,245,246,241,242,,222,223,,,243,244,,39,,,32,,,55,56,,,57,,34,226', ',232,43,228,227,224,225,236,234,230,20,231,,,,84,76,79,80,,81,82,,,', '77,83,,247,,,,373,59,,78,66,67,68,,54,,,,60,61,,,,64,,62,63,65,295,296', '69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89', '88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56', ',,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,,85,86,41', '42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,269,,43,,,,,,,,219', ',,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62', '63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98', '87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,271,,269,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,', ',,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,', '28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91', '99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,271', ',269,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59', ',78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221', ',,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,', ',,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,271,,269,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,209,66,67,68,,54,59,,78,60,61,,,,64,,62', '63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97', '96,98,87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,', ',,214,,,220,,,55,56,,,57,,633,,269,,43,,,,,,,,219,,,,,84,76,79,80,,81', '82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70', ',,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90', ',91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57', ',,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59', ',78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95', ',,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40', ',,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84', '76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65', '295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98', '87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220', ',,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66', '67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298', '93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85', '86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,', ',219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64', ',62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44', ',,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,', ',,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82', ',,,77,83,,66,67,68,9,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,', ',,28,27,26,93,92,94,95,,,19,,,,,,8,44,,10,97,96,98,87,53,89,88,90,,91', '99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,32,,,55,56,,,57,,34,', ',,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78', '60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221', ',,,,,,293,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,,,299,,,,,,,,', ',,,,,,,,,,,885,,,220,,,55,56,,,57,,,,,,,,,,,,,,,,,,,84,76,79,80,,81', '82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70', ',,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90', ',91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57', ',,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59', ',78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221', ',,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,', ',,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,271,,269,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,293,,,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,,,299,229,233,238,239,240,235,237', '245,246,241,242,,222,223,,,243,244,,289,,,220,,,55,56,,,57,,,226,,232', ',228,227,224,225,236,234,230,,231,,,,84,76,79,80,,81,82,,,,77,83,,247', ',486,,,59,,78,66,67,68,,54,,,,60,61,,,,64,,62,63,65,29,30,69,70,,,,', ',28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99', '100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43', ',,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,725,,,,43,,,,,,,,219,,,,,84,76,79', '80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296', '69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89', '88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56', ',,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,,85,86,41', '42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,269,,43,,,,,,,,219', ',,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62', '63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,293,,,97', '96,98,87,53,89,88,90,,91,99,100,,85,86,,,299,,,,,,,,,,,,,,,,,,,,289', ',,285,,,55,56,,,57,,,,,,,,,,,,,,,,,,,84,76,79,80,,81,82,,,,77,83,,66', '67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298', '93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85', '86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,', ',219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64', ',62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44', ',,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,', ',,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82', ',,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,', ',,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90', ',91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57', ',,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59', ',78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95', ',,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40', ',,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84', '76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65', '295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98', '87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220', ',,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66', '67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298', '93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,', '85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,633,,269,', '43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60', '61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221', ',,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,', ',,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,269,,43,,,,,,,,219,,,,,84', '76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65', '29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53', '89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55', '56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68', ',54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42', '40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87', '53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220', ',,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66', '67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93', '92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86', '41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219', ',,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62', '63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98', '87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220', ',,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66', '67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93', '92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41', '42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,', ',,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87', '53,89,88,90,273,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220', ',,55,56,,,57,,271,,269,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83', ',66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26', '93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85', '86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,', ',219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64', ',62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97', '96,98,87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,', ',,214,,,220,,,55,56,,,57,,271,,269,,43,,,,,,,,219,,,,,84,76,79,80,,81', '82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70', ',,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90', ',91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57', ',271,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,', ',221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,,85,86,41,42,40', ',,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,271,,269,,43,,,,,,,,219,', ',,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62', '63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98', '87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,271,,269,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,', ',,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,', '28,27,26,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91', '99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,271', ',269,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59', ',78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95', ',,221,,,,,,,293,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,,,299,,', ',,,,,,,,,,,,,,,,,289,,,285,,,55,56,,,57,,284,,,,,,,,,,,,,,,,,84,76,79', '80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296', '69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,293,,,97,96,98,87,53', '89,88,90,,91,99,100,,85,86,,,299,229,233,238,239,240,235,237,245,246', '241,242,,222,223,,,243,244,,289,,,220,,,55,56,,,57,,,226,,232,,228,227', '224,225,236,234,230,,231,,,,84,76,79,80,,81,82,,,,77,83,,247,,301,,', '59,,78,66,67,68,,54,,,,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291', '292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99', '100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43', ',,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69', '70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94', '95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42', '40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,', '84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63', '65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96', '98,87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,271,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77', '83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291', '292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,273,91', '99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,', ',,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78', '60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221', ',,,,,,293,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,,,299,,,,,,,,', ',,,,,,,,,,,289,,,285,,,55,56,,,57,,,,,,,,,,,,,,,,,,,84,76,79,80,,81', '82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,', ',,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91', '99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,', ',,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78', '60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,', '81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70', ',,,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91', '99,100,,85,86,41,42,40,229,233,238,239,240,235,237,245,246,241,242,', '222,223,,,243,244,,214,,,220,,,55,56,,,57,,,226,,232,43,228,227,224', '225,236,234,230,20,231,,,,84,76,79,80,,81,82,,,,77,83,105,247,,,,104', '59,,78,66,67,68,,54,,,,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291', '292,298,93,92,94,95,,,221,,,,,,,293,,,97,96,98,87,53,89,88,90,,91,99', '100,,85,86,,,299,,,,,,,,,,,,,,,,,,,,335,,,32,,,55,56,,,57,,34,,,,,,', ',,,,,,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,', '64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,', '293,,,97,96,98,340,53,89,88,341,,91,99,100,,85,86,,,299,,,,,,,,,,,,', ',,,,347,,,342,,,220,,,55,56,,,57,,,,,,,,,,,,,,,,,,,84,76,79,80,,81,82', ',,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,', ',,,291,292,298,93,92,94,95,,,221,,,,,,,293,,,97,96,98,340,53,89,88,341', ',91,99,100,,85,86,,,299,,,,,,,,,,,,,,,,,,,,342,,,220,,,55,56,,,57,,', ',,,,,,,,,,,,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60', '61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221', ',,,,,,44,,,97,96,98,87,53,89,88,90,273,91,99,100,,85,86,41,42,40,,,', ',,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76', '79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295', '296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87', '53,89,88,90,273,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220', ',,55,56,,,57,,633,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,', '66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,389,,,,43', ',,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,9,54,59,,78,60', '61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,8', '44,7,10,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,229,233,238', '239,240,235,237,245,246,241,242,,222,223,,,243,244,,39,,,32,,,55,56', ',,57,,34,226,,232,43,228,227,224,225,236,234,230,20,231,,,,84,76,79', '80,,81,82,,,,77,83,209,247,,,,373,59,,78,66,67,68,,54,,,,60,61,,,,64', ',62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96', '98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214', ',,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83', ',66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,', ',,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44', ',,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,', ',,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82', ',,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,', ',28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99', '100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43', ',,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69', '70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88', '90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,', ',57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54', '59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,', ',19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,', ',,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,84,76', '79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295', '296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87', '53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220', '504,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,', '66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292', '298,93,92,94,95,,,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100', ',85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,633,,,,43', ',,,,,,,219,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44', ',,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,', ',,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82', ',,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69,70,,,,', ',28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99', '100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43', ',,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61', ',,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95,,,221,,,', ',,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,,,,', ',,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79,80', ',81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,29,30,69', '70,,,,,,28,27,26,93,92,94,95,,,19,,,,,,,44,,,97,96,98,87,53,89,88,90', ',91,99,100,,85,86,41,42,40,,,,,,,,,,,,,,,,,,,,214,,,220,,,55,56,,,57', ',,,,,43,,,,,,,,20,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59,', '78,60,61,,,,64,,62,63,65,29,30,69,70,,,,,,28,27,26,93,92,94,95,,,221', ',,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40,,,,,,', ',,,,,,,,,,,,,214,,,220,,,55,56,,,57,,,,,,43,,,,,,,,219,,,,,84,76,79', '80,,81,82,,,,77,83,,66,67,68,,54,59,,78,60,61,,,,64,,62,63,65,295,296', '69,70,,,,,,291,292,298,93,92,94,95,,,221,,,,,,,293,,,97,96,98,87,53', '89,88,90,,91,99,100,,85,86,,,299,,,,,,,,,,,,,,,,,,,,841,,,220,,,55,56', ',,57,,,,,,,,,,,,,,,,,,,84,76,79,80,,81,82,,,,77,83,,66,67,68,,54,59', ',78,60,61,,,,64,,62,63,65,295,296,69,70,,,,,,291,292,298,93,92,94,95', ',,221,,,,,,,44,,,97,96,98,87,53,89,88,90,,91,99,100,,85,86,41,42,40', '229,233,238,239,240,235,237,245,246,241,242,,222,223,,,243,244,,214', ',,220,,,55,56,,,57,,,226,,232,43,228,227,224,225,236,234,230,219,231', ',,,84,76,79,80,,81,82,,,,77,83,,247,-243,,,,59,,78,-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,,253', '-243,,,-243,-243,,-243,,-243,,-243,,-243,-243,-243,-243,-243,-243,-243', '-288,-243,-243,-243,,,,-288,-288,-288,,,-288,-288,-288,,-288,-243,-243', ',-243,,-243,,,,-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,,262,-288,,,-288,-288,,-288', ',-288,,-288,,-288,-288,-288,-288,-288,-288,-288,-243,-288,,-288,,,,-243', '-243,-243,,,-243,-243,-243,,-243,-288,-288,,-288,,-288,,,,-243,,,,,', ',,,,-243,-243,,-243,-243,-243,-243,-243,,,,,,,,,,,,,,,,,,,,,,,-395,', ',,,,,-395,-395,-395,,-243,-395,-395,-395,,-395,,-243,,,,,253,-243,-395', '-395,-395,,,,,,,,,-395,-395,,-395,-395,-395,-395,-395,,,-243,,,,,,,', ',,,,,,-243,,,,,-243,-395,-395,-395,-395,-395,-395,-395,-395,-395,-395', '-395,-395,-395,-395,,,-395,-395,-395,,,-395,,253,-395,,,-395,-395,,-395', ',-395,,-395,,-395,-395,-395,-395,-395,-395,-395,-243,-395,-395,-395', ',,,-243,-243,-243,,,-243,-243,-243,,-243,-395,-395,,-395,,-395,,,,-243', ',,,,,,,,,-243,-243,,-243,-243,-243,-243,-243,,,,,,645,408,,,646,,,,', ',,,149,150,,146,128,129,130,137,134,136,,,131,132,,,-243,151,152,138', '139,,,-243,,,253,,253,-243,,,,,143,142,,127,148,145,144,140,141,135', '133,125,147,126,,,153,-243,,,,,,,,,,,,,,-243,,,,,-243,164,175,165,188', '161,181,171,170,191,192,186,169,168,163,189,193,194,173,162,176,180', '182,174,167,,,,183,190,185,184,177,187,172,160,179,178,,,,,,159,166', '157,158,154,155,156,116,118,,,117,,,,,,,,149,150,,146,128,129,130,137', '134,136,,,131,132,,,,151,152,138,139,,,,,,,,,,,,,,143,142,,127,148,145', '144,140,141,135,133,125,147,126,,,153,84,,,,,,,,,,,83,164,175,165,188', '161,181,171,170,191,192,186,169,168,163,189,193,194,173,162,176,180', '182,174,167,,,,183,190,185,184,177,187,172,160,179,178,,,,,,159,166', '157,158,154,155,156,116,118,115,,117,,,,,,,,149,150,,146,128,129,130', '137,134,136,,,131,132,,,,151,152,138,139,,,,,,,,,,,,,,143,142,,127,148', '145,144,140,141,135,133,125,147,126,,,153,84,,,,,,,,,,,83,164,175,165', '188,161,181,171,170,191,192,186,169,168,163,189,193,194,173,162,176', '180,182,174,167,,,,183,190,185,184,177,187,172,160,179,178,,,,,,159', '166,157,158,154,155,156,116,118,,,117,,,,,,,,149,150,,146,128,129,130', '137,134,136,,,131,132,,,,151,152,138,139,,,,,,,,,,,,,,143,142,,127,148', '145,144,140,141,135,133,125,147,126,,,153,84,,,,,,,,,,,83,164,175,165', '188,161,181,171,170,191,192,186,169,168,163,189,193,194,173,162,176', '180,182,174,167,,,,183,190,185,184,177,187,172,160,179,178,,,,,,159', '166,157,158,154,155,156,116,118,,,117,,,,,,,,149,150,,146,128,129,130', '137,134,136,,,131,132,,,,151,152,138,139,,,,,,,,,,,,,,143,142,,127,148', '145,144,140,141,135,133,125,147,126,,,153,84,,,,,,,,,,,83,164,175,165', '188,161,181,171,170,191,192,186,169,168,163,189,193,194,173,162,176', '180,182,174,167,,,,183,190,185,184,177,187,172,160,179,178,,,,,,159', '166,157,158,154,155,156,116,118,,,117,,,,,,,,149,150,,146,128,129,130', '137,134,136,,,131,132,,,,151,152,138,139,,,,,,,,,,,,,,143,142,,127,148', '145,144,140,141,135,133,125,147,126,,,153,164,175,165,188,161,181,171', '170,191,192,186,169,168,163,189,193,194,173,162,176,180,182,174,167', ',,,183,190,185,358,357,359,356,160,179,178,,,,,,159,166,157,158,353', '354,355,351,118,89,88,352,,91,,,,,,149,150,,146,128,129,130,137,134', '136,,,131,132,,,,151,152,138,139,,,,,,363,,,,,,,,143,142,,127,148,145', '144,140,141,135,133,125,147,126,404,408,153,,403,,,,,,,,149,150,,146', '128,129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,253,,,,,,', ',143,142,,127,148,145,144,140,141,135,133,125,147,126,610,401,153,,611', ',,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132,,,,151,152,138', '139,,,,,,253,,,,,,,,143,142,,127,148,145,144,140,141,135,133,125,147', '126,612,408,153,,613,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131', '132,,,,151,152,138,139,,,,,,253,,,,,,,,143,142,,127,148,145,144,140', '141,135,133,125,147,126,943,408,153,,942,,,,,,,,149,150,,146,128,129', '130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,253,,,,,,,,143,142', ',127,148,145,144,140,141,135,133,125,147,126,642,401,153,,643,,,,,,', ',149,150,,146,128,129,130,137,134,136,,,131,132,,,,151,152,138,139,', ',,,,253,,,,,,,,143,142,,127,148,145,144,140,141,135,133,125,147,126', '459,401,153,,460,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132', ',,,151,152,138,139,,,,,,253,,,,,,,,143,142,,127,148,145,144,140,141', '135,133,125,147,126,699,408,153,,700,,,,,,,,149,150,,146,128,129,130', '137,134,136,,,131,132,,,,151,152,138,139,,,,,,253,,,,,,,,143,142,,127', '148,145,144,140,141,135,133,125,147,126,610,401,153,,611,,,,,,,,149', '150,,146,128,129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,253', ',,,,,,,143,142,,127,148,145,144,140,141,135,133,125,147,126,696,408', '153,,697,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132,,,,151', '152,138,139,,,,,,253,,,,,,,,143,142,,127,148,145,144,140,141,135,133', '125,147,126,694,401,153,,695,,,,,,,,149,150,,146,128,129,130,137,134', '136,,,131,132,,,,151,152,138,139,,,,,,253,,,,,,,,143,142,,127,148,145', '144,140,141,135,133,125,147,126,459,401,153,,460,,,,,,,,149,150,,146', '128,129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,,,,,,,,,143', '142,,127,148,145,144,140,141,135,133,125,147,126,459,401,153,,460,,', ',,,,,149,150,,146,128,129,130,137,134,136,,,131,132,,,,151,152,138,139', ',,,,,,,,,,,,,143,142,,127,148,145,144,140,141,135,133,125,147,126,926', '408,153,,927,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132,', ',,151,152,138,139,,,,,,253,,,,,,,,143,142,,127,148,145,144,140,141,135', '133,125,147,126,612,408,153,,613,,,,,,,,149,150,,146,128,129,130,137', '134,136,,,131,132,,,,151,152,138,139,,,,,,253,,,,,,,,143,142,,127,148', '145,144,140,141,135,133,125,147,126,397,401,153,,398,,,,,,,,149,150', ',146,128,129,130,137,134,136,,,131,132,,,,151,152,138,139,,,,,,253,', ',,,,,,143,142,,127,148,145,144,140,141,135,133,125,147,126,924,401,153', ',925,,,,,,,,149,150,,146,128,129,130,137,134,136,,,131,132,,,,151,152', '138,139,,,,,,253,,,,,,,,143,142,,127,148,145,144,140,141,135,133,125', '147,126,,,153,229,233,238,239,240,235,237,245,246,241,242,,222,223,', ',243,244,,,,,,,,,,,,,,,226,,232,,228,227,224,225,236,234,230,,231,,229', '233,238,239,240,235,237,245,246,241,242,,222,223,,247,243,244,,,,,,', ',,,,,,,,226,,232,,228,227,224,225,236,234,230,,231,,229,233,238,239', '240,235,237,245,246,241,242,,222,223,,247,243,244,,,,,,,,,,,,,,,226', ',232,,228,227,224,225,236,234,230,,231,,229,233,238,239,240,235,237', '245,246,241,242,,222,223,,247,243,244,,,,,,,,,,,,,,,226,,232,,228,227', '224,225,236,234,230,,231,,229,233,238,239,240,235,237,245,246,241,242', ',222,223,,247,243,244,,,,,,,,,,,,,,,226,,232,,228,227,224,225,236,234', '230,,231,,229,233,238,239,240,235,237,245,246,241,242,,222,223,,247', '243,244,,,,,,,,,,,,,,,226,,232,,228,227,224,225,236,234,230,,231,,229', '233,238,239,240,235,237,245,246,241,242,,222,223,,247,243,244,,,,,,', ',,,,,,,,226,,232,,228,227,224,225,236,234,230,,231,,229,233,238,239', '240,235,237,245,246,241,242,,222,223,,247,243,244,,,,,,,,,,,,,,,226', ',232,,228,227,224,225,236,234,230,,231,,229,233,238,239,240,235,237', '245,246,241,242,,222,223,,247,243,244,,,,,,,,,,,,,,,226,,232,,228,227', '224,225,236,234,230,,231,,,,,,,,,,,,,,,,,247' ] racc_action_table = arr = ::Array.new(23417, 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 = [ '90,924,564,564,438,326,517,90,90,90,745,611,90,90,90,58,90,859,944,859', '859,859,467,859,90,692,90,90,90,329,315,346,427,315,329,552,90,90,544', '90,90,90,90,90,863,925,325,693,696,336,694,369,770,926,19,356,467,545', '319,745,611,319,356,695,332,333,90,90,90,90,90,90,90,90,90,90,90,90', '90,90,437,427,90,90,90,801,90,90,436,802,90,19,564,90,90,859,90,564', '90,435,90,58,90,90,90,90,90,90,90,404,90,517,90,696,369,924,404,404', '404,326,924,423,404,404,326,404,90,90,90,90,926,90,944,90,404,90,346', '944,544,692,552,637,692,544,692,404,404,637,404,404,404,404,404,696', '336,694,346,545,863,925,325,346,545,863,925,325,770,926,695,332,333', '770,926,25,697,404,404,404,404,404,404,404,404,404,404,404,404,404,404', '802,801,404,404,404,802,404,570,570,316,404,215,316,404,653,653,421', '421,404,294,404,413,404,404,404,404,404,404,404,213,404,404,404,365', '466,643,276,351,405,340,763,276,625,433,351,613,404,404,25,404,697,404', '613,613,613,404,942,613,613,613,215,613,702,790,642,790,790,790,466', '790,25,613,613,613,662,433,625,662,213,433,433,613,613,294,613,613,613', '613,613,396,697,340,763,303,365,365,365,570,340,763,790,643,707,340', '653,294,421,340,763,212,610,613,613,613,613,613,613,613,613,613,613', '613,613,613,613,340,763,613,613,613,642,613,613,395,397,613,303,643', '613,613,643,613,303,613,581,613,643,613,613,613,613,613,613,613,403', '613,367,613,212,610,398,403,403,403,38,457,642,403,403,642,403,613,613', '613,613,642,613,397,613,434,613,352,699,397,704,353,935,935,352,704', '403,403,353,403,403,403,403,403,678,457,678,678,678,398,678,581,581', '38,368,398,868,434,868,38,581,434,434,367,367,367,403,403,403,403,403', '403,403,403,403,403,403,403,403,403,699,370,403,403,403,342,403,699', '393,342,403,390,699,403,366,341,699,37,403,387,403,724,403,403,403,403', '403,403,403,74,403,385,403,361,699,368,368,368,74,645,361,379,678,299', '299,612,403,403,74,403,15,403,612,612,612,403,729,612,612,612,37,612', '370,370,370,337,37,341,324,324,612,612,612,612,341,366,366,366,747,341', '748,612,612,341,612,612,612,612,612,838,749,645,751,15,752,354,838,593', '645,15,754,341,354,645,115,838,756,645,335,115,115,612,612,612,612,612', '612,612,612,612,612,612,612,612,612,645,14,612,612,612,355,612,612,14', '758,612,759,355,612,612,593,612,14,612,762,612,593,612,612,612,612,612', '612,612,3,612,612,612,618,3,618,618,618,788,618,788,788,788,331,788', '45,612,612,612,612,87,612,45,612,330,612,773,87,87,87,320,45,87,87,87', '675,87,675,675,675,618,675,508,508,87,788,87,87,87,618,618,618,618,777', '788,778,87,87,359,87,87,87,87,87,860,359,860,860,860,211,860,531,675', '531,531,531,211,531,779,563,782,675,783,618,563,211,87,87,87,87,87,87', '87,87,87,87,87,87,87,87,785,860,87,87,87,286,87,87,531,787,87,318,286', '87,87,789,87,531,87,317,87,286,87,87,87,87,87,87,87,287,87,914,87,914', '914,914,287,914,883,792,883,883,883,24,883,287,87,87,87,87,24,87,795', '87,312,87,797,797,797,797,797,797,358,311,357,797,797,308,914,358,797', '357,797,797,797,797,797,797,797,914,914,683,683,305,797,797,797,797', '797,797,797,304,753,797,753,753,753,804,753,797,797,300,797,797,797', '797,797,797,797,797,797,808,797,797,797,809,797,797,797,797,797,899', '812,899,899,899,813,899,298,929,293,929,929,929,710,929,17,17,292,710', '797,40,40,797,289,283,797,797,282,826,797,933,797,933,933,933,797,933', '899,709,288,709,709,709,797,709,929,288,827,797,797,797,797,281,797', '797,288,929,929,797,797,565,565,565,565,565,565,797,933,797,565,565', '833,279,943,565,709,565,565,565,565,565,565,565,841,709,709,709,709', '565,565,565,565,565,565,565,574,574,565,945,574,574,574,845,565,565', '846,565,565,565,565,565,565,565,565,565,270,565,565,565,267,565,565', '565,565,565,901,266,901,901,901,252,901,221,824,861,824,824,824,217', '824,865,290,306,866,565,334,871,565,290,306,565,565,334,216,565,876', '565,290,306,877,565,334,901,819,344,819,819,819,565,819,824,344,878', '565,565,565,565,879,565,565,344,824,824,565,565,628,628,628,628,628', '628,565,881,565,628,628,946,885,887,628,819,628,628,628,628,628,628', '628,214,819,819,819,819,628,628,628,628,628,628,628,195,1,628,6,6,6', '6,6,628,628,894,628,628,628,628,628,628,628,628,628,895,628,628,628', '896,628,628,628,628,628,491,897,555,898,101,900,44,491,851,555,851,851', '851,39,851,36,491,22,555,628,646,700,628,839,16,628,628,646,700,628', '839,628,646,700,923,628,646,700,821,839,821,821,821,628,821,851,13,12', '628,628,628,628,10,628,628,956,851,851,628,628,757,757,757,757,757,757', '628,7,628,757,757,934,936,937,757,821,757,757,757,757,757,757,757,938', '821,821,821,821,757,757,757,757,757,757,757,939,940,757,604,599,594', '590,416,757,757,584,757,757,757,757,757,757,757,757,757,578,757,757', '757,614,757,757,757,757,757,416,416,416,416,416,416,416,416,416,416', '416,840,416,416,842,616,416,416,840,757,547,842,757,546,541,757,757', '840,539,757,842,757,416,536,416,757,416,416,416,416,416,416,416,757', '416,630,632,529,757,757,757,757,522,757,757,453,639,884,757,757,641', '416,53,416,884,521,757,520,757,53,53,53,644,884,53,53,53,323,53,323', '323,323,941,323,647,648,505,453,53,53,53,453,453,453,453,496,651,652', '53,53,891,53,53,53,53,53,927,891,277,277,277,277,277,927,323,323,891', '492,927,654,487,657,927,323,323,323,323,658,53,53,53,53,53,53,53,53', '53,53,53,53,53,53,661,452,53,53,53,666,485,53,482,481,53,468,677,53', '53,464,53,680,53,685,53,690,53,53,53,53,53,53,53,,53,,53,452,,,,452', '452,452,452,636,636,636,636,636,53,53,53,53,,53,,53,54,54,54,54,54,54', ',,,54,54,,,,54,,54,54,54,54,54,54,54,480,480,480,480,480,54,54,54,54', '54,54,54,,,54,,,,,,54,54,,54,54,54,54,54,54,54,54,54,,54,54,54,,54,54', '54,54,54,,,,,,,,,853,,853,853,853,,853,,,,,54,,,54,,,54,54,,,54,,54', ',,,54,,,848,,848,848,848,54,848,853,,,54,54,54,54,,54,54,,853,853,54', '54,0,0,0,0,0,0,54,,54,0,0,,,,0,848,0,0,0,0,0,0,0,,848,848,848,848,0', '0,0,0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,,,,,', ',,855,,855,855,855,,855,,,,,,0,,,0,,,0,0,,,0,,0,,,,0,672,,672,672,672', ',672,0,855,,,,0,0,0,0,,0,0,855,855,,0,0,837,837,837,837,837,837,0,,0', '837,837,,,672,837,,837,837,837,837,837,837,837,,672,672,,,837,837,837', '837,837,837,837,,,837,,,,,,837,837,,837,837,837,837,837,837,837,837', '837,,837,837,837,,837,837,837,837,837,,,,,,,,,951,,951,951,951,,951', ',,,,837,,,837,,,837,837,,,837,,837,,,,837,,,669,,669,669,669,837,669', '951,,,837,837,837,837,,837,837,,951,951,837,837,280,280,280,280,280', '280,837,,837,280,280,,,,280,669,280,280,280,280,280,280,280,,669,669', '669,669,280,280,280,280,280,280,280,,,280,,,,,,280,280,,280,280,280', '280,280,280,280,280,280,,280,280,280,,280,280,280,280,280,,,,,,,,,916', ',916,916,916,,916,,,,,280,,,280,,,280,280,,,280,,280,,,,280,,,667,,667', '667,667,280,667,916,,,280,280,280,280,,280,280,,916,916,280,280,32,32', '32,32,32,32,280,,280,32,32,,,,32,667,32,32,32,32,32,32,32,,667,667,667', '667,32,32,32,32,32,32,32,,,32,,,,,,32,32,,32,32,32,32,32,32,32,32,32', ',32,32,32,,32,32,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32', ',,,32,,,518,,518,518,518,32,518,,,,32,32,32,32,,32,32,,,,32,32,656,656', '656,656,656,656,32,,32,656,656,,,,656,518,656,656,656,656,656,656,656', ',518,518,518,518,656,656,656,656,656,656,656,,,656,,,,,,656,656,,656', '656,656,656,656,656,656,656,656,,656,656,656,,656,656,656,656,656,,', ',,,,,,,,,,,,,,,,,656,,,656,,,656,656,,,656,,656,,,,656,,,911,,911,911', '911,656,911,,,,656,656,656,656,,656,656,,,,656,656,113,113,113,113,113', '113,656,,656,113,113,,,,113,911,113,113,113,113,113,113,113,,911,911', '911,911,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,449,449,449', '449,449,449,449,,,449,449,,,,,,449,449,,113,,,113,,,113,113,,,113,,113', '449,,449,113,449,449,449,449,449,449,449,113,449,,,,113,113,113,113', ',113,113,,,,113,113,620,620,620,620,620,620,113,,113,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,620,620,,620,620,620,,620', '620,620,620,620,454,454,454,454,454,454,454,,,454,454,,,,,,454,454,', '620,,,620,,,620,620,,,620,,620,454,,454,620,454,454,454,454,454,454', '454,620,454,,,,620,620,620,620,,620,620,,,,620,620,285,285,285,285,285', '285,620,,620,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,451,451,451,451,451,451,451', ',,451,451,,,,,,451,451,,285,,,285,,,285,285,,,285,,285,451,,451,285', '451,451,451,451,451,451,451,285,451,,,,285,285,285,285,,285,285,,,,285', '285,220,220,220,220,220,220,285,,285,220,220,,,,220,,220,220,220,220', '220,220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,392,220,220,', '220,220,220,220,220,220,220,220,220,,220,220,220,,220,220,220,220,220', '392,392,392,392,392,392,392,392,392,392,392,,392,392,,,392,392,,220', ',,220,,,220,220,,,220,,220,392,,392,220,392,392,392,392,392,392,392', '220,392,,,,220,220,220,220,,220,220,,,,220,220,,392,409,,,,220,,220', '409,409,409,,,409,409,409,874,409,874,874,874,,874,,,,409,409,409,409', ',,,,,,,409,409,,409,409,409,409,409,,,,,,,,,874,874,,,,,,,,874,874,874', '874,,409,409,409,409,409,409,409,409,409,409,409,409,409,409,,,409,409', '409,,,409,,,409,,,409,409,,409,,409,,409,,409,409,409,409,409,409,409', '408,409,409,409,,,,408,408,408,,,408,408,408,446,408,409,409,409,409', ',409,,409,408,408,408,408,,,446,446,,,,408,408,,408,408,408,408,408', ',,,446,,446,,446,446,446,446,,,446,,446,,,,,,,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,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,450,450,450,450,450,450,450,,,450,450,,,,,,450,450,', '776,,,776,,,776,776,,,776,,776,450,,450,776,450,450,450,450,450,450', '450,776,450,,,,776,776,776,776,,776,776,,,,776,776,543,543,543,543,543', '543,776,,776,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,432,432,432,432,432,432,432', '432,432,432,432,,432,432,,,432,432,,543,,,543,,,543,543,,,543,,543,432', ',432,543,432,432,432,432,432,432,432,543,432,,,,543,543,543,543,,543', '543,,,,543,543,197,197,197,197,197,197,543,,543,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,431,431,431,431,431,431,431,431,431,431,431,,431,431,,,431,431', ',197,,,197,,,197,197,,,197,,197,431,,431,197,431,431,431,431,431,431', '431,197,431,,,,197,197,197,197,,197,197,,,,197,197,800,800,800,800,800', '800,197,,197,800,800,,,,800,,800,800,800,800,800,800,800,,,,,,800,800', '800,800,800,800,800,,,800,,,,,,800,800,,800,800,800,800,800,800,800', '800,800,,800,800,800,,800,800,800,800,800,448,448,448,448,448,448,448', ',,448,448,,,,,,448,448,,800,,,800,,,800,800,,,800,,800,448,,448,800', '448,448,448,448,448,448,448,800,448,,,,800,800,800,800,,800,800,,,,800', '800,806,806,806,806,806,806,800,,800,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,447', '447,447,447,447,447,447,,,447,447,,,,,,447,447,,806,,,806,,,806,806', ',,806,,806,447,,447,806,447,447,447,447,447,447,447,806,447,,,,806,806', '806,806,,806,806,,,,806,806,910,910,910,910,910,910,806,,806,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,445,,,,,,,,,,,,,,,,445,445,,910,,,910,,,910,910', ',,910,,910,445,,445,910,445,445,445,445,,,445,910,445,,,,910,910,910', '910,,910,910,,,,910,910,703,703,703,703,703,703,910,,910,703,703,,,', '703,,703,703,703,703,703,703,703,,,,,,703,703,703,703,703,703,703,,', '703,,,,,,703,703,,703,703,703,703,703,703,703,703,703,,703,703,703,', '703,703,703,703,703,444,,,,,,,,,,,,,,,,444,444,,703,,,703,,,703,703', ',,703,,703,444,,444,703,444,444,444,444,,,444,703,444,,,,703,703,703', '703,,703,703,,,,703,703,708,708,708,708,708,708,703,,703,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,443,,,,,,,,,,,,,,,,443,443,,708,,,708,,,708,708', ',,708,,708,443,,443,708,443,443,443,443,,,443,708,443,,,,708,708,708', '708,,708,708,,,,708,708,540,540,540,540,540,540,708,,708,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,442,442,442,442,442,442,442,,,442,442,,,,,,442,442', ',540,,,540,,,540,540,,,540,,540,442,,442,540,442,442,442,442,442,442', '442,540,442,,,,540,540,540,540,,540,540,,,,540,540,627,627,627,627,627', '627,540,,540,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', '627,627,,627,627,627,,627,627,627,627,627,455,455,455,455,455,455,455', '455,,455,455,,,,,,455,455,,627,,,627,,,627,627,,,627,,627,455,,455,627', '455,455,455,455,455,455,455,627,455,,,,627,627,627,627,,627,627,,,,627', '627,718,718,718,718,718,718,627,,627,718,718,,,,718,,718,718,718,718', '718,718,718,,,,,,718,718,718,718,718,718,718,,,718,,,,,,718,718,,718', '718,718,718,718,718,718,718,718,,718,718,718,,718,718,718,718,718,439', ',,,,,,,,,,,,,,,439,439,,718,,,718,,,718,718,,,718,,718,439,,439,718', '439,439,439,439,,,,718,,,,,718,718,718,718,,718,718,,,,718,718,908,908', '908,908,908,908,718,,718,908,908,,,,908,,908,908,908,908,908,908,908', ',,,,,908,908,908,908,908,908,908,,,908,,,,,,908,908,,908,908,908,908', '908,908,908,908,908,,908,908,908,,908,908,908,908,908,441,,,,,,,,,,', ',,,,,441,441,,908,,,908,,,908,908,,,908,,908,441,,,908,441,441,441,441', ',,,908,,,,,908,908,908,908,,908,908,,,,908,908,902,902,902,902,902,902', '908,,908,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,440,,,,,,,,,,,,,,,,440,440,,902', ',,902,,,902,902,,,902,,902,440,,440,902,440,440,440,440,,,,902,,,,,902', '902,902,902,,902,902,,,,902,902,767,767,767,767,767,767,902,,902,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,,,,,,,,,,,,,,,,,,,,767,,,767,,,767,767,,,767', ',767,,,,767,,,,,,,,767,,,,,767,767,767,767,,767,767,,,,767,767,775,775', '775,775,775,775,767,,767,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,796,796,796,796,796,796,775,,775,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,,109,109,109', ',109,796,,796,109,109,,,,109,,109,109,109,109,109,109,109,,,,,,109,109', '109,109,109,109,109,,,109,,,,,,,109,,,109,109,109,109,109,109,109,109', ',109,109,109,,109,109,109,109,109,,,,,,,,,,,,,,,,,,,,109,,,109,,,109', '109,,,109,,,,,,109,,,,,,,,109,,,,,109,109,109,109,,109,109,,,,109,109', ',110,110,110,,110,109,,109,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,,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,112,111,,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,112,,,,112,112,,649,649,649', ',649,112,,112,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,,566,649,566,566,566,,566,,,,,,,,,,,,,,,649,,', '649,,,649,649,,,649,,,,,,566,566,,,,,,,,566,566,566,566,649,649,649', '649,,649,649,,,,649,649,,504,504,504,,504,649,,649,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,,198,198,198,,198,504,,504,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,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', ',200,200,200,,200,199,,199,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,,,,200,200,,500,500,500,,500,200,,200,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,,499,499,499,,499,500,,500,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,,203,203,203', ',203,499,,499,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,,203,203,203,203,203,,,,,,,,,,,,,,,,,,,,203,,,203,,,203', '203,,,203,,,,,,203,,,,,,,,203,,,,,203,203,203,203,,203,203,,,,203,203', ',204,204,204,,204,203,,203,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,,204,204,204,204,204,,,,,,,,,,,,,,,,,,,,204', ',,204,,,204,204,,,204,,204,,,,204,,,,,,,,204,,,,,204,204,204,204,,204', '204,,,,204,204,,205,205,205,,205,204,,204,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,,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,,207,207,207,,207,206,', '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,,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,208,5,5,5,5,5,208,,208,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5', '5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,', ',,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,5,,,,,5,5,5,5,,5,5,,,,5,5,,498,498', '498,,498,5,,5,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', ',495,495,495,,495,498,,498,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', ',888,888,888,,888,495,,495,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,,488,488,488,,488,888,,888,488,488,,,,488,,488', '488,488,488,488,488,488,,,,,,488,488,488,488,488,488,488,,,488,,,,,', ',488,,,488,488,488,488,488,488,488,488,488,488,488,488,,488,488,488', '488,488,,,,,,,,,,,,,,,,,,,,488,,,488,,,488,488,,,488,,488,,488,,488', ',,,,,,,488,,,,,488,488,488,488,,488,488,,,,488,488,,486,486,486,,486', '488,,488,486,486,,,,486,,486,486,486,486,486,486,486,,,,,,486,486,486', '486,486,486,486,,,486,,,,,,,486,,,486,486,486,486,486,486,486,486,,486', '486,486,,486,486,,,486,,,,,,,,,,,,,,,,,,,,486,,,486,,,486,486,,,486', ',,,,,,,,,,,,,,,,,,486,486,486,486,,486,486,,,,486,486,,219,219,219,', '219,486,,486,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', ',673,673,673,,673,219,,219,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,,,673,673,,,673,,,,,,673,,,,,,,,673,,,,,673,673,673,673,,673,673', ',,,673,673,,222,222,222,,222,673,,673,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,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,,224,224,224,,224,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,,225,225,225', ',225,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', ',226,226,226,,226,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,,227,227,227,,227,226,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,244,244,244,,244,242,,242,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,,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,,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,,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,,479,479,479,479,479,247,,247,479,479,,,,479,,479,479,479', '479,479,479,479,,,,,,479,479,479,479,479,479,479,,,479,,,,,615,479,479', ',479,479,479,479,479,479,479,479,479,,479,479,479,,479,479,479,479,479', '615,615,615,615,615,615,615,615,615,615,615,,615,615,,,615,615,,479', ',,479,,,479,479,,,479,,479,615,,615,479,615,615,615,615,615,615,615', '479,615,,,,479,479,479,479,,479,479,,,,479,479,,615,,,,479,479,,479', '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,475,,473,473,473,,473,475,,475,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,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,,253,253,253,,253,473,,473,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,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,,262,262,262,,262,254,,254,262,262,,,,262,,262,262,262,262', '262,262,262,,,,,,262,262,262,262,262,262,262,,,262,,,,,,,262,,,262,262', '262,262,262,262,262,262,262,262,262,262,,262,262,262,262,262,,,,,,,', ',,,,,,,,,,,,262,,,262,,,262,262,,,262,,262,,262,,262,,,,,,,,262,,,,', '262,262,262,262,,262,262,,,,262,262,262,471,471,471,,471,262,,262,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,471,,269,269', '269,,269,471,,471,269,269,,,,269,,269,269,269,269,269,269,269,,,,,,269', '269,269,269,269,269,269,,,269,,,,,,,269,,,269,269,269,269,269,269,269', '269,,269,269,269,,269,269,269,269,269,,,,,,,,,,,,,,,,,,,,269,,,269,', ',269,269,,,269,,,,,,269,,,,,,,,269,,,,,269,269,269,269,,269,269,,,,269', '269,,430,430,430,,430,269,,269,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,,271,271,271,,271,430,,430,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,,273,273,273,,273,271,,271,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,,429,429,429', ',429,273,,273,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,,,429,,,,,,429,,,,,,,,429,,,,,429,429,429,429,,429,429,,,,429,429', ',278,278,278,278,278,429,,429,278,278,,,,278,,278,278,278,278,278,278', '278,,,,,,278,278,278,278,278,278,278,,,278,,,,,,278,278,,278,278,278', '278,278,278,278,278,278,,278,278,278,,278,278,278,278,278,,,,,,,,,,', ',,,,,,,,,278,,,278,,,278,278,,,278,,278,,,,278,,,,,,,,278,,,,,278,278', '278,278,,278,278,,,,278,278,,831,831,831,,831,278,,278,831,831,,,,831', ',831,831,831,831,831,831,831,,,,,,831,831,831,831,831,831,831,,,831', ',,,,,,831,,,831,831,831,831,831,831,831,831,,831,831,831,,831,831,,', '831,,,,,,,,,,,,,,,,,,,,831,,,831,,,831,831,,,831,,,,,,,,,,,,,,,,,,,831', '831,831,831,,831,831,,,,831,831,,428,428,428,,428,831,,831,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,,428,428,,,,428,428,,426,426,426,,426', '428,,428,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,426,,,,,,,,,,,,,,,,,,,,426,,,426,,,426', '426,,,426,,426,,426,,426,,,,,,,,426,,,,,426,426,426,426,,426,426,,,', '426,426,,284,284,284,,284,426,,426,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,726,726,726,726,726', '726,726,726,726,726,726,,726,726,,,726,726,,284,,,284,,,284,284,,,284', ',,726,,726,,726,726,726,726,726,726,726,,726,,,,284,284,284,284,,284', '284,,,,284,284,,726,,284,,,284,,284,698,698,698,,698,,,,698,698,,,,698', ',698,698,698,698,698,698,698,,,,,,698,698,698,698,698,698,698,,,698', ',,,,,,698,,,698,698,698,698,698,698,698,698,,698,698,698,,698,698,698', '698,698,,,,,,,,,,,,,,,,,,,,698,,,698,,,698,698,,,698,,,,,,698,,,,,,', ',698,,,,,698,698,698,698,,698,698,,,,698,698,,591,591,591,,591,698,', '698,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,,817', '817,817,,817,591,,591,817,817,,,,817,,817,817,817,817,817,817,817,,', ',,,817,817,817,817,817,817,817,,,817,,,,,,,817,,,817,817,817,817,817', '817,817,817,,817,817,817,,817,817,817,817,817,,,,,,,,,,,,,,,,,,,,817', ',,817,,,817,817,,,817,,,,,,817,,,,,,,,817,,,,,817,817,817,817,,817,817', ',,,817,817,,816,816,816,,816,817,,817,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,,,,,,,,816,,,,,816', '816,816,816,,816,816,,,,816,816,,301,301,301,,301,816,,816,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,,389,389,389,,389,301,,301', '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,,243,243,243', ',243,389,,389,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', ',746,746,746,,746,243,,243,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,,592,592,592,,592,746,,746,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,,607,607,607,,607,592,,592,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,,595,595,595,,595,607,,607,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,,596,596', '596,,596,595,,595,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,,597,597,597,,597,596,,596,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,,598,598,598,,598,597,,597,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,,606,606,606,,606,598,,598,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,,602,602,602', ',602,606,,606,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', ',603,603,603,,603,602,,602,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,,562,562,562,,562,603,,603,562,562,,,,562,,562,562,562,562', '562,562,562,,,,,,562,562,562,562,562,562,562,,,562,,,,,,,562,,,562,562', '562,562,562,562,562,562,,562,562,562,,562,562,562,562,562,,,,,,,,,,', ',,,,,,,,,562,,,562,,,562,562,,,562,,,,,,562,,,,,,,,562,,,,,562,562,562', '562,,562,562,,,,562,562,,559,559,559,,559,562,,562,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,,559,559,559', '559,559,,,,,,,,,,,,,,,,,,,,559,,,559,,,559,559,,,559,,559,,559,,559', ',,,,,,,559,,,,,559,559,559,559,,559,559,,,,559,559,,20,20,20,,20,559', ',559,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,,549,549,549,,549,20,,20,549,549,,,,549,,549,549,549', '549,549,549,549,,,,,,549,549,549,549,549,549,549,,,549,,,,,,,549,,,549', '549,549,549,549,549,549,549,549,549,549,549,,549,549,549,549,549,,,', ',,,,,,,,,,,,,,,,549,,,549,,,549,549,,,549,,549,,549,,549,,,,,,,,549', ',,,,549,549,549,549,,549,549,,,,549,549,,548,548,548,,548,549,,549,548', '548,,,,548,,548,548,548,548,548,548,548,,,,,,548,548,548,548,548,548', '548,,,548,,,,,,,548,,,548,548,548,548,548,548,548,548,,548,548,548,', '548,548,548,548,548,,,,,,,,,,,,,,,,,,,,548,,,548,,,548,548,,,548,,548', ',,,548,,,,,,,,548,,,,,548,548,548,548,,548,548,,,,548,548,,28,28,28', ',28,548,,548,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,28,28,28', '28,,,,,,,,,,,,,,,,,,,,28,,,28,,,28,28,,,28,,28,,28,,28,,,,,,,,28,,,', ',28,28,28,28,,28,28,,,,28,28,,29,29,29,,29,28,,28,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,,,,,29,29,29,29,,29,29,,,,29,29,,30', '30,30,,30,29,,29,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,,33,33,33,,33,30,,30,33,33,,,,33', ',33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33', '33,33,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,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,818', '818,818,818,818,818,818,818,818,818,818,,818,818,,,818,818,,34,,,34', ',,34,34,,,34,,,818,,818,,818,818,818,818,818,818,818,,818,,,,34,34,34', '34,,34,34,,,,34,34,,818,,34,,,34,,34,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,,,,41,41,,42,42', '42,,42,41,,41,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,,43,43,43,,43,42,,42,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,,633,633,633', ',633,43,,43,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', ',56,56,56,,56,633,,633,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,,57,57,57,,57,56,,56,57,57,,', ',57,,57,57,57,57,57,57,57,,,,,,57,57,57,57,57,57,57,,,57,,,,,,,57,,', '57,57,57,57,57,57,57,57,57,57,57,57,,57,57,57,57,57,,,,,,,,,,,,,,,,', ',,,57,,,57,,,57,57,,,57,,,,,,57,,,,,,,,57,,,,,57,57,57,57,,57,57,,,', '57,57,,638,638,638,,638,57,,57,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,,60,60,60,,60,638,,638,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,,61,61,61,,61,60,,60,61,61,,,', '61,,61,61,61,61,61,61,61,,,,,,61,61,61,61,61,61,61,,,61,,,,,,,61,,,61', '61,61,61,61,61,61,61,,61,61,61,,61,61,61,61,61,,,,,,,,,,,,,,,,,,,,61', ',,61,,,61,61,,,61,,,,,,61,,,,,,,,61,,,,,61,61,61,61,,61,61,,,,61,61', ',64,64,64,,64,61,,61,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,650,650,650,650,650,650,650,650,650,650,650,,650,650,,,650', '650,,64,,,64,,,64,64,,,64,,,650,,650,64,650,650,650,650,650,650,650', '64,650,,,,64,64,64,64,,64,64,,,,64,64,64,650,,,,64,64,,64,65,65,65,', '65,,,,65,65,,,,65,,65,65,65,65,65,65,65,,,,,,65,65,65,65,65,65,65,,', '65,,,,,,,65,,,65,65,65,65,65,65,65,65,,65,65,65,,65,65,,,65,,,,,,,,', ',,,,,,,,,,,65,,,65,,,65,65,,,65,,65,,,,,,,,,,,,,,,,,65,65,65,65,,65', '65,,,,65,65,,66,66,66,,66,65,,65,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,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,,513,513', '513,,513,67,,67,513,513,,,,513,,513,513,513,513,513,513,513,,,,,,513', '513,513,513,513,513,513,,,513,,,,,,,513,,,513,513,513,513,513,513,513', '513,513,513,513,513,,513,513,513,513,513,,,,,,,,,,,,,,,,,,,,513,,,513', ',,513,513,,,513,,,,,,513,,,,,,,,513,,,,,513,513,513,513,,513,513,,,', '513,513,,510,510,510,,510,513,,513,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,510,,510,510,510,510,510,,,,,,,,,,,', ',,,,,,,,510,,,510,,,510,510,,,510,,510,,,,510,,,,,,,,510,,,,,510,510', '510,510,,510,510,,,,510,510,,506,506,506,,506,510,,510,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,506,,,,506,506,,103,103,103,103,103', '506,,506,103,103,,,,103,,103,103,103,103,103,103,103,,,,,,103,103,103', '103,103,103,103,,,103,,,,,,103,103,103,103,103,103,103,103,103,103,103', '103,,103,103,103,,103,103,103,103,103,456,456,456,456,456,456,456,456', '456,456,456,,456,456,,,456,456,,103,,,103,,,103,103,,,103,,103,456,', '456,103,456,456,456,456,456,456,456,103,456,,,,103,103,103,103,,103', '103,,,,103,103,456,456,,,,103,103,,103,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,,742,742,742,,742', '108,,108,742,742,,,,742,,742,742,742,742,742,742,742,,,,,,742,742,742', '742,742,742,742,,,742,,,,,,,742,,,742,742,742,742,742,742,742,742,,742', '742,742,,742,742,742,742,742,,,,,,,,,,,,,,,,,,,,742,,,742,,,742,742', ',,742,,,,,,742,,,,,,,,742,,,,,742,742,742,742,,742,742,,,,742,742,,327', '327,327,,327,742,,742,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,,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,,743,743,743,,743,328,,328,743,743,,,,743,,743', '743,743,743,743,743,743,,,,,,743,743,743,743,743,743,743,,,743,,,,,', ',743,,,743,743,743,743,743,743,743,743,,743,743,743,,743,743,743,743', '743,,,,,,,,,,,,,,,,,,,,743,,,743,,,743,743,,,743,,,,,,743,,,,,,,,743', ',,,,743,743,743,743,,743,743,,,,743,743,,744,744,744,,744,743,,743,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,744,744,', '744,744,744,744,744,,,,,,,,,,,,,,,,,,,,744,,,744,,,744,744,,,744,,,', ',,744,,,,,,,,744,,,,,744,744,744,744,,744,744,,,,744,744,,347,347,347', ',347,744,,744,347,347,,,,347,,347,347,347,347,347,347,347,,,,,,347,347', '347,347,347,347,347,,,347,,,,,,,347,,,347,347,347,347,347,347,347,347', ',347,347,347,,347,347,347,347,347,,,,,,,,,,,,,,,,,,,,347,,,347,,,347', '347,,,347,,,,,,347,,,,,,,,347,,,,,347,347,347,347,,347,347,,,,347,347', ',310,310,310,,310,347,,347,310,310,,,,310,,310,310,310,310,310,310,310', ',,,,,310,310,310,310,310,310,310,,,310,,,,,,,310,,,310,310,310,310,310', '310,310,310,,310,310,310,,310,310,310,310,310,,,,,,,,,,,,,,,,,,,,310', ',,310,310,,310,310,,,310,,,,,,310,,,,,,,,310,,,,,310,310,310,310,,310', '310,,,,310,310,,799,799,799,,799,310,,310,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,,313,313,313,,313,799,,799,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,,794,794,794,,794', '313,,313,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,,725', '725,725,,725,794,,794,725,725,,,,725,,725,725,725,725,725,725,725,,', ',,,725,725,725,725,725,725,725,,,725,,,,,,,725,,,725,725,725,725,725', '725,725,725,,725,725,725,,725,725,725,725,725,,,,,,,,,,,,,,,,,,,,725', ',,725,,,725,725,,,725,,,,,,725,,,,,,,,725,,,,,725,725,725,725,,725,725', ',,,725,725,,363,363,363,,363,725,,725,363,363,,,,363,,363,363,363,363', '363,363,363,,,,,,363,363,363,363,363,363,363,,,363,,,,,,,363,,,363,363', '363,363,363,363,363,363,,363,363,363,,363,363,363,363,363,,,,,,,,,,', ',,,,,,,,,363,,,363,,,363,363,,,363,,,,,,363,,,,,,,,363,,,,,363,363,363', '363,,363,363,,,,363,363,,727,727,727,,727,363,,363,727,727,,,,727,,727', '727,727,727,727,727,727,,,,,,727,727,727,727,727,727,727,,,727,,,,,', ',727,,,727,727,727,727,727,727,727,727,,727,727,727,,727,727,727,727', '727,,,,,,,,,,,,,,,,,,,,727,,,727,,,727,727,,,727,,,,,,727,,,,,,,,727', ',,,,727,727,727,727,,727,727,,,,727,727,,771,771,771,,771,727,,727,771', '771,,,,771,,771,771,771,771,771,771,771,,,,,,771,771,771,771,771,771', '771,,,771,,,,,,,771,,,771,771,771,771,771,771,771,771,,771,771,771,', '771,771,,,771,,,,,,,,,,,,,,,,,,,,771,,,771,,,771,771,,,771,,,,,,,,,', ',,,,,,,,,771,771,771,771,,771,771,,,,771,771,,741,741,741,,741,771,', '771,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,733,733,733,733,733,733,733,733,733,733,733', ',733,733,,,733,733,,741,,,741,,,741,741,,,741,,,733,,733,741,733,733', '733,733,733,733,733,741,733,,,,741,741,741,741,,741,741,,,,741,741,', '733,399,,,,741,,741,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,27,399,399', '399,,,,27,27,27,,,27,27,27,,27,399,399,,399,,399,,,,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,458,27,,27,,,,458,458,458,,,458,458,458,,458,27,27,,27,', '27,,,,458,,,,,,,,,,458,458,,458,458,458,458,458,,,,,,,,,,,,,,,,,,,,', ',,26,,,,,,,26,26,26,,458,26,26,26,,26,,458,,,,,458,458,26,26,26,,,,', ',,,,26,26,,26,26,26,26,26,,,458,,,,,,,,,,,,,,458,,,,,458,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,461,26,26,26,,,,461,461,461,,,461,461,461', ',461,26,26,,26,,26,,,,461,,,,,,,,,,461,461,,461,461,461,461,461,,,,', ',490,490,,,490,,,,,,,,490,490,,490,490,490,490,490,490,490,,,490,490', ',,461,490,490,490,490,,,461,,,490,,461,461,,,,,490,490,,490,490,490', '490,490,490,490,490,490,490,490,,,490,461,,,,,,,,,,,,,,461,,,,,461,588', '588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588', '588,588,588,588,588,588,,,,588,588,588,588,588,588,588,588,588,588,', ',,,,588,588,588,588,588,588,588,588,588,,,588,,,,,,,,588,588,,588,588', '588,588,588,588,588,,,588,588,,,,588,588,588,588,,,,,,,,,,,,,,588,588', ',588,588,588,588,588,588,588,588,588,588,588,,,588,588,,,,,,,,,,,588', '8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8', '8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8,8,,,,8,8', '8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8,,,8,8,,,,,,,,,,,8,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,9,,,9,9,,,,,,,,,,,9,380,380,380', '380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380', '380,380,380,380,,,,380,380,380,380,380,380,380,380,380,380,,,,,,380', '380,380,380,380,380,380,380,380,,,380,,,,,,,,380,380,,380,380,380,380', '380,380,380,,,380,380,,,,380,380,380,380,,,,,,,,,,,,,,380,380,,380,380', '380,380,380,380,380,380,380,380,380,,,380,380,,,,,,,,,,,380,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,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,711,,711', '711,711,711,711,711,711,711,711,711,711,,,711,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,,,,,,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,202,202,68,,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,424,424,202,,424,,', ',,,,,424,424,,424,424,424,424,424,424,424,,,424,424,,,,424,424,424,424', ',,,,,424,,,,,,,,424,424,,424,424,424,424,424,424,424,424,424,424,424', '425,425,424,,425,,,,,,,,425,425,,425,425,425,425,425,425,425,,,425,425', ',,,425,425,425,425,,,,,,425,,,,,,,,425,425,,425,425,425,425,425,425', '425,425,425,425,425,920,920,425,,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,489,489,920,,489,,,,,,,,489', '489,,489,489,489,489,489,489,489,,,489,489,,,,489,489,489,489,,,,,,489', ',,,,,,,489,489,,489,489,489,489,489,489,489,489,489,489,489,558,558', '489,,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,557,557,558,,557,,,,,,,,557,557,,557,557,557,557,557,557', '557,,,557,557,,,,557,557,557,557,,,,,,557,,,,,,,,557,557,,557,557,557', '557,557,557,557,557,557,557,557,501,501,557,,501,,,,,,,,501,501,,501', '501,501,501,501,501,501,,,501,501,,,,501,501,501,501,,,,,,501,,,,,,', ',501,501,,501,501,501,501,501,501,501,501,501,501,501,551,551,501,,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,550,550,551,,550,,,,,,,,550,550,,550,550,550,550,550,550,550,,,550', '550,,,,550,550,550,550,,,,,,550,,,,,,,,550,550,,550,550,550,550,550', '550,550,550,550,550,550,250,250,550,,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,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,890,890', '251,,890,,,,,,,,890,890,,890,890,890,890,890,890,890,,,890,890,,,,890', '890,890,890,,,,,,890,,,,,,,,890,890,,890,890,890,890,890,890,890,890', '890,890,890,502,502,890,,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,201,201,502,,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,889,889,201,,889', ',,,,,,,889,889,,889,889,889,889,889,889,889,,,889,889,,,,889,889,889', '889,,,,,,889,,,,,,,,889,889,,889,889,889,889,889,889,889,889,889,889', '889,,,889,736,736,736,736,736,736,736,736,736,736,736,,736,736,,,736', '736,,,,,,,,,,,,,,,736,,736,,736,736,736,736,736,736,736,,736,,738,738', '738,738,738,738,738,738,738,738,738,,738,738,,736,738,738,,,,,,,,,,', ',,,,738,,738,,738,738,738,738,738,738,738,,738,,740,740,740,740,740', '740,740,740,740,740,740,,740,740,,738,740,740,,,,,,,,,,,,,,,740,,740', ',740,740,740,740,740,740,740,,740,,264,264,264,264,264,264,264,264,264', '264,264,,264,264,,740,264,264,,,,,,,,,,,,,,,264,,264,,264,264,264,264', '264,264,264,,264,,503,503,503,503,503,503,503,503,503,503,503,,503,503', ',264,503,503,,,,,,,,,,,,,,,503,,503,,503,503,503,503,503,503,503,,503', ',815,815,815,815,815,815,815,815,815,815,815,,815,815,,503,815,815,', ',,,,,,,,,,,,,815,,815,,815,815,815,815,815,815,815,,815,,411,411,411', '411,411,411,411,411,411,411,411,,411,411,,815,411,411,,,,,,,,,,,,,,', '411,,411,,411,411,411,411,411,411,411,,411,,21,21,21,21,21,21,21,21', '21,21,21,,21,21,,411,21,21,,,,,,,,,,,,,,,21,,21,,21,21,21,21,21,21,21', ',21,,731,731,731,731,731,731,731,731,731,731,731,,731,731,,21,731,731', ',,,,,,,,,,,,,,731,,731,,731,731,731,731,731,731,731,,731,,,,,,,,,,,', ',,,,,731' ] racc_action_check = arr = ::Array.new(23417, 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 = [ 1494, 1020, nil, 451, nil, 6989, 983, 1005, 21429, 21553, 990, nil, 961, 1009, 472, 387, 938, 778, nil, -35, 15630, 23243, 1039, nil, 644, 148, 21066, 20891, 16005, 16130, 16255, nil, 1869, 16380, 16505, nil, 935, 354, 267, 1007, 758, 16638, 16763, 16888, 929, 516, nil, nil, nil, nil, nil, nil, nil, 1236, 1369, nil, 17138, 17263, -10, nil, 17513, 17638, nil, nil, 17763, 17896, 18021, 18146, 21913, nil, nil, nil, nil, nil, 337, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 598, nil, nil, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1053, nil, 18646, nil, nil, nil, nil, 18779, 4864, 4989, 5114, 5239, 2119, nil, 474, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 890, nil, 3114, 5614, 5739, 5864, 22813, 21973, 6239, 6364, 6489, 6614, 6739, 6864, nil, nil, 570, 212, 132, 952, 114, 817, 851, nil, 7739, 2494, 842, 7989, 8114, 8239, 8364, 8489, 8614, 8739, 8864, 8989, 9114, 9239, 9364, 9489, 9614, 9739, 9864, 9989, 10114, 10239, 10364, 10489, 14005, 10614, 10739, 10864, 10989, nil, nil, 22573, 22633, 833, 11497, 11622, nil, nil, nil, nil, nil, nil, nil, 11747, nil, 23059, nil, 796, 789, nil, 11997, 827, 12247, nil, 12372, nil, nil, 99, 1243, 12622, 736, 1744, 725, 736, 694, 13122, 2369, 606, 630, 761, 767, 863, nil, 727, 682, 183, nil, nil, nil, 717, 405, 650, 13755, nil, 196, 703, 695, 864, nil, 679, nil, 19654, 734, 723, 19904, nil, -96, 72, 603, 577, -68, 521, nil, nil, 1200, 455, 34, -7, 19029, 19154, -97, 586, 460, 40, 41, 867, 476, 25, 464, nil, nil, 203, 413, 377, nil, 886, nil, 30, 19529, nil, nil, nil, 149, 293, 297, 441, 476, -22, 665, 663, 559, nil, 379, nil, 20279, nil, 162, 377, 285, 337, -9, 364, nil, nil, nil, nil, nil, nil, nil, nil, 352, 21677, nil, nil, nil, nil, 342, nil, 313, nil, 13880, 305, nil, 2494, 305, nil, 193, 149, 237, 263, 20782, nil, nil, nil, 343, 109, 138, nil, nil, 2731, 2622, nil, 23197, nil, 75, nil, nil, 1108, nil, nil, nil, nil, 169, nil, 31, 22033, 22093, 12997, -54, 12872, 12497, 12122, 3114, 2989, 166, 302, 33, 22, 14, -62, 4114, 4364, 4239, 3864, 3739, 3614, 3489, 2680, 3364, 3239, 2119, 2864, 2369, 1251, 1163, 2244, 3989, 18646, 280, 21000, nil, nil, 21175, nil, nil, 1205, nil, 149, -52, 1201, nil, nil, 11872, nil, 11372, nil, 11247, nil, nil, nil, 11114, 1354, 1199, 1195, nil, nil, 1193, 7614, 1168, 7489, 22213, 21173, 972, 1202, nil, nil, 7239, 1140, nil, 7114, 6114, 5989, 22393, 22753, 23105, 5489, 1246, 18521, nil, 584, nil, 18396, nil, nil, 18271, nil, nil, nil, -22, 1922, nil, 1112, 1110, 1097, nil, nil, nil, nil, nil, nil, 1086, nil, 598, nil, nil, nil, nil, 1156, nil, nil, 1151, 3864, 1186, nil, 2989, 12, 31, 1181, 1185, 15880, 15755, 22513, 22453, 11, nil, nil, 974, nil, 22333, 22273, 15505, nil, nil, 15380, 531, -34, 858, 5377, nil, nil, nil, 160, nil, nil, nil, 841, nil, nil, nil, 1046, nil, nil, 273, nil, nil, 1024, nil, nil, nil, 21305, nil, 1021, 13380, 14255, 434, 1055, 14505, 14630, 14755, 14880, 1052, nil, nil, 15130, 15255, 1051, nil, 15005, 14380, nil, nil, 213, -75, 468, 234, 1042, 11114, 1061, nil, 530, nil, 2244, nil, nil, nil, nil, 157, nil, 3989, 983, nil, 1090, nil, 1133, 17013, nil, nil, 1318, 12, 17388, 1101, nil, 1108, 229, 200, 1157, 437, 992, 1169, 1130, 5364, 17763, 1204, 1205, 167, 1285, nil, 1994, 1166, 1214, nil, nil, 1190, 137, nil, nil, nil, 1190, 1797, nil, 1672, nil, nil, 1545, 7864, nil, 562, nil, 1199, 336, nil, 1207, nil, nil, 746, nil, 1321, nil, nil, nil, nil, 1328, nil, 13, -79, 26, 39, 24, 150, 13255, 346, 993, nil, 125, 3614, 247, nil, nil, 282, 3739, 786, 686, 21801, nil, nil, nil, nil, nil, nil, 4114, nil, nil, nil, nil, nil, 315, 20154, 13122, 20404, nil, 350, nil, 23289, nil, 20654, nil, nil, 22921, nil, 22967, nil, 23013, 20654, 18904, 19279, 19404, -76, 14130, 372, 374, 384, nil, 407, 386, 719, 388, nil, 520, 1108, 445, 550, nil, nil, 438, 204, nil, nil, nil, 4489, nil, nil, 40, 20529, nil, 514, nil, 4614, 2864, 505, 504, 527, nil, nil, 529, 531, nil, 549, nil, 561, 535, 564, 201, nil, 708, nil, 20029, 721, 4739, 733, nil, 19779, 3239, 61, 63, nil, 766, nil, 3364, nil, 780, 667, nil, nil, 688, 675, nil, 23151, 13630, 13505, 16505, 911, nil, 1036, nil, nil, 881, nil, 719, 717, nil, nil, nil, 12747, nil, 758, nil, nil, nil, 1619, 435, 995, 1108, 827, 1111, nil, nil, 789, 895, nil, 1422, nil, nil, 1006, nil, 1392, nil, 1516, nil, nil, nil, -34, 591, 804, nil, 32, nil, 930, 933, nil, 385, nil, nil, 936, nil, nil, 2586, nil, 825, 829, 842, 847, nil, 862, nil, 665, 1154, 941, nil, 990, 7364, 22873, 22693, 1197, nil, nil, 900, 910, 914, 921, 923, 748, 925, 873, 4364, nil, nil, nil, nil, nil, 4239, nil, 3489, 2047, nil, nil, 658, nil, 1767, nil, nil, nil, 22153, nil, nil, 957, -11, 33, 41, 1203, nil, 756, nil, nil, nil, 778, 991, 362, 1112, 1113, 1003, 1015, 1016, 1127, 156, 783, 6, 768, 866, nil, nil, nil, nil, 1642, nil, nil, nil, nil, 975, nil ] racc_action_default = [ -3, -549, -1, -535, -4, -549, -7, -549, -549, -549, -549, -27, -549, -549, -549, -274, -549, -39, -42, -537, -549, -47, -49, -50, -51, -255, -255, -255, -285, -320, -321, -67, -11, -71, -79, -81, -549, -464, -465, -549, -549, -549, -549, -549, -537, -236, -267, -268, -269, -270, -271, -272, -273, -525, -11, -277, -548, -517, -293, -375, -549, -549, -298, -301, -535, -549, -549, -549, -549, -322, -323, -413, -414, -415, -416, -417, -432, -420, -421, -434, -436, -425, -430, -446, -434, -448, -449, -523, -453, -454, -524, -456, -457, -458, -459, -460, -461, -462, -463, -468, -469, -549, -2, -536, -544, -545, -546, -6, -549, -549, -549, -549, -549, -3, -15, -549, -110, -111, -112, -113, -114, -115, -116, -117, -118, -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, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -20, -119, -11, -549, -549, -245, -549, -549, -549, -549, -549, -549, -549, -537, -538, -46, -549, -464, -465, -549, -274, -549, -549, -228, -549, -11, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -383, -385, -549, -549, -56, -245, -549, -292, -388, -397, -399, -62, -394, -63, -537, -64, -237, -250, -259, -259, -254, -549, -260, -549, -519, -549, -65, -66, -535, -12, -549, -69, -11, -537, -549, -72, -75, -11, -87, -88, -549, -549, -95, -285, -288, -537, -549, -320, -321, -324, -395, -549, -77, -549, -83, -282, -450, -451, -549, -213, -214, -229, -549, -405, -549, -549, -238, -541, -541, -549, -549, -541, -549, -294, -295, -489, -48, -549, -549, -549, -549, -535, -549, -536, -464, -465, -549, -549, -274, -549, -334, -335, -105, -106, -549, -108, -549, -274, -549, -549, -464, -465, -313, -110, -111, -151, -152, -153, -169, -174, -181, -184, -315, -549, -515, -549, -418, -549, -549, -549, -549, -549, -549, 958, -5, -547, -21, -22, -23, -24, -25, -549, -549, -17, -18, -19, -120, -549, -28, -37, -38, -549, -549, -29, -194, -537, -246, -259, -259, -526, -527, -255, -392, -528, -529, -527, -526, -255, -391, -393, -528, -529, -35, -202, -36, -549, -40, -41, -192, -260, -43, -44, -45, -537, -291, -549, -549, -549, -245, -282, -549, -549, -549, -203, -204, -205, -206, -207, -208, -209, -210, -215, -216, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -230, -231, -232, -233, -537, -364, -255, -526, -527, -255, -54, -57, -537, -256, -364, -364, -537, -287, -251, -549, -252, -549, -257, -549, -261, -522, -10, -536, -14, -537, -68, -280, -84, -73, -549, -537, -245, -549, -549, -94, -549, -450, -451, -549, -80, -85, -549, -549, -549, -549, -549, -234, -549, -548, -548, -276, -278, -239, -543, -542, -241, -543, -283, -284, -518, -549, -489, -378, -514, -514, -514, -488, -490, -491, -492, -493, -494, -495, -496, -549, -498, -504, -506, -507, -509, -510, -511, -549, -11, -325, -326, -11, -549, -549, -549, -549, -549, -245, -549, -549, -282, -306, -105, -106, -107, -549, -549, -245, -309, -470, -549, -549, -549, -11, -489, -317, -533, -534, -537, -419, -433, -438, -549, -440, -422, -435, -549, -437, -424, -549, -427, -429, -549, -447, -8, -16, -549, -26, -266, -549, -549, -396, -549, -247, -249, -549, -549, -58, -244, -389, -549, -549, -60, -390, -549, -549, -290, -539, -526, -527, -526, -527, -537, -192, -549, -365, -369, -367, -11, -52, -386, -53, -387, -364, -242, -11, -11, -286, -259, -258, -262, -549, -520, -521, -13, -70, -549, -76, -82, -537, -526, -527, -243, -91, -93, -549, -78, -549, -201, -211, -212, -537, -548, -332, -11, -406, -548, -407, -408, -537, -541, -376, -379, -381, -369, -549, -481, -549, -484, -486, -549, -549, -336, -549, -338, -340, -347, -495, -537, -508, -512, -548, -327, -548, -299, -328, -329, -302, -549, -305, -549, -537, -526, -527, -530, -281, -549, -105, -106, -109, -537, -11, -549, -472, -311, -549, -11, -489, -549, -549, -516, -439, -442, -443, -444, -445, -11, -423, -426, -428, -431, -121, -264, -549, -195, -549, -540, -259, -31, -197, -32, -198, -59, -33, -200, -34, -199, -61, -193, -549, -549, -549, -549, -396, -549, -514, -514, -514, -363, -549, -369, -549, -495, -502, -549, -11, -549, -549, -253, -263, -74, -89, -86, -289, -9, -11, -412, -333, -549, -549, -410, -549, -240, -11, -11, -537, -514, -514, -499, -513, -514, -514, -505, -514, -500, -537, -549, -345, -549, -497, -549, -330, -549, -549, -11, -11, -304, -549, -11, -396, -549, -396, -549, -471, -11, -314, -549, -537, -474, -318, -549, -265, -30, -196, -248, -549, -235, -354, -356, -549, -359, -361, -549, -366, -549, -370, -371, -373, -374, -549, -384, -549, -398, -400, -411, -11, -96, -97, -549, -549, -104, -409, -279, -549, -549, -377, -549, -477, -479, -549, -482, -549, -485, -549, -487, -337, -339, -343, -549, -348, -296, -549, -297, -549, -549, -262, -548, -307, -310, -549, -316, -473, -489, -441, -514, -514, -514, -514, -503, -514, -368, -549, -501, -549, -55, -405, -245, -549, -549, -103, -380, -382, -514, -514, -514, -514, -341, -549, -346, -549, -11, -300, -303, -401, -402, -403, -11, -312, -11, -549, -351, -353, -549, -357, -549, -360, -362, -372, -549, -282, -404, -537, -526, -527, -530, -102, -475, -549, -478, -480, -483, -549, -344, -548, -549, -549, -514, -514, -514, -514, -281, -530, -396, -514, -342, -331, -308, -319, -349, -549, -352, -355, -358, -476, -514, -350 ] clist = [ '119,119,256,260,312,37,505,360,415,708,37,283,314,106,124,124,393,792', '523,463,300,210,207,540,543,265,265,265,114,196,748,6,519,297,297,784', '6,37,286,286,325,326,122,122,329,634,547,310,654,399,405,556,631,861', '631,593,252,259,261,37,119,472,279,103,749,297,297,297,102,464,332,348', '348,348,106,509,512,680,751,516,2,828,107,496,880,634,830,388,374,375', '376,377,281,412,858,663,686,689,458,461,324,324,622,323,324,624,249', '572,37,579,582,780,620,779,366,782,775,37,37,370,776,627,628,900,346', '350,777,25,457,330,466,467,25,905,6,658,263,274,275,770,364,13,365,378', '6,367,13,25,324,324,324,324,581,369,713,25,25,25,718,25,778,368,934', '588,317,625,1,380,634,362,318,321,322,13,880,339,631,631,400,195,372', '25,266,266,266,337,560,25,25,766,472,25,361,379,409,13,946,265,567,386', '391,313,37,661,410,414,327,858,796,328,315,919,826,523,784,797,830,698', '908,703,806,787,565,566,711,37,874,666,795,752,25,876,827,517,,25,25', '25,25,25,25,,614,,13,418,419,420,421,,265,265,,13,13,,,,,265,,523,690', '780,,877,701,878,639,947,485,256,399,405,,260,745,648,,497,757,,,37', '297,37,106,,,286,37,267,267,267,894,,492,,,780,,297,,763,641,,286,544', '545,480,279,,,750,,279,,910,,316,319,,,721,25,25,25,25,,,25,25,25,25', '25,25,479,644,13,106,481,478,,,,487,,25,,644,,,390,508,869,801,561,938', '390,,,13,465,,803,693,734,324,324,,468,739,119,,,702,600,,,,25,25,605', ',,,124,564,634,25,800,,,,546,659,594,631,644,,587,400,,570,523,25,644', '25,266,,415,906,25,,122,,266,409,809,13,762,13,774,265,760,,13,,,,599', ',,,,600,604,,600,,25,,,,,,,,,,,,,,25,25,,,,616,,,660,,497,38,400,,837', ',38,,,497,25,,,,400,,,,409,282,37,265,297,,,621,25,286,623,,409,297', ',38,287,287,286,,,,,,,,,,636,,,,,707,,267,,38,,,,760,,267,,400,,,333', '349,349,349,,400,,,,,,,704,409,653,37,265,,37,409,,,,25,687,687,265', ',,,,902,,,,,,,38,523,37,,,705,706,,,38,38,,119,,922,,907,944,,16,,,', ',16,,124,,,,730,732,,422,324,735,737,,25,414,723,,768,,,,772,25,497', '594,,16,13,600,122,,605,37,,764,,,,25,37,37,,,,,297,,,16,674,286,594', ',,,385,297,811,,338,804,286,469,,,808,,390,37,38,,773,,,25,,,25,282', ',,482,,25,,802,,,13,,,13,38,25,,,25,16,,25,,,,594,,,16,16,,692,119,923', '594,13,,37,,,,,37,805,,,,,,810,,,37,25,25,,,814,25,25,282,,25,630,,282', '644,324,,,,,38,,38,,25,,287,38,,,,25,25,871,,,,,13,37,,,,287,,13,13', ',297,37,662,863,,838,,,,37,37,,25,16,,674,,,789,,413,,,,,,13,,,,37,37', ',,37,,16,,,,37,687,,608,,,,,,,,747,,,25,,,,,25,297,,,324,25,348,,,,', ',37,,13,25,,,,13,,,,,25,,,626,729,13,937,629,,,,16,400,16,,,,,16,783', '637,,785,,,,640,,409,,25,265,,,,,,,,,25,,,,13,674,,674,25,25,,,,37,13', ',,,409,37,,37,13,13,,,15,25,,25,25,15,594,25,,,,,,25,,,,13,13,,,13,', ',38,,,13,,,,287,15,290,290,,,,,,287,,,712,25,,,,,,898,674,,,15,,,,13', ',,,,,,336,345,345,,,,683,,,685,,,,,,,,,,,38,,,38,,674,,674,,,25,,,,', ',,,15,,879,,,881,25,38,,15,15,,25,,25,,,,,,13,674,,765,,,13,,13,895', ',,896,,897,,,,,,,,,16,,,,,756,,791,,,,,758,759,,,,,,38,,,,,,,38,38,', ',,,,,,,,287,,,,769,320,,,,,,287,939,,15,940,,941,38,,,,,,16,,,16,,,945', ',,,,,,15,,,,,,,,,,,,16,,,956,,,,,,,,,,,,,38,812,847,,,38,,,,,,,857,', ',38,,,,,,,,,,413,,,,,15,,15,,873,,290,15,,16,833,,,,,,16,16,,,836,,', '290,38,,,,845,846,,,,,38,,,,839,,,,38,38,,16,,,,865,866,387,,868,,,', '417,,,,,,38,38,,,38,,,,,,38,,,,,,,,,,,,,,,,,887,,16,,,,,16,349,,,,,', '38,,,16,,,,,,,,,,,,,,,474,,476,,477,,,,,,,,,,,,,,,,,,,,16,,,,,,,,,935', '16,,,,843,936,,,16,16,,,,38,,,,,,38,,38,,,,,,,,16,16,,,16,,,,,,16,,', ',,,15,,,,,,14,290,,,,14,,,,,290,668,670,671,,,,,,16,211,,,,,,,,211,211', '211,,14,288,288,590,,,,,,,,,,,,,,,,,,,14,15,,,15,,211,211,,,211,334', '344,344,,,,,,,,,,,,,15,,,,16,,,,,717,16,,16,,,,,,,,,,,14,,,,,211,211', '211,211,14,14,,,,632,,320,,635,,,,,,,,,,,,,,15,,,,,,,15,15,,,,,,,,,657', '290,,,632,,,320,,,,,290,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,417,,,14,211', '211,211,,,211,211,211,211,211,211,,,,,,,,,,15,,14,,,15,,,,,,,,,,15,', ',,724,820,822,823,632,320,,,,,,,,,,,211,211,,,,,,,,211,,,,,,,849,850', ',15,852,854,,856,,14,761,14,,15,,288,14,842,,,,15,15,,,,,,,,,,288,,', ',,,,,,,15,15,211,,15,,,,786,,15,,,,,,211,211,,,,,,,,,,,,,,,,,,345,211', ',,,,15,,,,,,,,,,,211,,,,912,913,915,917,813,918,,,,,,,,,,,,,928,930', '931,932,,,,,,,,,,,,,,,,,,,,,,,,,,,,,15,,,,,,15,,15,211,,,950,952,953', '954,,,,955,,,,,,,,,867,,957,,,,,,,,,,,,,,,320,,,,,,,,,,,,,,,,,14,,,', ',,,288,,211,,,,,,,288,,,,,,,,,211,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',14,,,14,,,,,,211,,,,,,,,,,211,,,211,,,14,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,211,211,,,,211,211,,,211,,,,,,,,,,,,,,14,,,,,,,14,14,,,,,,,,218', ',288,,,,,,264,264,264,,,288,,,,,,,14,307,308,309,,,,,,,,,,,,,264,264', ',,,,,,,,,,,,,,,,,,,,,,,,211,,,,,14,,,,,14,,,,,,,,,,14,,,,,,,,,211,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,14,,,,840,,,,14,14,,,,,,,,,,', ',,,,,,,211,,14,14,,,14,,,,,,14,,,,,,,,264,392,264,,,411,416,,,,,,,,', ',,884,,,,218,,14,431,432,433,434,435,436,437,438,439,440,441,442,443', '444,445,446,447,448,449,450,451,452,453,454,455,456,,,,,,264,264,,,', ',,,,264,,,,,,,264,,264,211,264,,,,,,,,,,,,,14,,,,,,14,,14,,,,,,,,,,', ',,,,,503,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,264,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,264,,411', '615,392,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,264,,264,,264,,,,,,', ',,,,,,264,,,,,,,,,,650,651,652,,,,,,264,,,,264,,,264,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,264,264,,,,,,,,,,264,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,264,726,,,264,264,731,733,,,,736,738,,,615,740,,,,,,,,,,,,,,,,,,', ',,,,,,,264,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,264,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,264,,815,,,,,,,,,,,,,,731,733,738', '736,,818,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,264,,,', ',,,,,,,,,,,,,264,815,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,264' ] racc_goto_table = arr = ::Array.new(2910, 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 = [ '54,54,66,66,8,49,10,53,17,89,49,46,62,88,58,58,22,83,115,37,47,19,30', '82,82,32,32,32,14,14,112,7,124,60,60,149,7,49,49,49,16,16,57,57,16,153', '85,30,11,35,35,51,69,109,69,23,36,36,36,49,54,68,42,6,113,60,60,60,4', '22,49,49,49,49,88,64,64,108,117,64,2,119,5,48,150,153,120,26,16,16,16', '16,43,26,106,122,84,84,35,35,28,28,67,123,28,67,125,143,49,143,143,148', '38,113,139,113,126,49,49,139,127,38,38,109,52,52,117,40,128,4,130,131', '40,132,7,133,41,41,41,134,137,20,138,7,7,140,20,40,28,28,28,28,142,144', '145,40,40,40,146,40,147,141,109,59,61,39,1,29,153,77,78,79,81,20,150', '18,69,69,66,15,5,40,63,63,63,86,87,40,40,12,68,40,90,2,54,20,109,32', '91,19,19,92,49,93,19,19,94,106,95,96,63,119,117,115,149,97,120,98,99', '100,101,108,102,103,104,49,105,124,11,110,40,112,118,121,,40,40,40,40', '40,40,,22,,20,28,28,28,28,,32,32,,20,20,,,,,32,,115,85,148,,113,51,113', '48,83,47,66,35,35,,66,23,48,,46,38,,,49,60,49,88,,,49,49,65,65,65,113', ',30,,,148,,60,,23,22,,49,16,16,7,42,,,115,,42,,89,,65,65,,,143,40,40', '40,40,,,40,40,40,40,40,40,6,35,20,88,43,4,,,,43,,40,,35,,,63,28,84,23', '88,113,63,,,20,41,,23,22,37,28,28,,41,37,54,,,22,66,,,,40,40,66,,,,58', '28,153,40,82,,,,4,26,30,69,35,,14,66,,28,115,40,35,40,63,,17,11,40,', '57,,63,54,124,20,48,20,64,32,68,,20,,,,36,,,,,66,36,,66,,40,,,,,,,,', ',,,,,40,40,,,,30,,,62,,46,50,66,,82,,50,,,46,40,,,,66,,,,54,9,49,32', '60,,,36,40,49,36,,54,60,,50,50,50,49,,,,,,,,,,7,,,,,8,,65,,50,,,,68', ',65,,66,,,50,50,50,50,,66,,,,,,,16,54,28,49,32,,49,54,,,,40,88,88,32', ',,,,82,,,,,,,50,115,49,,,88,88,,,50,50,,54,,10,,85,23,,25,,,,,25,,58', ',,,19,19,,44,28,19,19,,40,19,14,,62,,,,62,40,46,30,,25,20,66,57,,66', '49,,46,,,,40,49,49,,,,,60,,,25,107,49,30,,,,9,60,53,,25,8,49,44,,,8', ',63,49,50,,30,,,40,,,40,9,,,44,,40,,16,,,20,,,20,50,40,,,40,25,,40,', ',,30,,,25,25,,63,54,22,30,20,,49,,,,,49,88,,,,,,88,,,49,40,40,,,19,40', '40,9,,40,65,,9,35,28,,,,,50,,50,,40,,50,50,,,,40,40,8,,,,,20,49,,,,50', ',20,20,,60,49,65,16,,49,,,,49,49,,40,25,,107,,,107,,25,,,,,,20,,,,49', '49,,,49,,25,,,,49,88,,44,,,,,,,,111,,,40,,,,,40,60,,,28,40,49,,,,,,49', ',20,40,,,,20,,,,,40,,,44,65,20,8,44,,,,25,66,25,,,,,25,111,44,,111,', ',,44,,54,,40,32,,,,,,,,,40,,,,20,107,,107,40,40,,,,49,20,,,,54,49,,49', '20,20,,,24,40,,40,40,24,30,40,,,,,,40,,,,20,20,,,20,,,50,,,20,,,,50', '24,24,24,,,,,,50,,,44,40,,,,,,107,107,,,24,,,,20,,,,,,,24,24,24,,,,9', ',,9,,,,,,,,,,,50,,,50,,107,,107,,,40,,,,,,,,24,,111,,,111,40,50,,24', '24,,40,,40,,,,,,20,107,,44,,,20,,20,111,,,111,,111,,,,,,,,,25,,,,,9', ',44,,,,,9,9,,,,,,50,,,,,,,50,50,,,,,,,,,,50,,,,9,27,,,,,,50,111,,24', '111,,111,50,,,,,,25,,,25,,,111,,,,,,,24,,,,,,,,,,,,25,,,111,,,,,,,,', ',,,,50,9,44,,,50,,,,,,,44,,,50,,,,,,,,,,25,,,,,24,,24,,44,,24,24,,25', '9,,,,,,25,25,,,9,,,24,50,,,,9,9,,,,,50,,,,50,,,,50,50,,25,,,,9,9,27', ',9,,,,27,,,,,,50,50,,,50,,,,,,50,,,,,,,,,,,,,,,,,9,,25,,,,,25,50,,,', ',,50,,,25,,,,,,,,,,,,,,,27,,27,,27,,,,,,,,,,,,,,,,,,,,25,,,,,,,,,9,25', ',,,25,9,,,25,25,,,,50,,,,,,50,,50,,,,,,,,25,25,,,25,,,,,,25,,,,,,24', ',,,,,21,24,,,,21,,,,,24,114,114,114,,,,,,25,21,,,,,,,,21,21,21,,21,21', '21,27,,,,,,,,,,,,,,,,,,,21,24,,,24,,21,21,,,21,21,21,21,,,,,,,,,,,,', '24,,,,25,,,,,24,25,,25,,,,,,,,,,,21,,,,,21,21,21,21,21,21,,,,27,,27', ',27,,,,,,,,,,,,,,24,,,,,,,24,24,,,,,,,,,27,24,,,27,,,27,,,,,24,,,,,', ',24,,,,,,,,,,,,,,,,,,,,,,,27,,,21,21,21,21,,,21,21,21,21,21,21,,,,,', ',,,,24,,21,,,24,,,,,,,,,,24,,,,27,114,114,114,27,27,,,,,,,,,,,21,21', ',,,,,,,21,,,,,,,114,114,,24,114,114,,114,,21,27,21,,24,,21,21,24,,,', '24,24,,,,,,,,,,21,,,,,,,,,,24,24,21,,24,,,,27,,24,,,,,,21,21,,,,,,,', ',,,,,,,,,,24,21,,,,,24,,,,,,,,,,,21,,,,114,114,114,114,27,114,,,,,,', ',,,,,,114,114,114,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24,,,,,,24,,24,21', ',,114,114,114,114,,,,114,,,,,,,,,27,,114,,,,,,,,,,,,,,,27,,,,,,,,,,', ',,,,,,21,,,,,,,21,,21,,,,,,,21,,,,,,,,,21,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,21,,,21,,,,,,21,,,,,,,,,,21,,,21,,,21,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,21,21,,,,21,21,,,21,,,,,,,,,,,,,,21,,,,,,,21,21,,,,,,,,31', ',21,,,,,,31,31,31,,,21,,,,,,,21,31,31,31,,,,,,,,,,,,,31,31,,,,,,,,,', ',,,,,,,,,,,,,,,21,,,,,21,,,,,21,,,,,,,,,,21,,,,,,,,,21,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,21,,,,,,,,,,21,,,,21,,,,21,21,,,,,,,,,,,,,,,,,,21,,21', '21,,,21,,,,,,21,,,,,,,,31,31,31,,,31,31,,,,,,,,,,,21,,,,31,,21,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,21,31,,,,,,,,,,,,,21,,,,,,21,,21', ',,,,,,,,,,,,,,,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' ] racc_goto_check = arr = ::Array.new(2910, 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, 166, 80, nil, 65, 77, 60, 31, -50, 451, -305, -457, -465, nil, 20, 170, -20, -196, 110, 1, 141, 1405, -184, -338, 920, 587, -111, 1051, 40, 53, 3, 2021, -3, nil, nil, -152, 31, -233, -345, -297, 127, 108, 30, 60, 393, nil, -22, -14, -218, 5, 465, -291, 58, -61, -8, nil, nil, 34, 6, -221, 0, 108, -44, 154, -240, 263, -23, -356, -206, -419, nil, nil, nil, nil, nil, nil, nil, 101, 113, 113, nil, 113, -302, -666, -448, -284, 120, -160, 10, -557, 124, -163, 146, -305, 144, -478, 146, -474, -336, -651, -341, -486, -128, -137, -343, -585, -694, 111, -454, -737, -389, 204, -588, -554, 896, -305, nil, -540, -521, -672, -667, -90, -422, 44, -291, 84, -548, -545, -120, nil, -127, -127, -735, -371, -519, nil, nil, 66, 66, 35, 65, 80, -216, -258, 71, -420, -417, -507, -556, -634, -737, nil, nil, -428 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 331, 277, nil, 311, nil, 793, nil, 276, nil, nil, nil, 11, 12, 18, 217, 306, nil, nil, 215, 216, nil, 270, 17, nil, 423, 21, 22, 23, 24, 647, nil, nil, nil, nil, 294, 394, 31, nil, nil, 33, 36, 35, nil, 212, 213, 343, nil, 121, 402, 120, 123, 72, 73, nil, 45, nil, 655, 395, nil, 396, 407, 601, 470, 268, 254, 46, 47, 48, 49, 50, 51, 52, nil, 255, 58, nil, nil, nil, nil, nil, nil, nil, 541, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 676, 530, nil, 677, nil, 520, nil, 522, nil, 781, 617, nil, nil, nil, 528, nil, nil, nil, 710, nil, nil, nil, nil, 406, nil, nil, nil, nil, nil, 71, 74, 75, nil, nil, nil, nil, nil, 577, nil, nil, nil, 521, 532, 533, 755, 536, 539, 272 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 138, :_reduce_none, 2, 139, :_reduce_2, 0, 140, :_reduce_3, 1, 140, :_reduce_4, 3, 140, :_reduce_5, 2, 140, :_reduce_6, 1, 142, :_reduce_none, 4, 142, :_reduce_8, 4, 145, :_reduce_9, 2, 146, :_reduce_10, 0, 150, :_reduce_11, 1, 150, :_reduce_12, 3, 150, :_reduce_13, 2, 150, :_reduce_14, 0, 166, :_reduce_15, 4, 144, :_reduce_16, 3, 144, :_reduce_17, 3, 144, :_reduce_18, 3, 144, :_reduce_19, 2, 144, :_reduce_20, 3, 144, :_reduce_21, 3, 144, :_reduce_22, 3, 144, :_reduce_23, 3, 144, :_reduce_24, 3, 144, :_reduce_25, 4, 144, :_reduce_26, 1, 144, :_reduce_none, 3, 144, :_reduce_28, 3, 144, :_reduce_29, 6, 144, :_reduce_30, 5, 144, :_reduce_31, 5, 144, :_reduce_32, 5, 144, :_reduce_33, 5, 144, :_reduce_34, 3, 144, :_reduce_35, 3, 144, :_reduce_36, 3, 144, :_reduce_37, 3, 144, :_reduce_38, 1, 144, :_reduce_none, 3, 154, :_reduce_40, 3, 154, :_reduce_41, 1, 165, :_reduce_none, 3, 165, :_reduce_43, 3, 165, :_reduce_44, 3, 165, :_reduce_45, 2, 165, :_reduce_46, 1, 165, :_reduce_none, 1, 153, :_reduce_none, 1, 156, :_reduce_none, 1, 156, :_reduce_none, 1, 170, :_reduce_none, 4, 170, :_reduce_52, 4, 170, :_reduce_53, 0, 176, :_reduce_54, 5, 174, :_reduce_55, 2, 169, :_reduce_56, 3, 169, :_reduce_57, 4, 169, :_reduce_58, 5, 169, :_reduce_59, 4, 169, :_reduce_60, 5, 169, :_reduce_61, 2, 169, :_reduce_62, 2, 169, :_reduce_63, 2, 169, :_reduce_64, 2, 169, :_reduce_65, 2, 169, :_reduce_66, 1, 155, :_reduce_67, 3, 155, :_reduce_68, 1, 180, :_reduce_69, 3, 180, :_reduce_70, 1, 179, :_reduce_none, 2, 179, :_reduce_72, 3, 179, :_reduce_73, 5, 179, :_reduce_74, 2, 179, :_reduce_75, 4, 179, :_reduce_76, 2, 179, :_reduce_77, 4, 179, :_reduce_78, 1, 179, :_reduce_79, 3, 179, :_reduce_80, 1, 183, :_reduce_none, 3, 183, :_reduce_82, 2, 182, :_reduce_83, 3, 182, :_reduce_84, 1, 185, :_reduce_85, 3, 185, :_reduce_86, 1, 184, :_reduce_87, 1, 184, :_reduce_88, 4, 184, :_reduce_89, 3, 184, :_reduce_90, 3, 184, :_reduce_91, 3, 184, :_reduce_92, 3, 184, :_reduce_93, 2, 184, :_reduce_94, 1, 184, :_reduce_95, 1, 162, :_reduce_96, 1, 162, :_reduce_97, 4, 162, :_reduce_98, 3, 162, :_reduce_99, 3, 162, :_reduce_100, 3, 162, :_reduce_101, 3, 162, :_reduce_102, 2, 162, :_reduce_103, 1, 162, :_reduce_104, 1, 188, :_reduce_105, 1, 188, :_reduce_none, 2, 189, :_reduce_107, 1, 189, :_reduce_108, 3, 189, :_reduce_109, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 193, :_reduce_115, 1, 193, :_reduce_none, 1, 151, :_reduce_none, 1, 151, :_reduce_none, 1, 152, :_reduce_119, 0, 196, :_reduce_120, 4, 152, :_reduce_121, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 3, 168, :_reduce_192, 5, 168, :_reduce_193, 3, 168, :_reduce_194, 5, 168, :_reduce_195, 6, 168, :_reduce_196, 5, 168, :_reduce_197, 5, 168, :_reduce_198, 5, 168, :_reduce_199, 5, 168, :_reduce_200, 4, 168, :_reduce_201, 3, 168, :_reduce_202, 3, 168, :_reduce_203, 3, 168, :_reduce_204, 3, 168, :_reduce_205, 3, 168, :_reduce_206, 3, 168, :_reduce_207, 3, 168, :_reduce_208, 3, 168, :_reduce_209, 3, 168, :_reduce_210, 4, 168, :_reduce_211, 4, 168, :_reduce_212, 2, 168, :_reduce_213, 2, 168, :_reduce_214, 3, 168, :_reduce_215, 3, 168, :_reduce_216, 3, 168, :_reduce_217, 3, 168, :_reduce_218, 3, 168, :_reduce_219, 3, 168, :_reduce_220, 3, 168, :_reduce_221, 3, 168, :_reduce_222, 3, 168, :_reduce_223, 3, 168, :_reduce_224, 3, 168, :_reduce_225, 3, 168, :_reduce_226, 3, 168, :_reduce_227, 2, 168, :_reduce_228, 2, 168, :_reduce_229, 3, 168, :_reduce_230, 3, 168, :_reduce_231, 3, 168, :_reduce_232, 3, 168, :_reduce_233, 3, 168, :_reduce_234, 6, 168, :_reduce_235, 1, 168, :_reduce_none, 1, 164, :_reduce_none, 1, 198, :_reduce_none, 2, 198, :_reduce_none, 4, 198, :_reduce_240, 2, 198, :_reduce_241, 3, 203, :_reduce_242, 0, 204, :_reduce_243, 1, 204, :_reduce_none, 0, 159, :_reduce_245, 1, 159, :_reduce_none, 2, 159, :_reduce_none, 4, 159, :_reduce_248, 2, 159, :_reduce_249, 1, 178, :_reduce_250, 2, 178, :_reduce_251, 2, 178, :_reduce_252, 4, 178, :_reduce_253, 1, 178, :_reduce_254, 0, 207, :_reduce_255, 2, 173, :_reduce_256, 2, 206, :_reduce_257, 2, 205, :_reduce_258, 0, 205, :_reduce_259, 1, 200, :_reduce_260, 2, 200, :_reduce_261, 3, 200, :_reduce_262, 4, 200, :_reduce_263, 3, 163, :_reduce_264, 4, 163, :_reduce_265, 2, 163, :_reduce_266, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_275, 3, 197, :_reduce_276, 0, 229, :_reduce_277, 0, 230, :_reduce_278, 6, 197, :_reduce_279, 3, 197, :_reduce_280, 3, 197, :_reduce_281, 2, 197, :_reduce_282, 3, 197, :_reduce_283, 3, 197, :_reduce_284, 1, 197, :_reduce_285, 4, 197, :_reduce_286, 3, 197, :_reduce_287, 1, 197, :_reduce_288, 5, 197, :_reduce_289, 4, 197, :_reduce_290, 3, 197, :_reduce_291, 2, 197, :_reduce_292, 1, 197, :_reduce_none, 2, 197, :_reduce_294, 2, 197, :_reduce_295, 6, 197, :_reduce_296, 6, 197, :_reduce_297, 0, 231, :_reduce_298, 0, 232, :_reduce_299, 7, 197, :_reduce_300, 0, 233, :_reduce_301, 0, 234, :_reduce_302, 7, 197, :_reduce_303, 5, 197, :_reduce_304, 4, 197, :_reduce_305, 0, 235, :_reduce_306, 0, 236, :_reduce_307, 9, 197, :_reduce_308, 0, 237, :_reduce_309, 6, 197, :_reduce_310, 0, 238, :_reduce_311, 7, 197, :_reduce_312, 0, 239, :_reduce_313, 5, 197, :_reduce_314, 0, 240, :_reduce_315, 6, 197, :_reduce_316, 0, 241, :_reduce_317, 0, 242, :_reduce_318, 9, 197, :_reduce_319, 1, 197, :_reduce_320, 1, 197, :_reduce_321, 1, 197, :_reduce_322, 1, 197, :_reduce_323, 1, 158, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 2, 219, :_reduce_327, 1, 221, :_reduce_none, 1, 221, :_reduce_none, 1, 220, :_reduce_none, 5, 220, :_reduce_331, 1, 148, :_reduce_none, 2, 148, :_reduce_333, 1, 223, :_reduce_none, 1, 223, :_reduce_none, 1, 243, :_reduce_336, 3, 243, :_reduce_337, 1, 246, :_reduce_338, 3, 246, :_reduce_339, 1, 245, :_reduce_none, 4, 245, :_reduce_341, 6, 245, :_reduce_342, 3, 245, :_reduce_343, 5, 245, :_reduce_344, 2, 245, :_reduce_345, 4, 245, :_reduce_346, 1, 245, :_reduce_347, 3, 245, :_reduce_348, 6, 247, :_reduce_349, 8, 247, :_reduce_350, 4, 247, :_reduce_351, 6, 247, :_reduce_352, 4, 247, :_reduce_353, 2, 247, :_reduce_none, 6, 247, :_reduce_355, 2, 247, :_reduce_356, 4, 247, :_reduce_357, 6, 247, :_reduce_358, 2, 247, :_reduce_359, 4, 247, :_reduce_360, 2, 247, :_reduce_361, 4, 247, :_reduce_362, 1, 247, :_reduce_363, 0, 175, :_reduce_364, 1, 175, :_reduce_365, 3, 253, :_reduce_366, 1, 253, :_reduce_367, 4, 253, :_reduce_368, 0, 254, :_reduce_369, 2, 254, :_reduce_370, 1, 255, :_reduce_371, 3, 255, :_reduce_372, 1, 256, :_reduce_373, 1, 256, :_reduce_none, 0, 260, :_reduce_375, 3, 218, :_reduce_376, 4, 258, :_reduce_377, 1, 258, :_reduce_378, 0, 263, :_reduce_379, 4, 259, :_reduce_380, 0, 264, :_reduce_381, 4, 259, :_reduce_382, 0, 265, :_reduce_383, 5, 262, :_reduce_384, 2, 171, :_reduce_385, 4, 171, :_reduce_386, 4, 171, :_reduce_387, 2, 217, :_reduce_388, 4, 217, :_reduce_389, 4, 217, :_reduce_390, 3, 217, :_reduce_391, 3, 217, :_reduce_392, 3, 217, :_reduce_393, 2, 217, :_reduce_394, 1, 217, :_reduce_395, 4, 217, :_reduce_396, 0, 267, :_reduce_397, 5, 216, :_reduce_398, 0, 268, :_reduce_399, 5, 216, :_reduce_400, 5, 222, :_reduce_401, 1, 269, :_reduce_402, 1, 269, :_reduce_none, 6, 147, :_reduce_404, 0, 147, :_reduce_405, 1, 270, :_reduce_406, 1, 270, :_reduce_none, 1, 270, :_reduce_none, 2, 271, :_reduce_409, 1, 271, :_reduce_none, 2, 149, :_reduce_411, 1, 149, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 209, :_reduce_416, 1, 273, :_reduce_417, 2, 273, :_reduce_418, 3, 274, :_reduce_419, 1, 274, :_reduce_420, 1, 274, :_reduce_421, 3, 210, :_reduce_422, 4, 211, :_reduce_423, 3, 212, :_reduce_424, 0, 278, :_reduce_425, 3, 278, :_reduce_426, 1, 279, :_reduce_427, 2, 279, :_reduce_428, 3, 213, :_reduce_429, 0, 281, :_reduce_430, 3, 281, :_reduce_431, 0, 275, :_reduce_432, 2, 275, :_reduce_433, 0, 276, :_reduce_434, 2, 276, :_reduce_435, 0, 277, :_reduce_436, 2, 277, :_reduce_437, 1, 280, :_reduce_438, 2, 280, :_reduce_439, 0, 283, :_reduce_440, 4, 280, :_reduce_441, 1, 282, :_reduce_442, 1, 282, :_reduce_443, 1, 282, :_reduce_444, 1, 282, :_reduce_none, 1, 194, :_reduce_446, 3, 195, :_reduce_447, 1, 272, :_reduce_448, 1, 272, :_reduce_449, 2, 272, :_reduce_450, 2, 272, :_reduce_451, 1, 186, :_reduce_452, 1, 186, :_reduce_453, 1, 186, :_reduce_454, 1, 186, :_reduce_455, 1, 186, :_reduce_456, 1, 187, :_reduce_457, 1, 187, :_reduce_458, 1, 187, :_reduce_459, 1, 187, :_reduce_460, 1, 187, :_reduce_461, 1, 187, :_reduce_462, 1, 187, :_reduce_463, 1, 214, :_reduce_464, 1, 214, :_reduce_465, 1, 157, :_reduce_466, 1, 157, :_reduce_467, 1, 161, :_reduce_468, 1, 161, :_reduce_469, 1, 224, :_reduce_470, 3, 224, :_reduce_471, 2, 224, :_reduce_472, 3, 226, :_reduce_473, 2, 226, :_reduce_474, 6, 261, :_reduce_475, 8, 261, :_reduce_476, 4, 261, :_reduce_477, 6, 261, :_reduce_478, 4, 261, :_reduce_479, 6, 261, :_reduce_480, 2, 261, :_reduce_481, 4, 261, :_reduce_482, 6, 261, :_reduce_483, 2, 261, :_reduce_484, 4, 261, :_reduce_485, 2, 261, :_reduce_486, 4, 261, :_reduce_487, 1, 261, :_reduce_488, 0, 261, :_reduce_489, 1, 257, :_reduce_490, 1, 257, :_reduce_491, 1, 257, :_reduce_492, 1, 257, :_reduce_493, 1, 244, :_reduce_none, 1, 244, :_reduce_none, 1, 285, :_reduce_496, 3, 285, :_reduce_497, 1, 248, :_reduce_498, 3, 248, :_reduce_499, 3, 286, :_reduce_500, 3, 287, :_reduce_501, 1, 249, :_reduce_502, 3, 249, :_reduce_503, 1, 284, :_reduce_504, 3, 284, :_reduce_505, 1, 288, :_reduce_none, 1, 288, :_reduce_none, 2, 250, :_reduce_508, 1, 250, :_reduce_509, 1, 289, :_reduce_none, 1, 289, :_reduce_none, 2, 252, :_reduce_512, 2, 251, :_reduce_513, 0, 251, :_reduce_514, 1, 227, :_reduce_none, 3, 227, :_reduce_516, 0, 215, :_reduce_517, 2, 215, :_reduce_none, 1, 202, :_reduce_519, 3, 202, :_reduce_520, 3, 290, :_reduce_521, 2, 290, :_reduce_522, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 172, :_reduce_none, 1, 172, :_reduce_none, 1, 172, :_reduce_none, 1, 172, :_reduce_none, 1, 266, :_reduce_none, 1, 266, :_reduce_none, 1, 266, :_reduce_none, 1, 228, :_reduce_none, 1, 228, :_reduce_none, 0, 141, :_reduce_none, 1, 141, :_reduce_none, 0, 167, :_reduce_none, 1, 167, :_reduce_none, 2, 181, :_reduce_539, 2, 160, :_reduce_540, 0, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 225, :_reduce_544, 1, 225, :_reduce_none, 1, 143, :_reduce_none, 2, 143, :_reduce_none, 0, 199, :_reduce_548 ] racc_reduce_n = 549 racc_shift_n = 958 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tPLUS => 104, :tMINUS => 105, :tLT => 106, :tGT => 107, :tPIPE => 108, :tBANG => 109, :tCARET => 110, :tLCURLY => 111, :tRCURLY => 112, :tBACK_REF2 => 113, :tSYMBEG => 114, :tSTRING_BEG => 115, :tXSTRING_BEG => 116, :tREGEXP_BEG => 117, :tREGEXP_OPT => 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, :tCHARACTER => 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "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", "@1", "opt_nl", "arg", "command", "block_command", "block_call", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "@2", "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", "@3", "primary", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@4", "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", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "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", "@19", "f_args", "do_block", "@20", "@21", "@22", "operation3", "@23", "@24", "cases", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "qword_list", "string_dvar", "@25", "f_optarg", "f_arg_item", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_9(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_10(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_11(val, _values, result) result = [] result end def _reduce_12(val, _values, result) result = [ val[0] ] result end def _reduce_13(val, _values, result) result = val[0] << val[2] result end def _reduce_14(val, _values, result) result = [ val[1] ] result end def _reduce_15(val, _values, result) @lexer.state = :expr_fname result end def _reduce_16(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_17(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_18(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_19(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_20(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_21(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_22(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_23(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_25(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_26(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 27 omitted def _reduce_28(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_29(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_30(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_31(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_32(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_33(val, _values, result) diagnostic :error, :const_reassignment, nil, val[3] result end def _reduce_34(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_35(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_36(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_37(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_38(val, _values, result) result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end # reduce 39 omitted def _reduce_40(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_41(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end # reduce 42 omitted def _reduce_43(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_44(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_45(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_46(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 47 omitted # reduce 48 omitted # reduce 49 omitted # reduce 50 omitted # reduce 51 omitted def _reduce_52(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_53(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_54(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_55(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_56(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_57(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_58(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_59(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_60(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_61(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_62(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_63(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_64(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_65(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_66(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_67(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_68(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_69(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_70(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 71 omitted def _reduce_72(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_73(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_74(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_75(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_76(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_77(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_78(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_79(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_80(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 81 omitted def _reduce_82(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_83(val, _values, result) result = [ val[0] ] result end def _reduce_84(val, _values, result) result = val[0] << val[1] result end def _reduce_85(val, _values, result) result = [ val[0] ] result end def _reduce_86(val, _values, result) result = val[0] << val[2] result end def _reduce_87(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_88(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_89(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_90(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_91(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_92(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_93(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_94(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_95(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_96(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_97(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_98(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_99(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_100(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_101(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_102(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_103(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_104(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_105(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 106 omitted def _reduce_107(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_108(val, _values, result) result = @builder.const(val[0]) result end def _reduce_109(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 110 omitted # reduce 111 omitted # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted def _reduce_115(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 116 omitted # reduce 117 omitted # reduce 118 omitted def _reduce_119(val, _values, result) result = [ val[0] ] result end def _reduce_120(val, _values, result) @lexer.state = :expr_fname result end def _reduce_121(val, _values, result) result = val[0] << val[3] result end # 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 # 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 def _reduce_192(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_193(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) result end def _reduce_194(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_195(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) result end def _reduce_196(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_197(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_198(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_199(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_200(val, _values, result) diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] result end def _reduce_201(val, _values, result) diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] result end def _reduce_202(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_203(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_204(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_205(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_207(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) result end def _reduce_212(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) result end def _reduce_213(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_214(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_215(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_218(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_225(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_226(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_229(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_230(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_231(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_232(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_233(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_235(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 236 omitted # reduce 237 omitted # reduce 238 omitted # reduce 239 omitted def _reduce_240(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_241(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_242(val, _values, result) result = val result end def _reduce_243(val, _values, result) result = [ nil, [], nil ] result end # reduce 244 omitted def _reduce_245(val, _values, result) result = [] result end # reduce 246 omitted # reduce 247 omitted def _reduce_248(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_249(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_250(val, _values, result) result = [ val[0] ] result end def _reduce_251(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_252(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_253(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_254(val, _values, result) result = [ val[0] ] result end def _reduce_255(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) result end def _reduce_256(val, _values, result) @lexer.cmdarg = val[0] result = val[1] result end def _reduce_257(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_258(val, _values, result) result = [ val[1] ] result end def _reduce_259(val, _values, result) result = [] result end def _reduce_260(val, _values, result) result = [ val[0] ] result end def _reduce_261(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_262(val, _values, result) result = val[0] << val[2] result end def _reduce_263(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_264(val, _values, result) result = val[0] << val[2] result end def _reduce_265(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_266(val, _values, result) result = [ @builder.splat(val[0], 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 = @builder.call_method(nil, nil, val[0]) result end def _reduce_276(val, _values, result) result = @builder.begin_keyword(val[0], val[1], val[2]) result end def _reduce_277(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_278(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_279(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) result end def _reduce_280(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_281(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_282(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_283(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_284(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_285(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_286(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_287(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_288(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_289(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_290(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_291(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_292(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 293 omitted def _reduce_294(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_295(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_296(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_297(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) result end def _reduce_298(val, _values, result) @lexer.cond.push(true) result end def _reduce_299(val, _values, result) @lexer.cond.pop result end def _reduce_300(val, _values, result) result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_301(val, _values, result) @lexer.cond.push(true) result end def _reduce_302(val, _values, result) @lexer.cond.pop result end def _reduce_303(val, _values, result) result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_304(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_305(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) 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 = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_309(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:class) result end def _reduce_310(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_311(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) result end def _reduce_312(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_313(val, _values, result) @static_env.extend_static @lexer.push_cmdarg result end def _reduce_314(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend result end def _reduce_315(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:def) result end def _reduce_316(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_317(val, _values, result) @lexer.state = :expr_fname result end def _reduce_318(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) result end def _reduce_319(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_320(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_321(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_322(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_323(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 324 omitted # reduce 325 omitted # reduce 326 omitted def _reduce_327(val, _values, result) result = val[1] result end # reduce 328 omitted # reduce 329 omitted # reduce 330 omitted def _reduce_331(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 332 omitted def _reduce_333(val, _values, result) result = val result end # reduce 334 omitted # reduce 335 omitted def _reduce_336(val, _values, result) @static_env.declare val[0][0] result = @builder.arg(val[0]) result end def _reduce_337(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_338(val, _values, result) result = [ val[0] ] result end def _reduce_339(val, _values, result) result = val[0] << val[2] result end # reduce 340 omitted def _reduce_341(val, _values, result) @static_env.declare val[3][0] result = val[0]. push(@builder.restarg(val[2], val[3])) result end def _reduce_342(val, _values, result) @static_env.declare val[3][0] result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) result end def _reduce_343(val, _values, result) result = val[0]. push(@builder.restarg(val[2])) result end def _reduce_344(val, _values, result) result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) result end def _reduce_345(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_346(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]), *val[3] ] result end def _reduce_347(val, _values, result) result = [ @builder.restarg(val[0]) ] result end def _reduce_348(val, _values, result) result = [ @builder.restarg(val[0]), *val[2] ] result end def _reduce_349(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_350(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_351(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_352(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_353(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 354 omitted def _reduce_355(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_356(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_357(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_358(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_359(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_360(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_361(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_362(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_363(val, _values, result) result = [ val[0] ] result end def _reduce_364(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_365(val, _values, result) @lexer.state = :expr_value result end def _reduce_366(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_367(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_368(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_369(val, _values, result) result = [] result end def _reduce_370(val, _values, result) result = val[1] result end def _reduce_371(val, _values, result) result = [ val[0] ] result end def _reduce_372(val, _values, result) result = val[0] << val[2] result end def _reduce_373(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 374 omitted def _reduce_375(val, _values, result) @static_env.extend_dynamic result end def _reduce_376(val, _values, result) result = [ val[1], val[2] ] @static_env.unextend result end def _reduce_377(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_378(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_379(val, _values, result) @context.push(:lambda) result end def _reduce_380(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_381(val, _values, result) @context.push(:lambda) result end def _reduce_382(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_383(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_384(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_385(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_386(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_387(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_388(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_389(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_390(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_391(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_392(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_393(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_394(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_395(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_396(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_397(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_398(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_399(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_400(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_401(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_402(val, _values, result) result = [ val[0] ] result end # reduce 403 omitted def _reduce_404(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_405(val, _values, result) result = [] result end def _reduce_406(val, _values, result) result = [ val[0] ] result end # reduce 407 omitted # reduce 408 omitted def _reduce_409(val, _values, result) result = [ val[0], val[1] ] result end # reduce 410 omitted def _reduce_411(val, _values, result) result = [ val[0], val[1] ] result end # reduce 412 omitted # reduce 413 omitted # reduce 414 omitted # reduce 415 omitted def _reduce_416(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_417(val, _values, result) result = [ val[0] ] result end def _reduce_418(val, _values, result) result = val[0] << val[1] result end def _reduce_419(val, _values, result) result = @builder.string_compose(val[0], val[1], val[2]) result end def _reduce_420(val, _values, result) result = @builder.string(val[0]) result end def _reduce_421(val, _values, result) result = @builder.character(val[0]) result end def _reduce_422(val, _values, result) result = @builder.xstring_compose(val[0], val[1], val[2]) result end def _reduce_423(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_424(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_425(val, _values, result) result = [] result end def _reduce_426(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_427(val, _values, result) result = [ val[0] ] result end def _reduce_428(val, _values, result) result = val[0] << val[1] result end def _reduce_429(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_430(val, _values, result) result = [] result end def _reduce_431(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_432(val, _values, result) result = [] result end def _reduce_433(val, _values, result) result = val[0] << val[1] result end def _reduce_434(val, _values, result) result = [] result end def _reduce_435(val, _values, result) result = val[0] << val[1] result end def _reduce_436(val, _values, result) result = [] result end def _reduce_437(val, _values, result) result = val[0] << val[1] result end def _reduce_438(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_439(val, _values, result) result = val[1] result end def _reduce_440(val, _values, result) @lexer.cond.push(false) @lexer.cmdarg.push(false) result end def _reduce_441(val, _values, result) @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_442(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_443(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_444(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 445 omitted def _reduce_446(val, _values, result) result = @builder.symbol(val[0]) result end def _reduce_447(val, _values, result) result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_448(val, _values, result) result = @builder.integer(val[0]) result end def _reduce_449(val, _values, result) result = @builder.float(val[0]) result end def _reduce_450(val, _values, result) num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_451(val, _values, result) num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_452(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_453(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_454(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_455(val, _values, result) result = @builder.const(val[0]) result end def _reduce_456(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_457(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_458(val, _values, result) result = @builder.self(val[0]) result end def _reduce_459(val, _values, result) result = @builder.true(val[0]) result end def _reduce_460(val, _values, result) result = @builder.false(val[0]) result end def _reduce_461(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_462(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_463(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_464(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_465(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_466(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_467(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_468(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_469(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_470(val, _values, result) result = nil result end def _reduce_471(val, _values, result) result = [ val[0], val[1] ] result end def _reduce_472(val, _values, result) yyerrok result = nil result end def _reduce_473(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_474(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_475(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_476(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_477(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_478(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_479(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_480(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_481(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_482(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_483(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_484(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_485(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_486(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_487(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_488(val, _values, result) result = [ val[0] ] result end def _reduce_489(val, _values, result) result = [] result end def _reduce_490(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_491(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_492(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_493(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 494 omitted # reduce 495 omitted def _reduce_496(val, _values, result) @static_env.declare val[0][0] result = @builder.arg(val[0]) result end def _reduce_497(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_498(val, _values, result) result = [ val[0] ] result end def _reduce_499(val, _values, result) result = val[0] << val[2] result end def _reduce_500(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_501(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_502(val, _values, result) result = [ val[0] ] result end def _reduce_503(val, _values, result) result = val[0] << val[2] result end def _reduce_504(val, _values, result) result = [ val[0] ] result end def _reduce_505(val, _values, result) result = val[0] << val[2] result end # reduce 506 omitted # reduce 507 omitted def _reduce_508(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_509(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 510 omitted # reduce 511 omitted def _reduce_512(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_513(val, _values, result) result = [ val[1] ] result end def _reduce_514(val, _values, result) result = [] result end # reduce 515 omitted def _reduce_516(val, _values, result) result = val[1] result end def _reduce_517(val, _values, result) result = [] result end # reduce 518 omitted def _reduce_519(val, _values, result) result = [ val[0] ] result end def _reduce_520(val, _values, result) result = val[0] << val[2] result end def _reduce_521(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_522(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end # reduce 523 omitted # reduce 524 omitted # reduce 525 omitted # reduce 526 omitted # reduce 527 omitted # reduce 528 omitted # reduce 529 omitted # reduce 530 omitted # reduce 531 omitted # reduce 532 omitted # reduce 533 omitted # reduce 534 omitted # reduce 535 omitted # reduce 536 omitted # reduce 537 omitted # reduce 538 omitted def _reduce_539(val, _values, result) result = val[1] result end def _reduce_540(val, _values, result) result = val[1] result end # reduce 541 omitted # reduce 542 omitted # reduce 543 omitted def _reduce_544(val, _values, result) yyerrok result end # reduce 545 omitted # reduce 546 omitted # reduce 547 omitted def _reduce_548(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby19 end # module Parser parser-2.7.0.2/lib/parser/ruby27.y0000644000004100000410000031555013617025313016604 0ustar www-datawww-dataclass Parser::Ruby27 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 tUPLUS tUMINUS tUNARY_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 tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER tRATIONAL tIMAGINARY tLABEL_END tANDDOT tBDOT2 tBDOT3 prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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 tBDOT2 tBDOT3 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 kIN nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN begin_block { result = @builder.preexe(val[0], *val[1]) } begin_block: tLCURLY top_compstmt tRCURLY { result = val } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :error, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt_or_begin { result = [ val[0] ] } | stmts terms stmt_or_begin { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt_or_begin: stmt | klBEGIN begin_block { diagnostic :error, :begin_in_method, nil, val[0] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL mrhs_arg kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) begin_body = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.multi_assign(val[0], val[1], begin_body) } | mlhs tEQL mrhs_arg { result = @builder.multi_assign(val[0], val[1], val[2]) } | expr command_asgn: lhs tEQL command_rhs { result = @builder.assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_rhs { @builder.op_assign(val[0], val[1], val[2]) } command_rhs: command_call =tOP_ASGN | command_call kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | command_asgn expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg kIN { @lexer.state = :expr_beg @lexer.command_start = false pattern_variables.push result = @lexer.in_kwarg @lexer.in_kwarg = true } p_expr { @lexer.in_kwarg = val[2] result = @builder.in_match(val[0], val[1], val[3]) } | arg =tLBRACE_ARG expr_value: expr expr_value_do: { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop result = [ val[1], val[2] ] } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @context.push(:block) } brace_body tRCURLY { result = [ val[0], *val[2], val[3] ] @context.pop } fcall: operation command: fcall command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | fcall command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value call_op operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value call_op operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | k_return call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { if (val[1][0] == :anddot) diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] end result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { if (val[1][0] == :anddot) diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] end result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fitem: fname { result = @builder.symbol(val[0]) } | symbol undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 | tDSTAR | 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_rhs { result = @builder.assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | tCOLON3 tCONSTANT tOP_ASGN arg_rhs { const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) } | backref tOP_ASGN arg_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tDOT2 { result = @builder.range_inclusive(val[0], val[1], nil) } | arg tDOT3 { result = @builder.range_exclusive(val[0], val[1], nil) } | tBDOT2 arg { result = @builder.range_inclusive(nil, val[0], val[1]) } | tBDOT3 arg { result = @builder.range_exclusive(nil, val[0], val[1]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM simple_numeric tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | rel_expr =tCMP | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary relop: tGT | tLT | tGEQ | tLEQ rel_expr: arg relop arg =tGT { result = @builder.binary_op(val[0], val[1], val[2]) } | rel_expr relop arg =tGT { result = @builder.binary_op(val[0], val[1], val[2]) } arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } arg_rhs: arg =tOP_ASGN | arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } paren_args: tLPAREN2 opt_call_args rparen { result = val } | tLPAREN2 args_forward rparen { unless @static_env.declared_forward_args? diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] end result = [val[0], [@builder.forwarded_args(val[1])], val[2]] } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { # When branch gets invoked by RACC's lookahead # and command args start with '[' or '(' # we need to put `true` to the cmdarg stack # **before** `false` pushed by lexer # m [], n # ^ # Right here we have cmdarg [...0] because # lexer pushed it on '[' # We need to modify cmdarg stack to [...10] # # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack # and later lexer pushes corresponding bits on top of it. last_token = @last_token[0] lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.push(true) @lexer.cmdarg.push(top) else @lexer.cmdarg.push(true) end } call_args { # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) # but the push must be done after cmdarg.pop() in the parser. # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, # cmdarg.pop() to pop 1 pushed by command_args, # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. last_token = @last_token[0] lookahead = last_token == :tLBRACE_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.pop @lexer.cmdarg.push(top) else @lexer.cmdarg.pop end result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs_arg: mrhs { result = @builder.array(nil, val[0], nil) } | arg_value mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN { @lexer.cmdarg.push(false) } bodystmt kEND { @lexer.cmdarg.pop result = @builder.begin_keyword(val[0], val[2], val[3]) } | tLPAREN_ARG stmt { @lexer.state = :expr_endarg } rparen { result = @builder.begin(val[0], val[1], val[3]) } | tLPAREN_ARG { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], nil, val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | k_return { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | fcall brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE expr_value_do compstmt kEND { result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) } | kUNTIL expr_value_do compstmt kEND { result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kCASE expr_value opt_terms p_case_body kEND { *in_bodies, (else_t, else_body) = *val[3] result = @builder.case_match(val[0], val[1], in_bodies, else_t, else_body, val[4]) } | kFOR for_var kIN expr_value_do compstmt kEND { result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.cmdarg.push(false) } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.cmdarg.pop @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:def) @current_arg_stack.push(nil) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop @current_arg_stack.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:defs) @current_arg_stack.push(nil) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop @current_arg_stack.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary k_return: kRETURN { if @context.in_class? diagnostic :error, :invalid_return, nil, val[0] end } then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA f_rest_marg { result = val[0]. push(val[2]) } | f_marg_list tCOMMA f_rest_marg tCOMMA f_marg_list { result = val[0]. push(val[2]). concat(val[4]) } | f_rest_marg { result = [ val[0] ] } | f_rest_marg tCOMMA f_marg_list { result = [ val[0], *val[2] ] } f_rest_marg: tSTAR f_norm_arg { result = @builder.restarg(val[0], val[1]) } | tSTAR { result = @builder.restarg(val[0]) } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_block_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_no_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_block_args_tail: tCOMMA block_args_tail { result = val[1] } | # nothing { result = [] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_block_args_tail { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | block_args_tail opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { @max_numparam_stack.has_ordinary_params! @current_arg_stack.set(nil) result = @builder.args(val[0], val[1], val[2]) } | tPIPE block_param opt_bv_decl tPIPE { @max_numparam_stack.has_ordinary_params! @current_arg_stack.set(nil) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: opt_nl { result = [] } | opt_nl tSEMI bv_decls opt_nl { result = val[2] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic @max_numparam_stack.push @context.push(:lambda) } f_larglist { @context.pop @lexer.cmdarg.push(false) } lambda_body { args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] result = [ args, val[3] ] @max_numparam_stack.pop @static_env.unextend @lexer.cmdarg.pop } f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN { @max_numparam_stack.has_ordinary_params! result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { if val[0].any? @max_numparam_stack.has_ordinary_params! end result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } bodystmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @context.push(:block) } do_body kEND { result = [ val[0], *val[2], val[3] ] @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call dot_or_colon operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call dot_or_colon operation2 opt_paren_args brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | block_call dot_or_colon operation2 command_args do_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } method_call: fcall paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value call_op operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value call_op paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @context.push(:block) } brace_body tRCURLY { result = [ val[0], *val[2], val[3] ] @context.pop } | kDO { @context.push(:block) } do_body kEND { result = [ val[0], *val[2], val[3] ] @context.pop } brace_body: { @static_env.extend_dynamic @max_numparam_stack.push } opt_block_param compstmt { args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] result = [ args, val[2] ] @max_numparam_stack.pop @static_env.unextend } do_body: { @static_env.extend_dynamic @max_numparam_stack.push } { @lexer.cmdarg.push(false) } opt_block_param bodystmt { args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] result = [ args, val[3] ] @max_numparam_stack.pop @static_env.unextend @lexer.cmdarg.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body p_case_body: kIN { @lexer.state = :expr_beg @lexer.command_start = false @pattern_variables.push @pattern_hash_keys.push result = @lexer.in_kwarg @lexer.in_kwarg = true } p_top_expr then { @lexer.in_kwarg = val[1] } compstmt p_cases { result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]), *val[6] ] } p_cases: opt_else { result = [ val[0] ] } | p_case_body p_top_expr: p_top_expr_body { result = [ val[0], nil ] } | p_top_expr_body kIF_MOD expr_value { result = [ val[0], @builder.if_guard(val[1], val[2]) ] } | p_top_expr_body kUNLESS_MOD expr_value { result = [ val[0], @builder.unless_guard(val[1], val[2]) ] } p_top_expr_body: p_expr | p_expr tCOMMA { # array patterns that end with comma # like 1, 2, # must be emitted as `array_pattern_with_tail` item = @builder.match_with_trailing_comma(val[0]) result = @builder.array_pattern(nil, [ item ], nil) } | p_expr tCOMMA p_args { result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) } | p_args_tail { result = @builder.array_pattern(nil, val[0], nil) } | p_kwargs { result = @builder.hash_pattern(nil, val[0], nil) } p_expr: p_as p_as: p_expr tASSOC p_variable { result = @builder.match_as(val[0], val[1], val[2]) } | p_alt p_alt: p_alt tPIPE p_expr_basic { result = @builder.match_alt(val[0], val[1], val[2]) } | p_expr_basic p_lparen: tLPAREN2 { result = val[0] @pattern_hash_keys.push } p_lbracket: tLBRACK2 { result = val[0] @pattern_hash_keys.push } p_expr_basic: p_value | p_const p_lparen p_args rparen { @pattern_hash_keys.pop pattern = @builder.array_pattern(nil, val[2], nil) result = @builder.const_pattern(val[0], val[1], pattern, val[3]) } | p_const p_lparen p_kwargs rparen { @pattern_hash_keys.pop pattern = @builder.hash_pattern(nil, val[2], nil) result = @builder.const_pattern(val[0], val[1], pattern, val[3]) } | p_const tLPAREN2 rparen { result = @builder.const_pattern(val[0], val[1], nil, val[2]) } | p_const p_lbracket p_args rbracket { @pattern_hash_keys.pop pattern = @builder.array_pattern(nil, val[2], nil) result = @builder.const_pattern(val[0], val[1], pattern, val[3]) } | p_const p_lbracket p_kwargs rbracket { @pattern_hash_keys.pop pattern = @builder.hash_pattern(nil, val[2], nil) result = @builder.const_pattern(val[0], val[1], pattern, val[3]) } | p_const tLBRACK2 rbracket { result = @builder.const_pattern(val[0], val[1], nil, val[2]) } | tLBRACK { @pattern_hash_keys.push } p_args rbracket { @pattern_hash_keys.pop result = @builder.array_pattern(val[0], val[2], val[3]) } | tLBRACK rbracket { result = @builder.array_pattern(val[0], [], val[1]) } | tLBRACE { @pattern_hash_keys.push } p_kwargs tRCURLY { @pattern_hash_keys.pop result = @builder.hash_pattern(val[0], val[2], val[3]) } | tLBRACE tRCURLY { result = @builder.hash_pattern(val[0], [], val[1]) } | tLPAREN { @pattern_hash_keys.push } p_expr rparen { @pattern_hash_keys.pop result = @builder.begin(val[0], val[2], val[3]) } p_args: p_expr { result = [ val[0] ] } | p_args_head { result = val[0] } | p_args_head p_arg { result = [ *val[0], val[1] ] } | p_args_head tSTAR tIDENTIFIER { match_rest = @builder.match_rest(val[1], val[2]) result = [ *val[0], match_rest ] } | p_args_head tSTAR tIDENTIFIER tCOMMA p_args_post { match_rest = @builder.match_rest(val[1], val[2]) result = [ *val[0], match_rest, *val[4] ] } | p_args_head tSTAR { result = [ *val[0], @builder.match_rest(val[1]) ] } | p_args_head tSTAR tCOMMA p_args_post { result = [ *val[0], @builder.match_rest(val[1]), *val[3] ] } | p_args_tail p_args_head: p_arg tCOMMA { # array patterns that end with comma # like [1, 2,] # must be emitted as `array_pattern_with_tail` item = @builder.match_with_trailing_comma(val[0]) result = [ item ] } | p_args_head p_arg tCOMMA { # array patterns that end with comma # like [1, 2,] # must be emitted as `array_pattern_with_tail` last_item = @builder.match_with_trailing_comma(val[1]) result = [ *val[0], last_item ] } p_args_tail: tSTAR tIDENTIFIER { match_rest = @builder.match_rest(val[0], val[1]) result = [ match_rest ] } | tSTAR tIDENTIFIER tCOMMA p_args_post { match_rest = @builder.match_rest(val[0], val[1]) result = [ match_rest, *val[3] ] } | tSTAR { match_rest = @builder.match_rest(val[0]) result = [ match_rest ] } | tSTAR tCOMMA p_args_post { match_rest = @builder.match_rest(val[0]) result = [ match_rest, *val[2] ] } p_args_post: p_arg { result = [ val[0] ] } | p_args_post tCOMMA p_arg { result = [ *val[0], val[2] ] } p_arg: p_expr p_kwargs: p_kwarg tCOMMA p_kwrest { result = [ *val[0], *val[2] ] } | p_kwarg { result = val[0] } | p_kwrest { result = val[0] } | p_kwarg tCOMMA p_kwnorest { result = [ *val[0], *val[2] ] } | p_kwnorest { result = [ *val[0], *val[2] ] } p_kwarg: p_kw { result = [ val[0] ] } | p_kwarg tCOMMA p_kw { result = [ *val[0], val[2] ] } p_kw: p_kw_label p_expr { result = @builder.match_pair(*val[0], val[1]) } | p_kw_label { result = @builder.match_label(*val[0]) } p_kw_label: tLABEL { check_kwarg_name(val[0]) result = [:label, val[0]] } | tSTRING_BEG string_contents tLABEL_END { result = [:quoted, [val[0], val[1], val[2]]] } p_kwrest: kwrest_mark tIDENTIFIER { result = [ @builder.match_rest(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.match_rest(val[0], nil) ] } p_kwnorest: kwrest_mark kNIL { result = [ @builder.match_nil_pattern(val[0], val[1]) ] } p_value: p_primitive | p_primitive tDOT2 p_primitive { result = @builder.range_inclusive(val[0], val[1], val[2]) } | p_primitive tDOT3 p_primitive { result = @builder.range_exclusive(val[0], val[1], val[2]) } | p_primitive tDOT2 { result = @builder.range_inclusive(val[0], val[1], nil) } | p_primitive tDOT3 { result = @builder.range_exclusive(val[0], val[1], nil) } | p_variable | p_var_ref | p_const | tBDOT2 p_primitive { result = @builder.range_inclusive(nil, val[0], val[1]) } | tBDOT3 p_primitive { result = @builder.range_exclusive(nil, val[0], val[1]) } p_primitive: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | keyword_variable { result = @builder.accessible(val[0]) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } p_variable: tIDENTIFIER { result = @builder.match_var(val[0]) } p_var_ref: tCARET tIDENTIFIER { lvar = @builder.accessible(@builder.ident(val[1])) result = @builder.pin(val[0], lvar) } p_const: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | p_const tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCONSTANT { result = @builder.const(val[0]) } opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tSTRING { string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } symbols: tSYMBOLS_BEG symbol_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } symbol_list: # nothing { result = [] } | symbol_list word tSPACE { result = val[0] << @builder.word(val[1]) } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } qsym_list: # nothing { result = [] } | qsym_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.symbol_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cmdarg.push(false) @lexer.cond.push(false) } compstmt tSTRING_DEND { @lexer.cmdarg.pop @lexer.cond.pop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: ssym | dsym ssym: tSYMBOL { @lexer.state = :expr_end result = @builder.symbol(val[0]) } dsym: tSYMBEG string_contents tSTRING_END { @lexer.state = :expr_end result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: simple_numeric { result = val[0] } | tUNARY_NUM simple_numeric =tLOWEST { if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end } simple_numeric: tINTEGER { @lexer.state = :expr_end result = @builder.integer(val[0]) } | tFLOAT { @lexer.state = :expr_end result = @builder.float(val[0]) } | tRATIONAL { @lexer.state = :expr_end result = @builder.rational(val[0]) } | tIMAGINARY { @lexer.state = :expr_end result = @builder.complex(val[0]) } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { if (node = val[0]) && node.type == :ident name = node.children[0] if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && context.in_dynamic_block? # definitely an implicit param location = node.loc.expression if max_numparam_stack.has_ordinary_params? diagnostic :error, :ordinary_param_defined, nil, [nil, location] end raw_context = context.stack.dup raw_max_numparam_stack = max_numparam_stack.stack.dup # ignore current block scope raw_context.pop raw_max_numparam_stack.pop raw_context.reverse_each do |outer_scope| if outer_scope == :block || outer_scope == :lambda outer_scope_has_numparams = raw_max_numparam_stack.pop > 0 if outer_scope_has_numparams diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] else # for now it's ok, but an outer scope can also be a block # with numparams, so we need to continue end else # found an outer scope that can't have numparams # like def/class/etc break end end static_env.declare(name) max_numparam_stack.register(name[1].to_i) end end result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: tLT { @lexer.state = :expr_value } expr_value term { result = [ val[0], val[2] ] } | # nothing { result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | tLPAREN2 args_forward rparen { result = @builder.forward_args(val[0], val[1], val[2]) @static_env.declare_forward_args @lexer.state = :expr_value } | { result = @lexer.in_kwarg @lexer.in_kwarg = true } f_args term { @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_no_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_args_tail: tCOMMA args_tail { result = val[1] } | # nothing { result = [] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | args_tail { result = val[0] } | # nothing { result = [] } args_forward: tBDOT3 { result = val[0] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] @max_numparam_stack.has_ordinary_params! result = val[0] } f_arg_asgn: f_norm_arg { @current_arg_stack.set(val[0][0]) result = val[0] } f_arg_item: f_arg_asgn { @current_arg_stack.set(0) result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_label: tLABEL { check_kwarg_name(val[0]) @static_env.declare val[0][0] @max_numparam_stack.has_ordinary_params! @current_arg_stack.set(val[0][0]) result = val[0] } f_kw: f_label arg_value { @current_arg_stack.set(nil) result = @builder.kwoptarg(val[0], val[1]) } | f_label { @current_arg_stack.set(nil) result = @builder.kwarg(val[0]) } f_block_kw: f_label primary_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kwarg: f_block_kw { result = [ val[0] ] } | f_block_kwarg tCOMMA f_block_kw { result = val[0] << val[2] } f_kwarg: f_kw { result = [ val[0] ] } | f_kwarg tCOMMA f_kw { result = val[0] << val[2] } kwrest_mark: tPOW | tDSTAR f_no_kwarg: kwrest_mark kNIL { result = [ @builder.kwnilarg(val[0], val[1]) ] } f_kwrest: kwrest_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.kwrestarg(val[0]) ] } f_opt: f_arg_asgn tEQL arg_value { @current_arg_stack.set(0) result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: f_arg_asgn tEQL primary_value { @current_arg_stack.set(0) result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } | tSTRING_BEG string_contents tLABEL_END arg_value { result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) } | tDSTAR arg_value { result = @builder.kwsplat(val[0], val[1]) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: call_op | tCOLON2 call_op: tDOT { result = [:dot, val[0][1]] } | tANDDOT { result = [:anddot, val[0][1]] } opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 27 end def default_encoding Encoding::UTF_8 end parser-2.7.0.2/lib/parser/variables_stack.rb0000644000004100000410000000061713617025313020735 0ustar www-datawww-data# frozen_string_literal: true module Parser class VariablesStack def initialize @stack = [] push end def push @stack << Set.new end def pop @stack.pop end def reset @stack.clear end def declare(name) @stack.last << name.to_sym end def declared?(name) @stack.last.include?(name.to_sym) end end end parser-2.7.0.2/lib/parser/rubymotion.rb0000644000004100000410000071414713617025313020021 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class RubyMotion < Parser::Base def version 19 # closest released match: v1_9_0_2 end def default_encoding Encoding::BINARY end ##### State transition tables begin ### clist = [ '-453,5,63,64,65,7,51,-453,-453,-453,57,58,-453,-453,-453,61,-453,59', '60,62,23,24,66,67,-453,272,-453,-453,-453,22,28,27,90,89,91,92,-453', '-453,17,-453,-453,-453,-453,-453,6,41,8,9,94,93,95,84,50,86,85,87,551', '88,96,97,-86,82,83,38,39,37,-453,-453,-453,-453,-453,-453,-453,-453', '-453,-453,-453,-453,-453,-453,458,451,-453,-453,-453,36,-453,-453,30', '-86,-453,52,53,-453,-453,54,-453,32,-453,572,-453,40,-453,-453,-453', '-453,-453,-453,-453,18,-453,271,-453,-90,81,73,76,77,207,78,79,204,205', '751,74,80,-453,-453,-453,-453,-450,-453,56,-453,75,-453,-453,-450,-450', '-450,815,733,-450,-450,-450,682,-450,541,-93,604,-91,204,205,604,-450', '208,-450,-450,-450,204,205,550,571,480,481,-88,-450,-450,682,-450,-450', '-450,-450,-450,-86,530,-87,-89,530,-86,-87,102,655,603,530,-92,101,603', '542,914,-87,-88,543,416,-78,-91,-450,-450,-450,-450,-450,-450,-450,-450', '-450,-450,-450,-450,-450,-450,576,208,-450,-450,-450,-92,-450,-450,-82', '530,-450,-90,-80,-450,-450,-93,-450,-525,-450,646,-450,536,-450,-450', '-450,-450,-450,-450,-450,-279,-450,208,-450,-93,530,102,-279,-279,-279', '208,101,577,-279,-279,-524,-279,-450,-450,-450,-450,-525,-450,-93,-450', '-91,-450,-450,-93,102,-91,-80,-89,682,101,917,-279,-279,665,-279,-279', '-279,-279,-279,-88,580,-79,-259,654,-80,102,-87,-89,102,-79,101,-87', '-89,101,102,-92,-83,798,208,101,-92,-279,-279,-279,-279,-279,-279,-279', '-279,-279,-279,-279,-279,-279,-279,485,-84,-279,-279,-279,-80,592,825', '-80,-463,-279,-85,561,-279,102,-80,-90,-524,-279,101,-279,-90,-279,-279', '-279,-279,-279,-279,-279,-528,-279,561,-279,204,205,734,-528,-528,-528', '102,-79,585,-528,-528,101,-528,-279,-279,375,-83,-92,-279,272,102,-528', '-279,-91,-81,101,-86,272,498,-528,267,497,-528,-528,584,-528,-528,-528', '-528,-528,563,562,604,-79,498,-88,-79,500,561,714,-88,-82,-90,-79,-81', '561,793,646,-90,563,562,568,-528,-528,-528,-528,-528,-528,-528,-528', '-528,-528,-528,-528,-528,-528,603,-80,-528,-528,-528,-528,589,267,-88', '363,-528,594,-528,-528,102,267,561,-524,-528,101,-528,-528,-528,-528', '-528,-528,-528,-528,-528,271,-528,-528,-528,563,562,573,604,271,561', '-528,563,562,566,-524,-81,-279,-528,-528,919,-81,853,-528,-279,-279', '-279,-528,-89,-279,-279,-279,485,-279,673,-528,513,512,511,517,514,372', '603,-279,-279,-279,374,373,665,563,562,564,-81,-279,-279,-81,-279,-279', '-279,-279,-279,853,-81,673,-82,513,512,511,517,514,-459,563,562,559', '-458,-84,498,-459,227,500,227,-458,-92,-279,-279,-279,-279,-279,-279', '-279,-279,-279,-279,-279,-279,-279,-279,666,-73,-279,-279,-279,227,592', '-279,-59,227,-279,923,-455,-279,-279,789,-279,203,-279,-455,-279,904', '-279,-279,-279,-279,-279,-279,-279,208,-279,-459,-279,-82,744,-458,513', '512,511,517,514,204,205,493,902,201,-279,-279,-279,-279,-528,-279,545', '-279,722,-279,-91,-528,-528,-528,-85,547,-528,-528,-528,73,-528,-93', '102,-82,-455,519,-82,101,74,-528,-528,-528,-528,-82,523,522,526,525', '75,208,-528,-528,-463,-528,-528,-528,-528,-528,793,646,774,-79,513,512', '511,-457,514,202,-87,-456,-450,208,-457,-73,102,628,-456,-450,657,101', '-528,-528,-528,-528,-528,-528,-528,-528,-528,-528,-528,-528,-528,-528', '102,-78,-528,-528,-528,101,735,-528,-86,853,-528,208,201,-528,-528,491', '-528,639,-528,265,-528,932,-528,-528,-528,-528,-528,-528,-528,-457,-528', '-528,-528,-456,-450,102,201,-460,-462,498,101,853,500,892,-460,-462', '-528,-528,-528,-528,-274,-528,890,-528,-462,-528,-89,-274,-274,-274', '102,853,-274,-274,-274,101,-274,646,227,853,202,208,-279,201,204,205', '-274,-274,-274,-279,557,298,299,936,-525,657,-274,-274,-279,-274,-274', '-274,-274,-274,202,-460,-462,204,205,659,224,-453,661,-461,226,225,222', '223,-453,774,-461,513,512,511,664,514,-274,-274,-274,-274,-274,-274', '-274,-274,-274,-274,-274,-274,-274,-274,-279,202,-274,-274,-274,227', '667,-274,675,676,-274,678,208,-274,-274,536,-274,685,-274,904,-274,713', '-274,-274,-274,-274,-274,-274,-274,-453,-274,-461,-274,716,98,-260,201', '224,-273,723,458,226,225,477,449,-273,-274,-274,-274,-274,-286,-274', '475,-274,-273,-274,458,-286,-286,-286,208,297,-286,-286,-286,673,-286', '513,512,511,517,514,201,227,208,737,-286,-286,296,922,748,451,449,-521', '208,639,-286,-286,547,-286,-286,-286,-286,-286,202,208,-273,104,105', '106,107,108,519,267,267,224,639,227,227,226,225,222,223,526,525,762', '-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286', '202,227,-286,-286,-286,-450,246,-286,-522,276,-286,-259,-450,-286,-286', '766,-286,-521,-286,657,-286,-450,-286,-286,-286,-286,-286,-286,-286', '784,-286,787,-286,224,201,665,208,226,225,-521,646,489,797,208,208,-232', '-286,-286,806,-286,414,-286,-232,-232,-232,-286,-261,-232,-232,-232', '-453,-232,-279,-450,904,952,953,-453,955,-279,817,-232,-522,819,-525', '822,-453,823,-279,657,826,-232,-232,201,-232,-232,-232,-232,-232,-280', '200,853,202,853,-522,-322,-280,201,208,198,-280,201,-322,833,539,-280', '834,-280,413,639,853,-322,197,537,196,208,-280,414,-453,845,-279,846', '-232,849,-232,851,853,853,208,-232,858,-232,-232,-232,267,-232,-232', '-232,-232,860,-232,202,104,105,106,107,108,-280,-525,-232,-232,-232', '862,-322,195,202,194,-232,-280,202,-232,-232,-524,-232,-232,-232,-232', '-232,708,709,193,-232,710,96,97,415,-232,417,418,673,-232,513,512,511', '517,514,868,207,870,208,-232,-232,-232,-232,-232,-232,-232,-232,-232', '-232,-232,-232,-232,-232,873,-262,-232,-232,-232,880,853,-232,884,267', '-232,885,669,-232,-232,887,-232,449,-232,893,-232,857,-232,-232,-232', '-232,-232,-232,-232,894,-232,-232,-232,895,447,449,451,673,540,513,512', '511,517,514,904,-529,-232,-232,-58,-232,208,-232,-529,-529,-529,-232', '470,-529,-529,-529,516,-529,513,512,511,517,514,471,478,276,-529,-529', '-529,-529,669,104,105,106,107,108,208,-529,-529,672,-529,-529,-529,-529', '-529,673,267,513,512,511,517,514,482,519,703,673,906,513,512,511,517', '514,523,522,526,525,486,-529,-529,-529,-529,-529,-529,-529,-529,-529', '-529,-529,-529,-529,-529,487,669,-529,-529,-529,227,907,-529,493,494', '-529,669,501,-529,-529,502,-529,451,-529,912,-529,536,-529,-529,-529', '-529,-529,-529,-529,365,-529,-529,-529,744,,513,512,511,517,514,,,,', ',,-529,-529,-529,-529,-232,-529,,-529,,-529,,-232,-232,-232,,,-232,-232', '-232,,-232,,,744,519,513,512,511,517,514,-232,,,523,522,526,525,,,,-232', '-232,,-232,-232,-232,-232,-232,,,,,673,,513,512,511,517,514,,519,673', ',513,512,511,517,514,,523,522,526,525,,,,,,,,,-232,,-530,,,,,-232,519', '-530,-530,-530,267,-232,-530,-530,-530,669,-530,526,525,,,,,,672,-530', '-530,-530,-530,,,,,-232,,,-530,-530,,-530,-530,-530,-530,-530,,,,-232', ',,,,-232,,,673,-232,513,512,511,517,514,,,,,-530,-530,-530,-530,-530', '-530,-530,-530,-530,-530,-530,-530,-530,-530,,,-530,-530,-530,,,-530', ',,-530,,669,-530,-530,,-530,,-530,,-530,,-530,-530,-530,-530,-530,-530', '-530,,-530,-530,-530,516,,513,512,511,517,514,,,,,,,-530,-530,-530,-530', '-393,-530,,-530,,-530,,-393,-393,-393,,,-393,-393,-393,,-393,227,,,519', ',,,,-393,-393,-393,,523,522,526,525,241,242,,-393,-393,,-393,-393,-393', '-393,-393,,,,,,224,,230,,226,225,222,223,,,228,,229,,,,,-393,-393,-393', '-393,-393,-393,-393,-393,-393,-393,-393,-393,-393,-393,,,-393,-393,-393', ',,-393,,267,-393,,,-393,-393,,-393,,-393,,-393,,-393,-393,-393,-393', '-393,-393,-393,,-393,-393,-393,,516,,513,512,511,517,514,,,,,,-393,-393', ',-393,,-393,,,,-393,5,63,64,65,7,51,,,,57,58,,,,61,519,59,60,62,23,24', '66,67,,523,522,526,525,22,28,27,90,89,91,92,,673,17,513,512,511,517', '514,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,673,', '513,512,511,517,514,673,669,513,512,511,517,514,,,,,,36,,,30,,,52,53', ',,54,,32,,,,40,673,669,513,512,511,517,514,18,519,,,,81,73,76,77,,78', '79,526,525,,74,80,5,63,64,65,7,51,56,,75,57,58,,,519,61,,59,60,62,23', '24,66,67,,526,525,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95', '84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,673,,513,512,511,517', '514,,,,,,36,,,278,,,52,53,,,54,,32,,,,40,673,,513,512,511,517,514,18', '519,,,,81,73,76,77,,78,79,526,525,,74,80,5,63,64,65,7,51,56,,75,57,58', ',,519,61,,59,60,62,23,24,66,67,,526,525,,,22,28,27,90,89,91,92,,,17', ',,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,', ',,,673,,513,512,511,517,514,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,673', ',513,512,511,517,514,18,519,,,,81,73,76,77,,78,79,526,525,,74,80,5,63', '64,65,7,51,56,,75,57,58,,,519,61,,59,60,62,23,24,66,67,,526,525,,,22', '28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96', '97,,82,83,38,39,37,227,,,,,,,673,,513,512,511,517,514,,,241,242,,36', ',,30,,,52,53,,,54,,32,224,,230,40,226,225,222,223,,,,18,519,,,,81,73', '76,77,,78,79,526,525,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60', '62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95', '84,50,86,85,87,,88,96,97,,82,83,38,39,37,227,231,236,237,238,233,235', '243,244,239,240,,-549,-549,,,241,242,,36,,,30,,,52,53,,,54,,32,224,', '230,40,226,225,222,223,234,232,228,18,229,,,,81,73,76,77,,78,79,,,,74', '80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22', '28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96', '97,,82,83,38,39,37,227,231,236,237,238,233,235,,,239,240,,,,,,241,242', ',36,,,30,,,52,53,,,54,,32,224,,230,40,226,225,222,223,234,232,228,18', '229,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61', ',59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,227,-549,-549,-549,-549', '233,235,,,-549,-549,,,,,,241,242,,36,,,30,,,52,53,,,54,,32,224,,230', '40,226,225,222,223,234,232,228,18,229,,,,81,73,76,77,,78,79,,,,74,80', '5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28', '27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97', ',82,83,38,39,37,227,-549,-549,-549,-549,233,235,,,-549,-549,,,,,,241', '242,,36,,,30,,,52,53,,,54,,32,224,,230,40,226,225,222,223,234,232,228', '18,229,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,', ',,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41', '8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,227,231,236,237', '238,233,235,243,244,239,240,,-549,-549,,,241,242,,36,,,30,,,52,53,,', '54,,32,224,,230,40,226,225,222,223,234,232,228,18,229,,,,81,73,76,77', ',78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66', '67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85', '87,,88,96,97,,82,83,38,39,37,227,-549,-549,-549,-549,233,235,,,-549', '-549,,,,,,241,242,,36,,,30,,,52,53,,,54,,32,224,,230,40,226,225,222', '223,234,232,228,18,229,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65,7,51', '56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,', ',17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', '227,-549,-549,-549,-549,233,235,,,-549,-549,,,,,,241,242,,36,,,30,,', '52,53,,,54,,32,224,,230,40,226,225,222,223,234,232,228,18,229,,,,81', '73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,227,,,,,,,,,,,,,,,,241,242,,36', ',,30,,,52,53,,,54,,32,224,,230,40,226,225,222,223,,,228,18,229,,,,81', '73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,227,,,,,,,,,,,,,,,,241,242,,36', ',,30,,,52,53,,,54,,32,224,,230,40,226,225,222,223,,,228,18,229,,,,81', '73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,227,,,,,,,,,,,,,,,,241,242,,36', ',,30,,,52,53,,,54,,32,224,,230,40,226,225,222,223,,,228,18,229,,,,81', '73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,227,-549,-549,-549,-549,233,235', ',,-549,-549,,,,,,241,242,,36,,,30,,,52,53,,,54,,32,224,,230,40,226,225', '222,223,234,232,228,18,229,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65', '7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91', '92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39', '37,227,-549,-549,-549,-549,233,235,,,-549,-549,,,,,,241,242,,36,,,278', ',,52,53,,,54,,32,224,,230,40,226,225,222,223,234,232,228,18,229,,,,81', '73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,227,231,236,237,238,233,235,243', ',239,240,,,,,,241,242,,36,,,30,,,52,53,,,54,,32,224,,230,40,226,225', '222,223,234,232,228,18,229,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65', '7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91', '92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39', '37,227,,,,,,,,,,,,,,,,241,242,,36,,,30,,,52,53,,,54,,32,224,,230,40', '226,225,222,223,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65,7,51', '56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,', ',17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', '227,,,,,,,,,,,,,,,,241,242,,36,,,30,,,52,53,,,54,,32,224,,,40,226,225', '222,223,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75', '57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,', ',,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,', ',,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,73,76,77', ',78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66', '67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85', '87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54', ',32,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65,7,51', '56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,', ',17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,73', '76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62,23', '24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84,50', '86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53', ',,54,,32,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65', '7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91', '92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39', '37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81', '73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52', '53,,,54,,32,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,5,63,64', '65,7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89', '91,92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38', '39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,', ',,81,73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58,,,,61,,59', '60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93', '95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,', '30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80', '5,63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28', '27,90,89,91,92,,,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97', ',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,278,,,52,53,,,54,,32,,,,40,', ',,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,5,63,64,65,7,51,56,,75,57,58', ',,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,6,41', '8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,', ',,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79', ',,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,', ',,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261', '88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,', '256,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,7', '51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92', ',,17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23', '24,66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86', '85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53', ',,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,256,,254,,40,,,,,,,,217,', ',,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93', '95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,256,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,', ',,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,', ',,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261', '88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,', '256,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91', '92,,,219,,,,,,,289,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,,516,293', '513,512,511,517,514,,,,,,,,,,,,,,,286,,,283,,,52,53,,,54,,282,,,,519', ',,,,,,,,523,522,526,525,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92', ',,219,,,,,,578,289,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,,,293', ',227,231,236,237,238,233,235,243,244,239,240,,220,221,,,241,242,286', ',,218,,,52,53,,,54,,,,224,,230,,226,225,222,223,234,232,228,,229,,,81', '73,76,77,,78,79,,,,74,80,,,245,295,-226,,56,,75,63,64,65,,51,,,,57,58', ',,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,', ',,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,', ',,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,', '78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66', '67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85', '87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,', '54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91', '92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81', '73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50', '86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52', '53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65', ',51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89', '91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83,38', '39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,256,,,,40,,,,,,,,217', ',,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,', ',212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,', ',74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22', '28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97', ',82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,', ',,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,', ',,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,', ',94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,', ',,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,', ',74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22', '28,27,90,89,91,92,,,17,,,,,578,,41,,,94,93,95,84,50,86,85,87,,88,96', '97,,82,83,38,39,37,227,231,236,237,238,233,235,243,244,239,240,,220', '221,,,241,242,,212,,,218,,,52,53,,,54,,,224,,230,40,226,225,222,223', '234,232,228,18,229,,,,81,73,76,77,,78,79,,,,74,80,102,245,,,,101,56', ',75,63,64,65,,51,,,,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,289,,,94,93,95,84,50,86,85,87,,88,96,97', ',82,83,,516,293,513,512,511,517,514,,,,,,,,,,,,,,,328,,,30,,,52,53,', ',54,,32,,,,519,703,,,,,,,,523,522,526,525,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,289,,,94,93,95,333,50,86,85,334,,88,96,97', ',82,83,,744,293,513,512,511,517,514,,,,,,,,,,,,340,,,335,,,218,,,52', '53,,,54,,,,,,519,,,,,,,,,523,522,526,525,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,289,,,94,93,95,333,50,86,85,334,,88,96,97', ',82,83,,516,293,513,512,511,517,514,,,,,,,,,,,,,,,335,,,218,,,52,53', ',,54,,,,,,519,505,,,,,,,,523,522,526,525,81,73,76,77,,78,79,,,,74,80', ',63,64,65,7,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27', '90,89,91,92,,,17,,,,,581,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97', ',82,83,38,39,37,227,231,236,237,238,233,235,243,244,239,240,,220,221', ',,241,242,,36,,,30,,,52,53,,,54,,32,224,,230,40,226,225,222,223,234', '232,228,18,229,,,,81,73,76,77,,78,79,,,,74,80,,245,,,,365,56,,75,63', '64,65,,51,,,,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91', '92,,,17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23', '24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50,86', '85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53', ',,54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,', ',17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,', ',,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76', '77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23,24', '66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50,86,85', '87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,', '54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,7,51', '56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,', ',17,,,,,,6,41,8,9,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23', '24,66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86', '85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53', ',,54,,382,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65', ',51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91', '92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,382,,,,40,,,,,,,,217,,,,', '81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60', '62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,', ',52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89', '91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39', '37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,', '81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60', '62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,', ',52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89', '91,92,,,17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39', '37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81', '73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50', '86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52', '53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65', ',51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91', '92,,,17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73', '76,77,,78,79,,,,74,80,208,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62', '258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95', '84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218', ',,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63', '64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292', '90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83', '38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217', ',,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,', '82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,', ',,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,', ',,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,', ',,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,', ',,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78', '79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67', ',,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87', ',88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54', ',,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,', ',,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,', ',52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90', '89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38', '39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,', ',,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,', '82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,', ',,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,', ',,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,', ',,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,', ',,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78', '79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67', ',,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87', ',88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54', ',,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,', ',,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,', ',52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90', '89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38', '39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,', ',,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,', '82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,', ',,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,', ',,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,', ',,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,', ',,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78', '79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67', ',,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87', ',88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54', ',,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,', ',,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,', ',52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90', '89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38', '39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,', ',,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,', '82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,', ',,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,', ',,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,', ',,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,', ',,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78', '79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67', ',,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87', ',88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54', ',,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,', ',,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,', ',52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90', '89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38', '39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,', ',,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93', '95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,256,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,', ',,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,', ',,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261', '88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,463,53,,,54', ',256,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,', '51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91', '92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39', '37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,256,,254,,40,,,,,,,,217', ',,,,81,73,76,77,,78,79,,,,74,80,208,63,64,65,,51,56,,75,57,58,,,,61', ',59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,289', ',,94,93,95,84,50,86,85,87,,88,96,97,,82,83,,,293,227,231,236,237,238', '233,235,243,244,239,240,,220,221,,,241,242,,286,,,218,,,52,53,,,54,', ',224,,230,,226,225,222,223,234,232,228,,229,,,,81,73,76,77,,78,79,,', ',74,80,,245,,473,,,56,,75,63,64,65,,51,,,,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,289,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,,516,293,513,512,511,517,514,,,,,,,,,,', ',,,,286,,,283,,,52,53,,,54,,,,,,519,,,,,,,,,523,522,526,525,81,73,76', '77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259', '66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86', '85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,491,,52', '53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65', ',51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91', '92,,,17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23', '24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50,86', '85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53', ',,54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,', ',17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,', ',,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76', '77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23,24', '66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50,86,85', '87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,', '54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,', ',,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50', '86,85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,', ',52,53,,,54,,256,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,', '82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,', ',,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,', ',,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,', ',,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,', ',,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78', '79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67', ',,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87', ',88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54', ',,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37', ',,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,609,,254,,40,,,,,,,,217,', ',,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,', ',212,,,218,,,52,53,,,54,,,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79', ',,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,', ',,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87', ',88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54', ',,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17', ',,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37,,,,', ',,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,254,,40,,,,,,,,18,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,289,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,,516,293,513,512,511,517,514,,,,,,,,,,', ',,,,286,,,283,,,52,53,,,54,,,,,,519,,,,,,,,,523,522,526,525,81,73,76', '77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259', '66,67,,,,,,257,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86', '85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52', '53,,,54,,256,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63', '64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292', '90,89,91,92,,,219,,,,,,,289,,,94,93,95,84,50,86,85,87,,88,96,97,,82', '83,,,293,,,,,,,,,,,,,,,,,,,,286,,,283,,,52,53,,,54,,,,,,,,,,,,,,,,,', ',81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60', '62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93', '95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,', ',218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,', '82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,', ',,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,', ',,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,', ',,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,', ',,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78', '79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,', ',,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88', '96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,', ',40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57', '58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219', ',,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,', ',,,,,,,,,,,,212,,,218,,,52,53,,,54,,382,,,,40,,,,,,,,217,,,,,81,73,76', '77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259', '66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86', '85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52', '53,,,54,,609,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90', '89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83', '38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217', ',,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,256,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74', '80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257', '28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96', '97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,256,,254', ',40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75', '57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92,,,219', ',,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37,,,,', ',,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,256,,254,,40,,,,,,,,217,,,,,81', '73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62', '23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95,84,50', '86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52', '53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65', ',51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89', '91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39', '37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,', '81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60', '62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93', '95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,', ',218,,,52,53,,,54,,720,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74', '80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257', '288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96', '97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40', ',,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58', ',,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41', ',,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,', ',,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79', ',,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,', ',22,28,27,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96', '97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40', ',,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58', ',,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,219,,,,,,,41', ',,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,', ',,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79', ',,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,', ',,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87', ',88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54', ',,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56', ',75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,', ',,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,289,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,,,293,,,,,,,,,,,,,,,,,,,,286,,,283,,,52', '53,,,54,,,,,,,,,,,,,,,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91', '92,,,219,,,,,,,289,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,,,293', ',,,,,,,,,,,,,,,,,,,286,,,283,,,52,53,,,54,,,,,,,,,,,,,,,,,,,81,73,76', '77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259', '66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86', '85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53', ',,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,', ',17,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,', ',,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76', '77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259', '66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86', '85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53', ',,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,', ',219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,', ',,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84', '50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,', ',52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90', '89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38', '39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,,,,,,217,', ',,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,', '82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,,,,,40,,,', ',,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,', ',,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,', ',,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,', ',,,,,,,,,,,212,,,218,,,52,53,,,54,,256,,254,,40,,,,,,,,217,,,,,81,73', '76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258', '259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84', '50,86,85,87,261,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218', ',,52,53,,,54,,256,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,289,,,94,93,95,84,50,86,85,87,,88,96,97', ',82,83,,,293,,,,,,,,,,,,,,,,,,,,839,,,218,,,52,53,,,54,,,,,,,,,,,,,', ',,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,23,24,66,67,,,,,,22,28,27,90,89,91,92,,,17,,,,,,,41,,,94,93,95', '84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218', ',,52,53,,,54,,,,,,40,,,,,,,,18,,,,,81,73,76,77,,78,79,,,,74,80,,63,64', '65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288,292,90', '89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,,88,96,97,,82,83,38', '39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,,609,,,,40,,,,,,,,217', ',,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,,,,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80', ',63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,288', '292,90,89,91,92,,,219,,,,,,,289,,,94,93,95,84,50,86,85,87,,88,96,97', ',82,83,,,293,,,,,,,,,,,,,,,,,,,,882,,,218,,,52,53,,,54,,,,,,,,,,,,,', ',,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59', '60,62,258,259,66,67,,,,,,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94', '93,95,84,50,86,85,87,,88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212', ',,218,,,52,53,,,54,,609,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,', ',,74,80,,63,64,65,,51,56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,', ',,257,288,292,90,89,91,92,,,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261', '88,96,97,,82,83,38,39,37,,,,,,,,,,,,,,,,,,,,212,,,218,,,52,53,,,54,', '609,,254,,40,,,,,,,,217,,,,,81,73,76,77,,78,79,,,,74,80,,63,64,65,,51', '56,,75,57,58,,,,61,,59,60,62,258,259,66,67,,,,,,257,28,27,90,89,91,92', ',,219,,,,,,,41,,,94,93,95,84,50,86,85,87,261,88,96,97,,82,83,38,39,37', '227,231,236,237,238,233,235,243,244,239,240,,220,221,,,241,242,,212', ',-226,218,,,52,53,,,54,,256,224,254,230,40,226,225,222,223,234,232,228', '217,229,,,,81,73,76,77,,78,79,,,,74,80,,245,,-226,,,56,,75,160,171,161', '184,157,177,167,166,187,188,182,165,164,159,185,189,190,169,158,172', '176,178,170,163,,,,179,186,181,180,173,183,168,156,175,174,,,,,,155', '162,153,154,150,151,152,112,114,,,113,,,,,,,,145,146,,142,124,125,126', '133,130,132,,,127,128,,,,147,148,134,135,,,,,,,,,,,,,,139,138,,123,144', '141,140,136,137,131,129,121,143,122,,,149,81,,,,,,,,,,,80,160,171,161', '184,157,177,167,166,187,188,182,165,164,159,185,189,190,169,158,172', '176,178,170,163,,,,179,186,181,180,173,183,168,156,175,174,,,,,,155', '162,153,154,150,151,152,112,114,,,113,,,,,,,,145,146,,142,124,125,126', '133,130,132,,,127,128,,,,147,148,134,135,,,,,,,,,,,,,,139,138,,123,144', '141,140,136,137,131,129,121,143,122,,,149,81,,,,,,,,,,,80,160,171,161', '184,157,177,167,166,187,188,182,165,164,159,185,189,190,169,158,172', '176,178,170,163,,,,179,186,181,180,173,183,168,156,175,174,,,,,,155', '162,153,154,150,151,152,112,114,,,113,,,,,,,,145,146,,142,124,125,126', '133,130,132,,,127,128,,,,147,148,134,135,,,,,,,,,,,,,,139,138,,123,144', '141,140,136,137,131,129,121,143,122,,,149,81,,,,,,,,,,,80,160,171,161', '184,157,177,167,166,187,188,182,165,164,159,185,189,190,169,158,172', '176,178,170,163,,,,179,186,181,180,173,183,168,156,175,174,,,,,,155', '162,153,154,150,151,152,112,114,111,,113,,,,,,,,145,146,,142,124,125', '126,133,130,132,,,127,128,,,,147,148,134,135,,,,,,,,,,,,,,139,138,,123', '144,141,140,136,137,131,129,121,143,122,,,149,81,,,,,,,,,,,80,160,171', '161,184,157,177,167,166,187,188,182,165,164,159,185,189,190,169,158', '172,176,178,170,163,,,,179,186,181,180,173,183,168,156,175,174,,,,,', '155,162,153,154,150,151,152,112,114,,,113,,,,,,,,145,146,,142,124,125', '126,133,130,132,,,127,128,,,,147,148,134,135,,,,,,,,,,,,,,139,138,,123', '144,141,140,136,137,131,129,121,143,122,,,149,160,171,161,184,157,177', '167,166,187,188,182,165,164,159,185,189,190,169,158,172,176,178,170', '163,,,,179,186,181,350,349,351,348,156,175,174,,,,,,155,162,153,154', '345,346,347,343,114,86,85,344,,88,,,,,,145,146,,142,124,125,126,133', '130,132,,,127,128,,,,147,148,134,135,,,,,,355,,,,,,,,139,138,,123,144', '141,140,136,137,131,129,121,143,122,391,395,149,,392,,,,,,,,145,146', ',142,124,125,126,133,130,132,,,127,128,,,,147,148,134,135,,,,,,267,', ',,,,,,139,138,,123,144,141,140,136,137,131,129,121,143,122,927,395,149', ',928,,,,,,,,145,146,,142,124,125,126,133,130,132,,,127,128,,,,147,148', '134,135,,,,,,267,,,,,,,,139,138,,123,144,141,140,136,137,131,129,121', '143,122,632,395,149,,633,,,,,,,,145,146,,142,124,125,126,133,130,132', ',,127,128,,,,147,148,134,135,,,,,,267,,,,,,,,139,138,,123,144,141,140', '136,137,131,129,121,143,122,635,402,149,,636,,,,,,,,145,146,,142,124', '125,126,133,130,132,,,127,128,,,,147,148,134,135,,,,,,267,,,,,,,,139', '138,,123,144,141,140,136,137,131,129,121,143,122,929,402,149,,930,,', ',,,,,145,146,,142,124,125,126,133,130,132,,,127,128,,,,147,148,134,135', ',,,,,267,,,,,,,,139,138,,123,144,141,140,136,137,131,129,121,143,122', '595,395,149,,596,,,,,,,,145,146,,142,124,125,126,133,130,132,,,127,128', ',,,147,148,134,135,,,,,,267,,,,,,,,139,138,,123,144,141,140,136,137', '131,129,121,143,122,597,402,149,,598,,,,,,,,145,146,,142,124,125,126', '133,130,132,,,127,128,,,,147,148,134,135,,,,,,267,,,,,,,,139,138,,123', '144,141,140,136,137,131,129,121,143,122,595,395,149,,596,,,,,,,,145', '146,,142,124,125,126,133,130,132,,,127,128,,,,147,148,134,135,,,,,,267', ',,,,,,,139,138,,123,144,141,140,136,137,131,129,121,143,122,597,402', '149,,598,,,,,,,,145,146,,142,124,125,126,133,130,132,,,127,128,,,,147', '148,134,135,,,,,,267,,,,,,,,139,138,,123,144,141,140,136,137,131,129', '121,143,122,688,395,149,,689,,,,,,,,145,146,,142,124,125,126,133,130', '132,,,127,128,,,,147,148,134,135,,,,,,267,,,,,,,,139,138,,123,144,141', '140,136,137,131,129,121,143,122,690,402,149,,691,,,,,,,,145,146,,142', '124,125,126,133,130,132,,,127,128,,,,147,148,134,135,,,,,,267,,,,,,', ',139,138,,123,144,141,140,136,137,131,129,121,143,122,693,402,149,,694', ',,,,,,,145,146,,142,124,125,126,133,130,132,,,127,128,,,,147,148,134', '135,,,,,,267,,,,,,,,139,138,,123,144,141,140,136,137,131,129,121,143', '122,455,395,149,,456,,,,,,,,145,146,,142,124,125,126,133,130,132,,,127', '128,,,,147,148,134,135,,,,,,267,,,,,,,,139,138,,123,144,141,140,136', '137,131,129,121,143,122,455,395,149,,456,,,,,,,,145,146,,142,124,125', '126,133,130,132,,,127,128,,,,147,148,134,135,,,,,,,,,,,,,,139,138,,123', '144,141,140,136,137,131,129,121,143,122,455,395,149,,456,,,,,,,,145', '146,,142,124,125,126,133,130,132,,,127,128,,,,147,148,134,135,,,,,,', ',,,,,,,139,138,,123,144,141,140,136,137,131,129,121,143,122,397,402', '149,,399,,,,,,,,145,146,,142,124,125,126,133,130,132,,,127,128,,,,147', '148,134,135,,,,,,267,,,,,,,,139,138,,123,144,141,140,136,137,131,129', '121,143,122,946,402,149,,945,,,,,,,,145,146,,142,124,125,126,133,130', '132,,,127,128,,,,147,148,134,135,,,,,,267,,,,,,,,139,138,,123,144,141', '140,136,137,131,129,121,143,122,,,149,227,231,236,237,238,233,235,243', '244,239,240,,220,221,,,241,242,,,,,,,,,,,,,,,224,,230,,226,225,222,223', '234,232,228,,229,,227,231,236,237,238,233,235,243,244,239,240,,220,221', ',245,241,242,,,,,,,,,,,,,,,224,,230,,226,225,222,223,234,232,228,,229', ',227,231,236,237,238,233,235,243,244,239,240,,220,221,,245,241,242,', ',,,,,,,,,,,,,224,,230,,226,225,222,223,234,232,228,,229,,227,231,236', '237,238,233,235,243,244,239,240,,220,221,,245,241,242,,,,,,,,,,,,,,', '224,,230,,226,225,222,223,234,232,228,,229,,227,231,236,237,238,233', '235,243,244,239,240,,220,221,208,245,241,242,,,,,,,,,,,,,,,224,,230', ',226,225,222,223,234,232,228,,229,,227,231,236,237,238,233,235,243,244', '239,240,,220,221,,245,241,242,,,,,,,,,,,,,,,224,,230,,226,225,222,223', '234,232,228,,229,,227,231,236,237,238,233,235,243,244,239,240,,220,221', ',245,241,242,,,,,,,,,,,,,,,224,,230,,226,225,222,223,234,232,228,,229', ',227,231,236,237,238,233,235,243,244,239,240,,220,221,,245,241,242,', ',,,,,,,,,,,,,224,,230,,226,225,222,223,234,232,228,,229,,227,231,236', '237,238,233,235,243,244,239,240,,220,221,,245,241,242,,,,,,,,,,,,,,', '224,,230,,226,225,222,223,234,232,228,,229,,227,231,236,237,238,233', '235,243,244,239,240,,220,221,,245,241,242,,,,,,,,,,,,,,,224,,230,,226', '225,222,223,234,232,228,,229,,227,231,236,237,238,233,235,243,244,239', '240,,220,221,,245,241,242,,,,,,,,,,,,,,,224,,230,,226,225,222,223,234', '232,228,,229,,227,231,236,237,238,233,235,243,244,239,240,,220,221,', '245,241,242,,,,,,,,,,,,,,,224,,230,,226,225,222,223,234,232,228,,229', ',227,231,236,237,238,233,235,243,244,239,240,,220,221,,245,241,242,', ',,,,,,,,,,,,,224,,230,,226,225,222,223,234,232,228,,229,,,,,,,,,,,,', ',,,,245' ] racc_action_table = arr = ::Array.new(23312, 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 = [ '87,799,799,799,799,799,799,87,87,87,799,799,87,87,87,799,87,799,799', '799,799,799,799,799,87,55,87,87,87,799,799,799,799,799,799,799,87,87', '799,87,87,87,87,87,799,799,799,799,799,799,799,799,799,799,799,799,339', '799,799,799,837,799,799,799,799,799,87,87,87,87,87,87,87,87,87,87,87', '87,87,87,266,619,87,87,87,799,87,87,799,326,87,799,799,87,87,799,87', '799,87,361,87,799,87,87,87,87,87,87,87,799,87,55,87,689,799,799,799', '799,17,799,799,409,409,619,799,799,87,87,87,87,84,87,799,87,799,87,87', '84,84,84,736,595,84,84,84,533,84,330,840,464,930,558,558,465,84,17,84', '84,84,643,643,339,361,293,293,688,84,84,532,84,84,84,84,84,837,320,948', '929,765,837,800,339,504,464,686,893,339,465,335,874,736,595,335,213', '326,691,84,84,84,84,84,84,84,84,84,84,84,84,84,84,376,409,84,84,84,540', '84,84,689,861,84,928,632,84,84,329,84,930,84,866,84,866,84,84,84,84', '84,84,84,399,84,558,84,213,319,533,399,399,399,643,533,377,399,399,929', '399,84,84,84,84,691,84,840,84,930,84,84,840,532,930,688,690,801,532', '875,399,399,744,399,399,399,399,399,927,383,800,385,504,632,320,948', '929,765,758,320,948,929,765,686,893,691,686,389,686,893,399,399,399', '399,399,399,399,399,399,399,399,399,399,399,415,540,399,399,399,632', '399,744,632,211,399,329,569,399,861,632,928,690,399,861,399,928,399', '399,399,399,399,399,399,397,399,360,399,552,552,596,397,397,397,319', '758,392,397,397,319,397,399,399,191,399,415,399,290,801,397,399,399', '690,801,211,26,309,693,398,309,397,397,391,397,397,397,397,397,569,569', '445,758,652,927,758,652,362,569,927,392,596,758,635,359,938,938,392', '360,360,360,397,397,397,397,397,397,397,397,397,397,397,397,397,397', '445,391,397,397,397,693,397,290,391,98,397,411,693,397,552,26,358,693', '397,552,397,693,397,397,397,397,397,397,397,290,397,397,397,362,362', '362,616,26,357,693,359,359,359,635,635,598,397,397,876,397,877,397,598', '598,598,397,397,598,598,598,297,598,672,693,672,672,672,672,672,111', '616,598,598,598,111,111,516,358,358,358,635,598,598,635,598,598,598', '598,598,879,635,857,633,857,857,857,857,857,346,357,357,357,348,297', '313,346,423,313,424,348,297,598,598,598,598,598,598,598,598,598,598', '598,598,598,598,516,627,598,598,598,425,598,598,627,426,598,882,349', '598,598,672,598,14,598,349,598,950,598,598,598,598,598,598,598,460,598', '346,598,633,603,348,603,603,603,603,603,318,318,889,857,337,598,598', '598,598,597,598,337,598,582,598,598,597,597,597,14,337,597,597,597,71', '597,14,704,633,349,603,633,704,71,597,597,597,597,633,603,603,603,603', '71,466,597,597,35,597,597,597,597,597,677,677,657,582,657,657,657,351', '657,337,582,350,343,468,351,469,3,472,350,343,603,3,597,597,597,597', '597,597,597,597,597,597,597,597,597,597,551,35,597,597,597,551,597,597', '35,960,597,474,25,597,597,479,597,483,597,25,597,897,597,597,597,597', '597,597,597,351,597,597,597,350,343,698,838,345,284,310,698,898,310', '838,345,284,597,597,597,597,50,597,838,597,284,597,597,50,50,50,323', '899,50,50,50,323,50,492,441,900,25,495,694,353,307,307,50,50,50,694', '353,37,37,901,694,506,50,50,694,50,50,50,50,50,838,345,284,15,15,507', '441,344,508,347,441,441,441,441,344,845,347,845,845,845,509,845,50,50', '50,50,50,50,50,50,50,50,50,50,50,50,694,353,50,50,50,422,517,50,524', '527,50,529,41,50,50,534,50,535,50,903,50,566,50,50,50,50,50,50,50,344', '50,347,50,572,1,579,285,422,287,583,586,422,422,285,924,287,50,50,50', '50,28,50,285,50,287,50,590,28,28,28,926,36,28,28,28,932,28,932,932,932', '932,932,881,440,599,601,28,28,34,881,606,608,620,333,622,629,28,28,881', '28,28,28,28,28,285,631,287,4,4,4,4,4,932,634,637,440,638,641,642,440', '440,440,440,932,932,644,28,28,28,28,28,28,28,28,28,28,28,28,28,28,881', '421,28,28,28,333,20,28,334,28,28,647,333,28,28,648,28,333,28,656,28', '333,28,28,28,28,28,28,28,665,28,671,28,421,300,673,674,421,421,333,679', '300,684,687,696,457,28,28,701,28,300,28,457,457,457,28,719,457,457,457', '334,457,636,333,937,939,940,334,941,636,738,457,334,739,636,740,334', '742,636,743,746,457,457,13,457,457,457,457,457,543,13,942,300,943,334', '42,543,327,754,13,478,210,42,755,327,543,756,478,210,757,944,42,12,327', '11,771,478,210,334,772,636,776,457,777,393,780,781,783,786,457,788,393', '393,393,457,457,393,393,393,791,393,13,364,364,364,364,364,543,945,393', '393,393,794,42,10,327,9,457,478,210,393,393,946,393,393,393,393,393', '562,562,8,457,562,562,562,212,457,214,215,787,457,787,787,787,787,787', '803,219,807,808,393,393,393,393,393,393,393,393,393,393,393,393,393', '393,811,812,393,393,393,824,949,393,827,393,393,828,787,393,393,829', '393,831,393,839,393,787,393,393,393,393,393,393,393,842,393,393,393', '843,251,252,255,669,328,669,669,669,669,669,859,402,393,393,277,393', '279,393,402,402,402,393,280,402,402,402,872,402,872,872,872,872,872', '281,286,288,402,402,402,402,669,109,109,109,109,109,289,402,402,669', '402,402,402,402,402,902,292,902,902,902,902,902,294,872,872,858,863', '858,858,858,858,858,872,872,872,872,298,402,402,402,402,402,402,402', '402,402,402,402,402,402,402,299,902,402,402,402,302,864,402,305,306', '402,858,311,402,402,312,402,314,402,869,402,324,402,402,402,402,402', '402,402,325,402,402,402,817,,817,817,817,817,817,,,,,,,402,402,402,402', '454,402,,402,,402,,454,454,454,,,454,454,454,,454,,,819,817,819,819', '819,819,819,454,,,817,817,817,817,,,,454,454,,454,454,454,454,454,,', ',,822,,822,822,822,822,822,,819,519,,519,519,519,519,519,,819,819,819', '819,,,,,,,,,454,,403,,,,,454,822,403,403,403,454,454,403,403,403,519', '403,822,822,,,,,,519,403,403,403,403,,,,,454,,,403,403,,403,403,403', '403,403,,,,454,,,,,454,,,936,454,936,936,936,936,936,,,,,403,403,403', '403,403,403,403,403,403,403,403,403,403,403,,,403,403,403,,,403,,,403', ',936,403,403,,403,,403,,403,,403,403,403,403,403,403,403,,403,403,403', '659,,659,659,659,659,659,,,,,,,403,403,403,403,27,403,,403,,403,,27', '27,27,,,27,27,27,,27,431,,,659,,,,,27,27,27,,659,659,659,659,431,431', ',27,27,,27,27,27,27,27,,,,,,431,,431,,431,431,431,431,,,431,,431,,,', ',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,,661,,661,661,661', '661,661,,,,,,27,27,,27,,27,,,,27,0,0,0,0,0,0,,,,0,0,,,,0,661,0,0,0,0', '0,0,0,,661,661,661,661,0,0,0,0,0,0,0,,904,0,904,904,904,904,904,0,0', '0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,789,,789,789,789,789,789,849,904', '849,849,849,849,849,,,,,,0,,,0,,,0,0,,,0,,0,,,,0,851,789,851,851,851', '851,851,0,849,,,,0,0,0,0,,0,0,849,849,,0,0,283,283,283,283,283,283,0', ',0,283,283,,,851,283,,283,283,283,283,283,283,283,,851,851,,,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,,,,,,,,853,,853,853,853,853', '853,,,,,,283,,,283,,,283,283,,,283,,283,,,,283,664,,664,664,664,664', '664,283,853,,,,283,283,283,283,,283,283,853,853,,283,283,712,712,712', '712,712,712,283,,283,712,712,,,664,712,,712,712,712,712,712,712,712', ',664,664,,,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,,,,,,', ',955,,955,955,955,955,955,,,,,,712,,,712,,,712,712,,,712,,712,,,,712', '917,,917,917,917,917,917,712,955,,,,712,712,712,712,,712,712,955,955', ',712,712,605,605,605,605,605,605,712,,712,605,605,,,917,605,,605,605', '605,605,605,605,605,,917,917,,,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,428,,,,,,,919,,919,919,919,919,919,,,428,428,,605,,', '605,,,605,605,,,605,,605,428,,428,605,428,428,428,428,,,,605,919,,,', '605,605,605,605,,605,605,919,919,,605,605,553,553,553,553,553,553,605', ',605,553,553,,,,553,,553,553,553,553,553,553,553,,,,,,553,553,553,553', '553,553,553,,,553,,,,,,553,553,553,553,553,553,553,553,553,553,553,553', ',553,553,553,,553,553,553,553,553,419,419,419,419,419,419,419,419,419', '419,419,,419,419,,,419,419,,553,,,553,,,553,553,,,553,,553,419,,419', '553,419,419,419,419,419,419,419,553,419,,,,553,553,553,553,,553,553', ',,,553,553,796,796,796,796,796,796,553,,553,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,442,442,442,442,442,442,442,,,442,442,,,,,,442,442,,796,,,796', ',,796,796,,,796,,796,442,,442,796,442,442,442,442,442,442,442,796,442', ',,,796,796,796,796,,796,796,,,,796,796,218,218,218,218,218,218,796,', '796,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,430,430,430,430,430,430,430,,,430', '430,,,,,,430,430,,218,,,218,,,218,218,,,218,,218,430,,430,218,430,430', '430,430,430,430,430,218,430,,,,218,218,218,218,,218,218,,,,218,218,795', '795,795,795,795,795,218,,218,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,439,439', '439,439,439,439,439,,,439,439,,,,,,439,439,,795,,,795,,,795,795,,,795', ',795,439,,439,795,439,439,439,439,439,439,439,795,439,,,,795,795,795', '795,,795,795,,,,795,795,770,770,770,770,770,770,795,,795,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,420,420,420,420,420,420,420,420,420,420,420,,420', '420,,,420,420,,770,,,770,,,770,770,,,770,,770,420,,420,770,420,420,420', '420,420,420,420,770,420,,,,770,770,770,770,,770,770,,,,770,770,531,531', '531,531,531,531,770,,770,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,438,438,438', '438,438,438,438,,,438,438,,,,,,438,438,,531,,,531,,,531,531,,,531,,531', '438,,438,531,438,438,438,438,438,438,438,531,438,,,,531,531,531,531', ',531,531,,,,531,531,528,528,528,528,528,528,531,,531,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,528,528,,528,528,528,,528', '528,528,528,528,435,435,435,435,435,435,435,,,435,435,,,,,,435,435,', '528,,,528,,,528,528,,,528,,528,435,,435,528,435,435,435,435,435,435', '435,528,435,,,,528,528,528,528,,528,528,,,,528,528,51,51,51,51,51,51', '528,,528,51,51,,,,51,,51,51,51,51,51,51,51,,,,,,51,51,51,51,51,51,51', ',,51,,,,,,51,51,51,51,51,51,51,51,51,51,51,51,,51,51,51,,51,51,51,51', '51,433,,,,,,,,,,,,,,,,433,433,,51,,,51,,,51,51,,,51,,51,433,,433,51', '433,433,433,433,,,433,51,433,,,,51,51,51,51,,51,51,,,,51,51,769,769', '769,769,769,769,51,,51,769,769,,,,769,,769,769,769,769,769,769,769,', ',,,,769,769,769,769,769,769,769,,,769,,,,,,769,769,769,769,769,769,769', '769,769,769,769,769,,769,769,769,,769,769,769,769,769,432,,,,,,,,,,', ',,,,,432,432,,769,,,769,,,769,769,,,769,,769,432,,432,769,432,432,432', '432,,,432,769,432,,,,769,769,769,769,,769,769,,,,769,769,762,762,762', '762,762,762,769,,769,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,434,,,,,,,,,,', ',,,,,434,434,,762,,,762,,,762,762,,,762,,762,434,,434,762,434,434,434', '434,,,434,762,434,,,,762,762,762,762,,762,762,,,,762,762,750,750,750', '750,750,750,762,,762,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,437,437,437,437', '437,437,437,,,437,437,,,,,,437,437,,750,,,750,,,750,750,,,750,,750,437', ',437,750,437,437,437,437,437,437,437,750,437,,,,750,750,750,750,,750', '750,,,,750,750,278,278,278,278,278,278,750,,750,278,278,,,,278,,278', '278,278,278,278,278,278,,,,,,278,278,278,278,278,278,278,,,278,,,,,', '278,278,278,278,278,278,278,278,278,278,278,278,,278,278,278,,278,278', '278,278,278,436,436,436,436,436,436,436,,,436,436,,,,,,436,436,,278', ',,278,,,278,278,,,278,,278,436,,436,278,436,436,436,436,436,436,436', '278,436,,,,278,278,278,278,,278,278,,,,278,278,702,702,702,702,702,702', '278,,278,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,443,443,443,443,443,443,443,443', ',443,443,,,,,,443,443,,702,,,702,,,702,702,,,702,,702,443,,443,702,443', '443,443,443,443,443,443,702,443,,,,702,702,702,702,,702,702,,,,702,702', '911,911,911,911,911,911,702,,702,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,427', ',,,,,,,,,,,,,,,427,427,,911,,,911,,,911,911,,,911,,911,427,,427,911', '427,427,427,427,,,,911,,,,,911,911,911,911,,911,911,,,,911,911,697,697', '697,697,697,697,911,,911,697,697,,,,697,,697,697,697,697,697,697,697', ',,,,,697,697,697,697,697,697,697,,,697,,,,,,697,697,697,697,697,697', '697,697,697,697,697,697,,697,697,697,,697,697,697,697,697,429,,,,,,', ',,,,,,,,,429,429,,697,,,697,,,697,697,,,697,,697,429,,,697,429,429,429', '429,,,,697,,,,,697,697,697,697,,697,697,,,,697,697,646,646,646,646,646', '646,697,,697,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,905,905,905,905,905,905,646,,646,905,905,,,,905,,905,905', '905,905,905,905,905,,,,,,905,905,905,905,905,905,905,,,905,,,,,,905', '905,905,905,905,905,905,905,905,905,905,905,,905,905,905,,905,905,905', '905,905,,,,,,,,,,,,,,,,,,,,905,,,905,,,905,905,,,905,,905,,,,905,,,', ',,,,905,,,,,905,905,905,905,,905,905,,,,905,905,913,913,913,913,913', '913,905,,905,913,913,,,,913,,913,913,913,913,913,913,913,,,,,,913,913', '913,913,913,913,913,,,913,,,,,,913,913,913,913,913,913,913,913,913,913', '913,913,,913,913,913,,913,913,913,913,913,,,,,,,,,,,,,,,,,,,,913,,,913', ',,913,913,,,913,,913,,,,913,,,,,,,,913,,,,,913,913,913,913,,913,913', ',,,913,913,836,836,836,836,836,836,913,,913,836,836,,,,836,,836,836', '836,836,836,836,836,,,,,,836,836,836,836,836,836,836,,,836,,,,,,836', '836,836,836,836,836,836,836,836,836,836,836,,836,836,836,,836,836,836', '836,836,,,,,,,,,,,,,,,,,,,,836,,,836,,,836,836,,,836,,836,,,,836,,,', ',,,,836,,,,,836,836,836,836,,836,836,,,,836,836,625,625,625,625,625', '625,836,,836,625,625,,,,625,,625,625,625,625,625,625,625,,,,,,625,625', '625,625,625,625,625,,,625,,,,,,625,625,625,625,625,625,625,625,625,625', '625,625,,625,625,625,,625,625,625,625,625,,,,,,,,,,,,,,,,,,,,625,,,625', ',,625,625,,,625,,625,,,,625,,,,,,,,625,,,,,625,625,625,625,,625,625', ',,,625,625,624,624,624,624,624,624,625,,625,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,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,193,193,193,193,193', '193,624,,624,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', ',,,193,193,194,194,194,194,194,194,193,,193,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,194,,194,194,,,,194,194,30,30,30,30,30,30,194', ',194,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,805,805,805,805,805,805,30,,30,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,,805,,', ',805,,,,,,,,805,,,,,805,805,805,805,,805,805,,,,805,805,,198,198,198', ',198,805,,805,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,,5,5,5,5,5,198,,198,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5', '5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,', ',,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,5,,,,,5,5,5,5,,5,5,,,,5,5,,18', '18,18,,18,5,,5,18,18,,,,18,,18,18,18,18,18,18,18,,,,,,18,18,18,18,18', '18,18,,,18,,,,,,,18,,,18,18,18,18,18,18,18,18,,18,18,18,,18,18,18,18', '18,,,,,,,,,,,,,,,,,,,,18,,,18,,,18,18,,,18,,,,,,18,,,,,,,,18,,,,,18', '18,18,18,,18,18,,,,18,18,,22,22,22,,22,18,,18,22,22,,,,22,,22,22,22', '22,22,22,22,,,,,,22,22,22,22,22,22,22,,,22,,,,,,,22,,,22,22,22,22,22', '22,22,22,22,22,22,22,,22,22,22,22,22,,,,,,,,,,,,,,,,,,,,22,,,22,,,22', '22,,,22,,22,,22,,22,,,,,,,,22,,,,,22,22,22,22,,22,22,,,,22,22,,23,23', '23,,23,22,,22,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,,24,24,24,,24,23,,23,24,24,,,,24,,24', '24,24,24,24,24,24,,,,,,24,24,24,24,24,24,24,,,24,,,,,,,24,,,24,24,24', '24,24,24,24,24,24,24,24,24,,24,24,24,24,24,,,,,,,,,,,,,,,,,,,,24,,,24', ',,24,24,,,24,,24,,24,,24,,,,,,,,24,,,,,24,24,24,24,,24,24,,,,24,24,', '31,31,31,,31,24,,24,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', ',846,31,846,846,846,846,846,,,,,,,,,,,,,,,31,,,31,,,31,31,,,31,,31,', ',,846,,,,,,,,,846,846,846,846,31,31,31,31,,31,31,,,,31,31,,32,32,32', ',32,31,,31,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32,32,32,32,32', '32,,,32,,,,,,380,32,,,32,32,32,32,32,32,32,32,,32,32,32,,32,32,,,32', ',380,380,380,380,380,380,380,380,380,380,380,,380,380,,,380,380,32,', ',32,,,32,32,,,32,,,,380,,380,,380,380,380,380,380,380,380,,380,,,32', '32,32,32,,32,32,,,,32,32,,,380,32,380,,32,,32,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,,39,39,39,,39,38,,38,39,39,,,,39,,39,39,39,39,39,39,39,,,,,,39', '39,39,39,39,39,39,,,39,,,,,,,39,,,39,39,39,39,39,39,39,39,,39,39,39', ',39,39,39,39,39,,,,,,,,,,,,,,,,,,,,39,,,39,,,39,39,,,39,,,,,,39,,,,', ',,,39,,,,,39,39,39,39,,39,39,,,,39,39,,40,40,40,,40,39,,39,40,40,,,', '40,,40,40,40,40,40,40,40,,,,,,40,40,40,40,40,40,40,,,40,,,,,,,40,,,40', '40,40,40,40,40,40,40,,40,40,40,,40,40,40,40,40,,,,,,,,,,,,,,,,,,,,40', ',,40,,,40,40,,,40,,,,,,40,,,,,,,,40,,,,,40,40,40,40,,40,40,,,,40,40', ',52,52,52,,52,40,,40,52,52,,,,52,,52,52,52,52,52,52,52,,,,,,52,52,52', '52,52,52,52,,,52,,,,,,,52,,,52,52,52,52,52,52,52,52,,52,52,52,,52,52', '52,52,52,,,,,,,,,,,,,,,,,,,,52,,,52,,,52,52,,,52,,,,,,52,,,,,,,,52,', ',,,52,52,52,52,,52,52,,,,52,52,,53,53,53,,53,52,,52,53,53,,,,53,,53', '53,53,53,53,53,53,,,,,,53,53,53,53,53,53,53,,,53,,,,,,,53,,,53,53,53', '53,53,53,53,53,53,53,53,53,,53,53,53,53,53,,,,,,,,,,,,,,,,,,,,53,,,53', ',,53,53,,,53,,53,,,,53,,,,,,,,53,,,,,53,53,53,53,,53,53,,,,53,53,,54', '54,54,,54,53,,53,54,54,,,,54,,54,54,54,54,54,54,54,,,,,,54,54,54,54', '54,54,54,,,54,,,,,,,54,,,54,54,54,54,54,54,54,54,54,54,54,54,,54,54', '54,54,54,,,,,,,,,,,,,,,,,,,,54,,,54,,,54,54,,,54,,,,,,54,,,,,,,,54,', ',,,54,54,54,54,,54,54,,,,54,54,,57,57,57,,57,54,,54,57,57,,,,57,,57', '57,57,57,57,57,57,,,,,,57,57,57,57,57,57,57,,,57,,,,,,,57,,,57,57,57', '57,57,57,57,57,,57,57,57,,57,57,57,57,57,,,,,,,,,,,,,,,,,,,,57,,,57', ',,57,57,,,57,,,,,,57,,,,,,,,57,,,,,57,57,57,57,,57,57,,,,57,57,,58,58', '58,,58,57,,57,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,,61,61,61,,61,58,,58,61,61,,,,61,,61,61,61', '61,61,61,61,,,,,,61,61,61,61,61,61,61,,,61,,,,,600,,61,,,61,61,61,61', '61,61,61,61,,61,61,61,,61,61,61,61,61,600,600,600,600,600,600,600,600', '600,600,600,,600,600,,,600,600,,61,,,61,,,61,61,,,61,,,600,,600,61,600', '600,600,600,600,600,600,61,600,,,,61,61,61,61,,61,61,,,,61,61,61,600', ',,,61,61,,61,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,,554,62,554,554,554,554,554,,,,,,,,,,,,,,,62,,,62,,,62,62', ',,62,,62,,,,554,554,,,,,,,,554,554,554,554,62,62,62,62,,62,62,,,,62', '62,,63,63,63,,63,62,,62,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,,914,63,914,914,914,914,914,,,,,,,,,,,,63,,,63,,,63,,,63,63,,,63', ',,,,,914,,,,,,,,,914,914,914,914,63,63,63,63,,63,63,,,,63,63,,64,64', '64,,64,63,,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,,317', '64,317,317,317,317,317,,,,,,,,,,,,,,,64,,,64,,,64,64,,,64,,,,,,317,317', ',,,,,,,317,317,317,317,64,64,64,64,,64,64,,,,64,64,,100,100,100,100', '100,64,,64,100,100,,,,100,,100,100,100,100,100,100,100,,,,,,100,100', '100,100,100,100,100,,,100,,,,,388,100,100,100,100,100,100,100,100,100', '100,100,100,,100,100,100,,100,100,100,100,100,388,388,388,388,388,388', '388,388,388,388,388,,388,388,,,388,388,,100,,,100,,,100,100,,,100,,100', '388,,388,100,388,388,388,388,388,388,388,100,388,,,,100,100,100,100', ',100,100,,,,100,100,,388,,,,100,100,,100,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,104,,105,105,105,,105', '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,,106', '106,106,,106,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,,107,107,107,,107,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,,108,108,108,108,108,107,,107,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,,195,195,195', ',195,108,,108,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,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,,196,196,196,,196,195,,195,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,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,,197,197,197,,197,196,,196,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,,203,203,203,,203,197,,197,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,', '203,203,203,203,203,,,,,,,,,,,,,,,,,,,,203,,,203,,,203,203,,,203,,,', ',,203,,,,,,,,203,,,,,203,203,203,203,,203,203,,,,203,203,,204,204,204', ',204,203,,203,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,,204,204,204,204,204,,,,,,,,,,,,,,,,,,,,204,,,204,,,204', '204,,,204,,,,,,204,,,,,,,,204,,,,,204,204,204,204,,204,204,,,,204,204', ',205,205,205,,205,204,,204,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,,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,,207,207,207,,207,206,,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,207,217,217,217,,217,207,,207', '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,,220,220,220', ',220,217,,217,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,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,,222,222,222,,222,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,,223,223,223,,223,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,,224,224,224,,224,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,,225,225,225', ',225,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', ',226,226,226,,226,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,,227,227,227,,227,226,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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', ',254,254,254,,254,245,,245,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,,256,256,256,,256,254,,254,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,,261,261,261,,261,256,,256,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,,267,267,267,,267,261,,261,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,,268,268', '268,,268,267,,267,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,,276,276,276,,276,268,,268,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,282,282,282,,282,276,,276,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,19,19,19,19,19,19,19,19,19,19,19,,19,19,,,19,19,,282,', ',282,,,282,282,,,282,,,19,,19,,19,19,19,19,19,19,19,,19,,,,282,282,282', '282,,282,282,,,,282,282,,19,,282,,,282,,282,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,,703,295,703,703,703,703,703,,,,,,,,,,,,,,,295,,,295,,,295,295', ',,295,,,,,,703,,,,,,,,,703,703,703,703,295,295,295,295,,295,295,,,,295', '295,,304,304,304,,304,295,,295,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,304', ',304,304,,,,304,304,,321,321,321,,321,304,,304,321,321,,,,321,,321,321', '321,321,321,321,321,,,,,,321,321,321,321,321,321,321,,,321,,,,,,,321', ',,321,321,321,321,321,321,321,321,,321,321,321,,321,321,321,321,321', ',,,,,,,,,,,,,,,,,,,321,,,321,,,321,321,,,321,,,,,,321,,,,,,,,321,,,', ',321,321,321,321,,321,321,,,,321,321,,322,322,322,,322,321,,321,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,,,,322,322,,340,340,340', ',340,322,,322,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', ',355,355,355,,355,340,,340,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,,382,382,382,,382,355,,355,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,,414,414,414,,414,382,,382,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,,416,416,416,,416', '414,,414,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,,417', '417,417,,417,416,,416,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,,418,418,418,,418,417,,417,418,418,,,,418,,418,418,418,418', '418,418,418,,,,,,418,418,418,418,418,418,418,,,418,,,,,,,418,,,418,418', '418,418,418,418,418,418,,418,418,418,,418,418,418,418,418,,,,,,,,,,', ',,,,,,,,,418,,,418,,,418,418,,,418,,,,,,418,,,,,,,,418,,,,,418,418,418', '418,,418,418,,,,418,418,,447,447,447,,447,418,,418,447,447,,,,447,,447', '447,447,447,447,447,447,,,,,,447,447,447,447,447,447,447,,,447,,,,,', ',447,,,447,447,447,447,447,447,447,447,447,447,447,447,,447,447,447', '447,447,,,,,,,,,,,,,,,,,,,,447,,,447,,,447,447,,,447,,447,,447,,447', ',,,,,,,447,,,,,447,447,447,447,,447,447,,,,447,447,,449,449,449,,449', '447,,447,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', '449,449,449,,449,449,449,449,449,,,,,,,,,,,,,,,,,,,,449,,,449,,,449', '449,,,449,,,,449,,449,,,,,,,,449,,,,,449,449,449,449,,449,449,,,,449', '449,,451,451,451,,451,449,,449,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,451,451,,451,451,451,451,451,,,,,,,,,,,,,,,,,,', ',451,,,451,,,451,451,,,451,,,,,,451,,,,,,,,451,,,,,451,451,451,451,', '451,451,,,,451,451,,463,463,463,,463,451,,451,463,463,,,,463,,463,463', '463,463,463,463,463,,,,,,463,463,463,463,463,463,463,,,463,,,,,,,463', ',,463,463,463,463,463,463,463,463,463,463,463,463,,463,463,463,463,463', ',,,,,,,,,,,,,,,,,,,463,,,463,,,463,463,,,463,,,,463,,463,,,,,,,,463', ',,,,463,463,463,463,,463,463,,,,463,463,,473,473,473,,473,463,,463,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,473,,473,473,473,', '473,473,,505,473,505,505,505,505,505,,,,,,,,,,,,,,,473,,,473,,,473,473', ',,473,,,,,,505,,,,,,,,,505,505,505,505,473,473,473,473,,473,473,,,,473', '473,,475,475,475,,475,473,,473,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,,482,482,482,,482,475,,475,482,482,,,,482', ',482,482,482,482,482,482,482,,,,,,482,482,482,482,482,482,482,,,482', ',,,,,,482,,,482,482,482,482,482,482,482,482,,482,482,482,,482,482,,', '482,,,,,,,,,,,,,,,,,,,,482,,,482,,,482,482,,,482,,,,,,,,,,,,,,,,,,,482', '482,482,482,,482,482,,,,482,482,,485,485,485,,485,482,,482,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,,486,486,486,,486', '485,,485,486,486,,,,486,,486,486,486,486,486,486,486,,,,,,486,486,486', '486,486,486,486,,,486,,,,,,,486,,,486,486,486,486,486,486,486,486,,486', '486,486,,486,486,486,486,486,,,,,,,,,,,,,,,,,,,,486,,,486,,,486,486', ',,486,,,,,,486,,,,,,,,486,,,,,486,486,486,486,,486,486,,,,486,486,,487', '487,487,,487,486,,486,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,,491,491,491,,491,487,,487,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,491,491', '491,,491,491,,,,491,491,,493,493,493,,493,491,,491,493,493,,,,493,,493', '493,493,493,493,493,493,,,,,,493,493,493,493,493,493,493,,,493,,,,,', ',493,,,493,493,493,493,493,493,493,493,,493,493,493,,493,493,493,493', '493,,,,,,,,,,,,,,,,,,,,493,,,493,,,493,493,,,493,,493,,,,493,,,,,,,', '493,,,,,493,493,493,493,,493,493,,,,493,493,,497,497,497,,497,493,,493', '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,,500', '500,500,,500,497,,497,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,,536,536,536,,536,500,,500,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,,537,537,537,,537,536,,536,537,537,', ',,537,,537,537,537,537,537,537,537,,,,,,537,537,537,537,537,537,537', ',,537,,,,,,,537,,,537,537,537,537,537,537,537,537,537,537,537,537,,537', '537,537,537,537,,,,,,,,,,,,,,,,,,,,537,,,537,,,537,537,,,537,,537,,537', ',537,,,,,,,,537,,,,,537,537,537,537,,537,537,,,,537,537,,547,547,547', ',547,537,,537,547,547,,,,547,,547,547,547,547,547,547,547,,,,,,547,547', '547,547,547,547,547,,,547,,,,,,,547,,,547,547,547,547,547,547,547,547', '547,547,547,547,,547,547,547,547,547,,,,,,,,,,,,,,,,,,,,547,,,547,,', '547,547,,,547,,547,,547,,547,,,,,,,,547,,,,,547,547,547,547,,547,547', ',,,547,547,,550,550,550,,550,547,,547,550,550,,,,550,,550,550,550,550', '550,550,550,,,,,,550,550,550,550,550,550,550,,,550,,,,,,,550,,,550,550', '550,550,550,550,550,550,,550,550,550,,550,550,550,550,550,,,,,,,,,,', ',,,,,,,,,550,,,550,,,550,550,,,550,,,,,,550,,,,,,,,550,,,,,550,550,550', '550,,550,550,,,,550,550,,578,578,578,,578,550,,550,578,578,,,,578,,578', '578,578,578,578,578,578,,,,,,578,578,578,578,578,578,578,,,578,,,,,', ',578,,,578,578,578,578,578,578,578,578,,578,578,578,,578,578,578,578', '578,,,,,,,,,,,,,,,,,,,,578,,,578,,,578,578,,,578,,,,,,578,,,,,,,,578', ',,,,578,578,578,578,,578,578,,,,578,578,,580,580,580,,580,578,,578,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,,580,580,580,', '580,580,580,580,580,,,,,,,,,,,,,,,,,,,,580,,,580,,,580,580,,,580,,580', ',,,580,,,,,,,,580,,,,,580,580,580,580,,580,580,,,,580,580,,581,581,581', ',581,580,,580,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,581', ',581,581,581,,581,581,581,581,581,,,,,,,,,,,,,,,,,,,,581,,,581,,,581', '581,,,581,,,,,,581,,,,,,,,581,,,,,581,581,581,581,,581,581,,,,581,581', ',584,584,584,,584,581,,581,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,,585,585,585,,585,584,,584,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,,589,589,589,,589,585,,585,589,589,,,,589,,589', '589,589,589,589,589,589,,,,,,589,589,589,589,589,589,589,,,589,,,,,', ',589,,,589,589,589,589,589,589,589,589,,589,589,589,,589,589,589,589', '589,,,,,,,,,,,,,,,,,,,,589,,,589,,,589,589,,,589,,,,,,589,,,,,,,,589', ',,,,589,589,589,589,,589,589,,,,589,589,,592,592,592,,592,589,,589,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,,609,609,609', ',609,592,,592,609,609,,,,609,,609,609,609,609,609,609,609,,,,,,609,609', '609,609,609,609,609,,,609,,,,,,,609,,,609,609,609,609,609,609,609,609', ',609,609,609,,609,609,609,609,609,,,,,,,,,,,,,,,,,,,,609,,,609,,,609', '609,,,609,,,,,,609,,,,,,,,609,,,,,609,609,609,609,,609,609,,,,609,609', ',628,628,628,,628,609,,609,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', ',639,639,639,,639,628,,628,639,639,,,,639,,639,639,639,639,639,639,639', ',,,,,639,639,639,639,639,639,639,,,639,,,,,,,639,,,639,639,639,639,639', '639,639,639,,639,639,639,,639,639,,,639,,,,,,,,,,,,,,,,,,,,639,,,639', ',,639,639,,,639,,,,,,,,,,,,,,,,,,,639,639,639,639,,639,639,,,,639,639', ',666,666,666,,666,639,,639,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,,692,692,692,,692,666,,666,692,692,,,,692,,692,692,692,692', '692,692,692,,,,,,692,692,692,692,692,692,692,,,692,,,,,,,692,,,692,692', '692,692,692,692,692,692,,692,692,692,,692,692,692,692,692,,,,,,,,,,', ',,,,,,,,,692,,,692,,,692,692,,,692,,,,,,692,,,,,,,,692,,,,,692,692,692', '692,,692,692,,,,692,692,,720,720,720,,720,692,,692,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,,722,722,722,,722,720,,720,722', '722,,,,722,,722,722,722,722,722,722,722,,,,,,722,722,722,722,722,722', '722,,,722,,,,,,,722,,,722,722,722,722,722,722,722,722,,722,722,722,', '722,722,722,722,722,,,,,,,,,,,,,,,,,,,,722,,,722,,,722,722,,,722,,,', ',,722,,,,,,,,722,,,,,722,722,722,722,,722,722,,,,722,722,,733,733,733', ',733,722,,722,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', ',734,734,734,,734,733,,733,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,,735,735,735,,735,734,,734,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,,737,737,737,,737,735,,735,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,,748,748,748,,748,737,,737,748', '748,,,,748,,748,748,748,748,748,748,748,,,,,,748,748,748,748,748,748', '748,,,748,,,,,,,748,,,748,748,748,748,748,748,748,748,748,748,748,748', ',748,748,748,748,748,,,,,,,,,,,,,,,,,,,,748,,,748,,,748,748,,,748,,748', ',748,,748,,,,,,,,748,,,,,748,748,748,748,,748,748,,,,748,748,,751,751', '751,,751,748,,748,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,751', ',,,751,751,,766,766,766,,766,751,,751,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,,793,793,793,,793,766,,766,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,,798,798,798,,798,793,,793,798,798,,,,798', ',798,798,798,798,798,798,798,,,,,,798,798,798,798,798,798,798,,,798', ',,,,,,798,,,798,798,798,798,798,798,798,798,,798,798,798,,798,798,798', '798,798,,,,,,,,,,,,,,,,,,,,798,,,798,,,798,798,,,798,,798,,,,798,,,', ',,,,798,,,,,798,798,798,798,,798,798,,,,798,798,,815,815,815,,815,798', ',798,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,,825,825', '825,,825,815,,815,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,825,,,,825,825,,884,884', '884,,884,825,,825,884,884,,,,884,,884,884,884,884,884,884,884,,,,,,884', '884,884,884,884,884,884,,,884,,,,,,,884,,,884,884,884,884,884,884,884', '884,,884,884,884,,884,884,884,884,884,,,,,,,,,,,,,,,,,,,,884,,,884,', ',884,884,,,884,,884,,884,,884,,,,,,,,884,,,,,884,884,884,884,,884,884', ',,,884,884,,887,887,887,,887,884,,884,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,,890,890,890,,890,887,,887,890,890', ',,,890,,890,890,890,890,890,890,890,,,,,,890,890,890,890,890,890,890', ',,890,,,,,,,890,,,890,890,890,890,890,890,890,890,890,890,890,890,,890', '890,890,890,890,618,618,618,618,618,618,618,618,618,618,618,,618,618', ',,618,618,,890,,618,890,,,890,890,,,890,,890,618,890,618,890,618,618', '618,618,618,618,618,890,618,,,,890,890,890,890,,890,890,,,,890,890,', '618,,618,,,890,,890,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7', ',,,7,7,7,7,7,7,7,7,7,7,,,,,,7,7,7,7,7,7,7,7,7,,,7,,,,,,,,7,7,,7,7,7', '7,7,7,7,,,7,7,,,,7,7,7,7,,,,,,,,,,,,,,7,7,,7,7,7,7,7,7,7,7,7,7,7,,,7', '7,,,,,,,,,,,7,371,371,371,371,371,371,371,371,371,371,371,371,371,371', '371,371,371,371,371,371,371,371,371,371,,,,371,371,371,371,371,371,371', '371,371,371,,,,,,371,371,371,371,371,371,371,371,371,,,371,,,,,,,,371', '371,,371,371,371,371,371,371,371,,,371,371,,,,371,371,371,371,,,,,,', ',,,,,,,371,371,,371,371,371,371,371,371,371,371,371,371,371,,,371,371', ',,,,,,,,,,371,575,575,575,575,575,575,575,575,575,575,575,575,575,575', '575,575,575,575,575,575,575,575,575,575,,,,575,575,575,575,575,575,575', '575,575,575,,,,,,575,575,575,575,575,575,575,575,575,,,575,,,,,,,,575', '575,,575,575,575,575,575,575,575,,,575,575,,,,575,575,575,575,,,,,,', ',,,,,,,575,575,,575,575,575,575,575,575,575,575,575,575,575,,,575,575', ',,,,,,,,,,575,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,,,,6,6', '6,6,6,6,6,6,6,6,,,,,,6,6,6,6,6,6,6,6,6,6,,6,,,,,,,,6,6,,6,6,6,6,6,6', '6,,,6,6,,,,6,6,6,6,,,,,,,,,,,,,,6,6,,6,6,6,6,6,6,6,6,6,6,6,,,6,6,,,', ',,,,,,,6,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705', '705,705,705,705,705,705,705,705,705,,,,705,705,705,705,705,705,705,705', '705,705,,,,,,705,705,705,705,705,705,705,705,705,,,705,,,,,,,,705,705', ',705,705,705,705,705,705,705,,,705,705,,,,705,705,705,705,,,,,,,,,,', ',,,705,705,,705,705,705,705,705,705,705,705,705,705,705,,,705,65,65', '65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,,', ',65,65,65,65,65,65,65,65,65,65,,,,,,65,65,65,65,65,65,65,65,65,65,65', '65,,65,,,,,,65,65,,65,65,65,65,65,65,65,,,65,65,,,,65,65,65,65,,,,,', '65,,,,,,,,65,65,,65,65,65,65,65,65,65,65,65,65,65,199,199,65,,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', '891,891,199,,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,476,476,891,,476,,,,,,,,476,476,,476,476,476,476', '476,476,476,,,476,476,,,,476,476,476,476,,,,,,476,,,,,,,,476,476,,476', '476,476,476,476,476,476,476,476,476,476,477,477,476,,477,,,,,,,,477', '477,,477,477,477,477,477,477,477,,,477,477,,,,477,477,477,477,,,,,,477', ',,,,,,,477,477,,477,477,477,477,477,477,477,477,477,477,477,892,892', '477,,892,,,,,,,,892,892,,892,892,892,892,892,892,892,,,892,892,,,,892', '892,892,892,,,,,,892,,,,,,,,892,892,,892,892,892,892,892,892,892,892', '892,892,892,488,488,892,,488,,,,,,,,488,488,,488,488,488,488,488,488', '488,,,488,488,,,,488,488,488,488,,,,,,488,,,,,,,,488,488,,488,488,488', '488,488,488,488,488,488,488,488,489,489,488,,489,,,,,,,,489,489,,489', '489,489,489,489,489,489,,,489,489,,,,489,489,489,489,,,,,,489,,,,,,', ',489,489,,489,489,489,489,489,489,489,489,489,489,489,412,412,489,,412', ',,,,,,,412,412,,412,412,412,412,412,412,412,,,412,412,,,,412,412,412', '412,,,,,,412,,,,,,,,412,412,,412,412,412,412,412,412,412,412,412,412', '412,413,413,412,,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,538,538,413,,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,539,539,538,,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', '545,545,539,,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,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,264,264,546,,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,265,265', '264,,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,200,200,265,,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,922,922,200,,922,,,,,,,,922,922,,922,922', '922,922,922,922,922,,,922,922,,,,922,922,922,922,,,,,,922,,,,,,,,922', '922,,922,922,922,922,922,922,922,922,922,922,922,,,922,730,730,730,730', '730,730,730,730,730,730,730,,730,730,,,730,730,,,,,,,,,,,,,,,730,,730', ',730,730,730,730,730,730,730,,730,,718,718,718,718,718,718,718,718,718', '718,718,,718,718,,730,718,718,,,,,,,,,,,,,,,718,,718,,718,718,718,718', '718,718,718,,718,,640,640,640,640,640,640,640,640,640,640,640,,640,640', ',718,640,640,,,,,,,,,,,,,,,640,,640,,640,640,640,640,640,640,640,,640', ',444,444,444,444,444,444,444,444,444,444,444,,444,444,,640,444,444,', ',,,,,,,,,,,,,444,,444,,444,444,444,444,444,444,444,,444,,727,727,727', '727,727,727,727,727,727,727,727,,727,727,444,444,727,727,,,,,,,,,,,', ',,,727,,727,,727,727,727,727,727,727,727,,727,,814,814,814,814,814,814', '814,814,814,814,814,,814,814,,727,814,814,,,,,,,,,,,,,,,814,,814,,814', '814,814,814,814,814,814,,814,,725,725,725,725,725,725,725,725,725,725', '725,,725,725,,814,725,725,,,,,,,,,,,,,,,725,,725,,725,725,725,725,725', '725,725,,725,,490,490,490,490,490,490,490,490,490,490,490,,490,490,', '725,490,490,,,,,,,,,,,,,,,490,,490,,490,490,490,490,490,490,490,,490', ',721,721,721,721,721,721,721,721,721,721,721,,721,721,,490,721,721,', ',,,,,,,,,,,,,721,,721,,721,721,721,721,721,721,721,,721,,405,405,405', '405,405,405,405,405,405,405,405,,405,405,,721,405,405,,,,,,,,,,,,,,', '405,,405,,405,405,405,405,405,405,405,,405,,732,732,732,732,732,732', '732,732,732,732,732,,732,732,,405,732,732,,,,,,,,,,,,,,,732,,732,,732', '732,732,732,732,732,732,,732,,816,816,816,816,816,816,816,816,816,816', '816,,816,816,,732,816,816,,,,,,,,,,,,,,,816,,816,,816,816,816,816,816', '816,816,,816,,249,249,249,249,249,249,249,249,249,249,249,,249,249,', '816,249,249,,,,,,,,,,,,,,,249,,249,,249,249,249,249,249,249,249,,249', ',,,,,,,,,,,,,,,,249' ] racc_action_check = arr = ::Array.new(23312, 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 = [ 1666, 847, nil, 537, 871, 5416, 21328, 20956, 1002, 988, 961, 921, 969, 949, 484, 744, nil, 29, 5541, 13690, 922, nil, 5666, 5791, 5916, 618, 354, 1531, 863, nil, 5041, 6041, 6166, nil, 762, 555, 819, 703, 6299, 6424, 6549, 699, 961, nil, nil, nil, nil, nil, nil, nil, 733, 3041, 6674, 6799, 6924, 0, nil, 7049, 7174, nil, nil, 7299, 7432, 7557, 7682, 21564, nil, nil, nil, nil, nil, 503, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 130, nil, nil, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 437, nil, 7807, nil, nil, nil, 7940, 8065, 8190, 8315, 8440, 1183, nil, 444, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 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, 4791, 4916, 8565, 8690, 8815, 5291, 21624, 22524, nil, nil, 8940, 9065, 9190, 9315, 9440, nil, nil, 967, 242, 1063, 107, 984, 1035, nil, 9565, 2416, 1041, 9690, 9815, 9940, 10065, 10190, 10315, 10440, 10565, 10690, 10815, 10940, 11065, 11190, 11315, 11440, 11565, 11690, 11815, 11940, 12065, 12190, 12315, 12440, 12565, 12690, 12815, nil, nil, nil, 23184, nil, 1052, 1053, nil, 12940, 1096, 13065, nil, nil, nil, nil, 13190, nil, nil, 22404, 22464, -16, 13315, 13440, nil, nil, nil, nil, nil, nil, nil, 13565, 1059, 3541, 1071, 1113, 1085, 13690, 1791, 644, 772, 1160, 774, 1127, 1101, 346, nil, 1148, 102, 1114, 13823, nil, 402, 1191, 1206, 900, nil, 1211, nil, 13948, 1273, 1272, 721, nil, 254, 596, 1190, 1175, 406, 1202, nil, nil, 7695, 558, 232, 163, 14073, 14198, 617, 1277, 1170, 65, 963, 1130, 201, 123, nil, nil, 871, 926, 137, nil, 521, nil, 55, 14323, nil, nil, 582, 707, 643, 449, 709, 453, 488, 581, 577, nil, 679, nil, 14448, nil, 406, 384, 347, 290, 39, 340, nil, 1046, nil, nil, nil, nil, nil, nil, 21080, nil, nil, nil, nil, 98, 139, nil, nil, 6167, nil, 14573, 155, nil, 157, nil, nil, 7807, 176, nil, 300, 274, 1067, nil, nil, nil, 348, 293, 239, nil, nil, 1192, 1401, nil, 23046, nil, nil, nil, 85, nil, 349, 22044, 22104, 14698, 233, 14823, 14948, 15073, 2166, 2666, 878, 752, 468, 470, 492, 496, 3791, 2041, 3916, 2416, 1482, 3166, 3041, 3291, 2916, 3541, 3416, 2791, 2541, 820, 685, 2291, 3666, 22770, 320, nil, 15198, nil, 15323, nil, 15448, nil, nil, 1322, nil, nil, 988, nil, nil, 456, nil, nil, 15573, 75, 79, 512, nil, 534, 533, nil, nil, 535, 15698, 568, 15823, 21744, 21804, 966, 609, nil, nil, 15948, 571, nil, 16073, 16198, 16323, 21924, 21984, 22954, 16448, 736, 16573, nil, 628, nil, 16698, nil, nil, 16823, nil, nil, nil, 154, 15711, 637, 653, 656, 668, nil, nil, nil, nil, nil, nil, 417, 768, nil, 1328, nil, nil, nil, nil, 770, nil, nil, 771, 2916, 812, nil, 2791, 142, 119, 812, 821, 16948, 17073, 22164, 22224, 191, nil, nil, 955, nil, 22284, 22344, 17198, nil, nil, 17323, 557, 316, 2166, 7445, nil, nil, nil, 115, nil, nil, nil, 1058, nil, nil, nil, 716, nil, nil, 271, nil, nil, 716, nil, nil, 21204, nil, nil, 17448, 719, 17573, 17698, 521, 758, 17823, 17948, 757, nil, nil, 18073, 773, nil, 18198, nil, nil, 55, 268, 603, 473, 761, 7299, 760, nil, 536, nil, 2041, 764, nil, 807, 18323, nil, nil, nil, nil, nil, nil, 390, nil, 20823, -6, 766, nil, 771, nil, 4666, 4541, nil, 425, 18448, 769, nil, 782, 198, 496, 827, 382, 928, 828, 790, 18573, 22724, 854, 855, 123, 920, nil, 4041, 825, 871, nil, nil, nil, 270, nil, nil, nil, 831, 598, nil, 1463, nil, 1594, nil, nil, 1842, 921, 18698, nil, nil, 1133, nil, 845, 439, 891, 853, nil, nil, 634, nil, 969, nil, nil, nil, nil, 976, nil, 172, 860, 141, 89, 247, 171, 18823, 356, 678, nil, 861, 3916, 592, nil, nil, 982, 3666, 13836, 495, 21452, nil, nil, nil, nil, nil, nil, 1916, nil, nil, nil, nil, nil, 22678, 870, 18948, 23000, 19073, nil, nil, 22908, nil, 22816, nil, nil, 22632, nil, 23092, 19198, 19323, 19448, 54, 19573, 884, 887, 889, nil, 912, 891, 190, nil, 1014, nil, 19698, nil, 3416, 19823, nil, nil, 915, 934, 1040, 923, 269, nil, nil, nil, 3291, nil, nil, 166, 19948, nil, nil, 3166, 2666, 932, 933, nil, nil, nil, 935, 937, nil, nil, 939, 940, nil, 941, nil, nil, 945, 1071, 944, 1681, nil, 1073, nil, 20073, 1086, 2541, 2291, nil, 20198, 0, 156, 246, nil, 1120, nil, 5166, nil, 1122, 1006, nil, nil, 1035, 1019, nil, 22862, 20323, 23138, 1254, nil, 1290, nil, nil, 1319, nil, 1044, 20448, nil, 1026, 1046, 1033, nil, 1035, nil, nil, nil, nil, 4416, 48, 642, 1111, 136, nil, 1064, 1171, nil, 741, 6054, nil, nil, 1688, nil, 1717, nil, 1813, nil, nil, nil, 468, 1195, 1062, nil, 207, nil, 1238, 1269, nil, 215, nil, nil, 1282, nil, nil, 1156, nil, 60, 145, 347, 349, nil, 388, nil, 808, 509, nil, 20573, nil, nil, 20698, nil, 589, 20823, 21684, 21864, 173, nil, nil, nil, 575, 595, 615, 623, 637, 1185, 703, 1652, 4166, nil, nil, nil, nil, nil, 3791, nil, 4291, 7570, nil, nil, 1967, nil, 2063, nil, nil, 22584, nil, 728, nil, 747, 271, 209, 165, 138, nil, 827, nil, nil, nil, 1405, 878, 395, 999, 1000, 882, 905, 907, 924, 1002, 1016, nil, 164, 1024, 445, nil, nil, nil, nil, 1938, nil, nil, nil, nil, 563, nil ] racc_action_default = [ -4, -549, -1, -535, -5, -549, -549, -549, -549, -549, -549, -549, -549, -549, -273, -32, -33, -537, -549, -38, -40, -41, -283, -318, -319, -45, -248, -248, -248, -58, -4, -62, -70, -72, -549, -462, -549, -549, -549, -549, -549, -537, -225, -266, -267, -268, -269, -270, -271, -272, -523, -4, -549, -548, -515, -291, -373, -549, -549, -296, -299, -535, -549, -549, -549, -549, -320, -321, -411, -412, -413, -414, -415, -430, -418, -419, -432, -434, -423, -428, -444, -432, -446, -447, -521, -451, -452, -522, -454, -455, -456, -457, -458, -459, -460, -461, -464, -465, -549, -3, -536, -544, -545, -546, -549, -549, -549, -549, -549, -7, -8, -549, -99, -100, -101, -102, -103, -104, -105, -106, -107, -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, -174, -175, -176, -177, -178, -179, -180, -13, -108, -4, -4, -549, -549, -549, -234, -549, -549, -533, -534, -549, -549, -549, -549, -537, -538, -37, -549, -462, -549, -273, -549, -549, -217, -549, -4, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -381, -383, -42, -226, -236, -258, -258, -241, -549, -259, -549, -283, -318, -319, -517, -549, -43, -44, -549, -549, -50, -234, -549, -290, -386, -395, -397, -56, -392, -57, -537, -60, -4, -537, -549, -63, -66, -4, -78, -549, -549, -85, -286, -537, -549, -322, -393, -549, -68, -549, -74, -280, -448, -449, -549, -202, -203, -218, -549, -403, -549, -276, -227, -541, -541, -549, -549, -541, -549, -292, -293, -485, -39, -549, -549, -549, -549, -535, -549, -536, -462, -549, -549, -273, -549, -332, -333, -94, -95, -549, -97, -549, -273, -549, -549, -462, -311, -99, -100, -140, -141, -142, -158, -163, -170, -173, -313, -549, -513, -549, -416, -549, -549, -549, -549, -549, -549, 962, -6, -547, -14, -15, -16, -17, -18, -549, -10, -11, -12, -109, -549, -549, -21, -29, -181, -259, -549, -549, -22, -30, -31, -23, -183, -537, -235, -524, -525, -248, -390, -526, -527, -524, -248, -525, -389, -391, -526, -527, -28, -191, -34, -35, -36, -537, -289, -549, -549, -549, -234, -280, -549, -549, -549, -192, -193, -194, -195, -196, -197, -198, -199, -204, -205, -206, -207, -208, -209, -210, -211, -212, -213, -214, -215, -216, -219, -220, -221, -222, -537, -362, -237, -257, -238, -257, -255, -549, -260, -520, -248, -524, -525, -248, -48, -51, -537, -249, -250, -251, -362, -362, -537, -285, -537, -59, -278, -75, -64, -549, -537, -234, -549, -549, -84, -549, -448, -449, -549, -71, -76, -549, -549, -549, -549, -549, -223, -549, -548, -548, -275, -537, -228, -543, -542, -230, -543, -281, -282, -516, -549, -485, -367, -512, -512, -512, -484, -486, -487, -488, -489, -490, -491, -549, -494, -549, -496, -502, -504, -505, -507, -508, -509, -549, -4, -323, -324, -4, -549, -549, -549, -549, -549, -234, -549, -549, -280, -304, -94, -95, -96, -549, -549, -234, -307, -466, -549, -549, -549, -4, -485, -315, -531, -532, -537, -417, -431, -436, -549, -438, -420, -433, -549, -435, -422, -549, -425, -427, -549, -445, -9, -549, -19, -20, -549, -265, -549, -549, -394, -549, -549, -549, -52, -233, -387, -549, -54, -388, -549, -288, -539, -524, -525, -524, -525, -537, -181, -549, -363, -367, -365, -4, -258, -256, -261, -549, -518, -519, -46, -384, -47, -385, -362, -231, -38, -549, -258, -247, -537, -253, -4, -4, -284, -61, -549, -67, -73, -537, -524, -525, -232, -528, -83, -549, -69, -549, -190, -200, -201, -537, -548, -330, -4, -404, -548, -405, -406, -277, -541, -374, -377, -379, -367, -549, -376, -549, -477, -549, -480, -482, -549, -549, -549, -493, -334, -549, -336, -338, -345, -491, -537, -506, -510, -548, -325, -548, -297, -326, -327, -300, -549, -303, -549, -537, -524, -525, -528, -279, -549, -94, -95, -98, -537, -4, -549, -468, -309, -549, -4, -485, -549, -549, -514, -437, -440, -441, -442, -443, -4, -421, -424, -426, -429, -110, -182, -263, -549, -184, -549, -540, -25, -186, -26, -187, -53, -27, -188, -55, -189, -549, -549, -549, -394, -549, -512, -512, -512, -361, -549, -367, -491, -500, -549, -239, -257, -262, -4, -549, -244, -252, -537, -549, -549, -65, -394, -77, -287, -2, -4, -410, -331, -549, -549, -408, -229, -4, -4, -537, -368, -369, -371, -372, -512, -512, -497, -511, -512, -512, -503, -512, -492, -498, -537, -549, -343, -549, -495, -549, -328, -549, -549, -4, -4, -302, -549, -4, -394, -549, -394, -549, -467, -4, -312, -549, -537, -470, -316, -549, -264, -24, -185, -549, -224, -352, -354, -549, -357, -359, -549, -364, -549, -549, -382, -258, -549, -258, -243, -258, -254, -396, -398, -409, -4, -462, -549, -549, -273, -407, -549, -549, -375, -549, -549, -473, -475, -549, -478, -549, -481, -549, -483, -335, -337, -341, -549, -346, -294, -549, -295, -549, -549, -261, -548, -305, -308, -549, -314, -469, -485, -439, -512, -512, -512, -512, -501, -512, -366, -499, -549, -240, -257, -49, -242, -257, -245, -403, -234, -549, -549, -280, -378, -380, -370, -512, -512, -512, -512, -339, -549, -344, -549, -4, -298, -301, -399, -400, -401, -4, -310, -4, -549, -349, -351, -549, -355, -549, -358, -360, -549, -280, -258, -402, -537, -524, -525, -528, -279, -471, -549, -474, -476, -479, -549, -342, -548, -549, -549, -512, -512, -512, -512, -279, -528, -246, -394, -512, -340, -329, -306, -317, -347, -549, -350, -353, -356, -472, -512, -348 ] clist = [ '115,115,309,306,14,352,281,310,313,14,308,199,103,319,320,492,206,323', '389,250,250,250,535,264,510,291,291,277,270,274,582,610,702,739,14,287', '287,118,118,506,304,209,99,294,110,192,644,791,120,120,544,528,531,680', '683,14,291,291,291,115,366,367,368,369,878,782,329,338,338,459,103,674', '778,279,607,483,607,393,398,773,496,499,610,307,503,446,448,460,318', '318,621,775,318,266,273,275,379,386,605,353,324,248,262,263,14,560,555', '567,570,13,859,856,14,613,13,358,615,624,625,495,362,339,342,321,795', '322,796,210,692,911,697,210,210,210,805,318,318,318,318,13,285,285,454', '457,383,383,658,740,553,554,705,12,872,109,461,743,12,623,311,878,13', '210,575,616,772,1,210,210,371,504,210,327,337,337,653,317,332,247,769', '903,410,12,770,445,464,465,908,648,765,356,357,359,360,569,403,250,191', '14,14,361,707,394,12,777,712,780,776,100,412,13,316,761,510,210,210', '210,210,13,378,384,387,786,14,937,315,312,404,656,856,354,778,330,684', '794,599,406,407,408,409,548,736,754,622,742,,,,874,364,467,782,12,469', '629,,,370,950,,12,695,510,638,,250,250,778,896,,750,484,,758,250,,277', '291,532,533,775,277,,14,476,,668,287,14,479,291,393,398,270,472,274', '631,771,,488,287,,,13,13,210,210,210,210,951,,741,,210,210,210,210,210', '715,,10,,468,867,,10,538,474,13,800,,610,,103,,,,,802,,,,,,,12,12,,462', '549,10,913,556,318,318,634,466,,687,,,,875,534,876,,115,634,696,,12', '10,552,,,,607,210,210,830,,,331,593,824,,210,558,13,583,728,897,285', '13,731,649,587,,,,,591,606,118,,285,,,403,757,574,510,250,,120,394,', '634,620,799,10,909,,,768,634,808,,10,,12,210,210,,617,12,668,,,788,626', '747,627,383,601,,,,630,484,210,650,652,,,752,,587,484,941,587,586,,', ',210,590,,291,651,,,403,250,,,,291,287,394,,,,,403,,686,287,,,,394,', ',,307,,,836,,,,,,,,701,698,,,,,607,10,10,607,,,,,,,612,643,210,614,', ',,,,,706,14,403,250,14,,10,,403,394,681,681,,250,,,,394,,,,,668,,668', ',14,,,699,700,,,910,,711,948,,115,,,210,,2,,,,,510,,318,285,,210,,,', ',,,285,,905,,753,,10,583,925,210,763,10,484,280,767,118,724,726,14,', ',729,717,759,,760,120,,,,,291,901,668,,,,14,14,583,,287,291,,,587,13', ',591,13,,,287,,810,210,790,801,803,14,,,,807,,210,,,210,,883,13,886', ',888,,,668,,668,,,,,,,,,12,,,12,,,,583,,,,,,,210,210,583,,827,210,115', '829,14,668,,12,831,14,804,,,926,,,809,13,,14,,,,,,,318,,,,832,,,,,738', '13,13,,,285,,,,,,,844,813,,,285,861,,,,,14,13,12,869,947,855,291,,,', ',,14,376,377,634,840,,,14,14,12,12,,,,,871,,,,,,,,,781,,280,783,,,,12', ',14,14,210,,14,,,13,,,14,681,13,,,,,,,,291,,13,,,318,,314,,,338,,210', ',,,,891,,,,14,924,,,,,,10,12,,10,,280,12,,,,280,,13,,,,12,,940,,,,,', '13,10,,,838,,,13,13,,,,,,,403,250,,,,,,394,,,,,,,,12,210,,13,13,,,13', '14,,,,12,13,14,403,14,,,12,12,,,10,583,,,,,,,,,881,,,,,,,,,10,10,13', '12,12,877,,12,879,,,,,12,,,,,,,,,10,26,381,385,,,26,,,,898,,,899,,900', ',,,26,,,12,26,26,26,,,,,,26,,,210,,,,,,,,,,,,,,,13,,10,26,26,,13,10', '13,26,26,,450,26,452,,,10,,453,,,,,,,,,,942,,35,943,,944,,35,,,,,,12', ',,,,949,12,,12,,26,,,10,26,26,26,26,26,35,284,284,,,,10,,,960,841,,', '10,10,,,,,,,35,,,,,,677,,,679,,326,341,341,341,,,,10,10,,,10,,,,,,10', ',,,,,,,660,662,663,,,,,,,,,,,35,,,,,,,,35,579,10,,,,26,26,26,26,26,26', ',,,,26,26,26,26,26,,,,,,746,,,,,26,,,,,,,,,,,,,,755,756,,,,,,,,,,,,', ',,,,,,,608,764,314,,611,10,,,,,,10,,10,26,26,619,,,35,35,,,26,,26,,', ',,26,,,,,,,,,,,,,,35,,647,,,,608,,,314,,,,,,,,,,,,,,811,26,26,,,,,,', ',,,,,,,,,,,26,,381,,,,,,,,,,,,,26,,35,828,,,284,35,,,,,,,,835,,,,284', ',,842,843,,,,,,,,719,,,,,,,,,,,818,820,821,,,,863,864,,,866,,,,,,,26', '749,,,,,,,,,,,,,,,,,,,,847,848,,,850,852,,854,,889,,,,,,,,,,,,,,,,,', ',26,,,,,,,,,785,,,26,,,,,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,938,,,,', ',939,,,,,,,812,,26,,,26,,915,916,918,920,26,921,,,,,,,,,26,,,26,,284', '26,,,931,933,934,935,,284,,,,,,,,,,,,,,,,,,,,,,,26,26,,,,26,,,,,,,,', ',,954,956,957,958,865,26,,35,959,,35,,,,,,,,,961,,,,,26,26,,,,,,,35', ',,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,865,,26', '608,,,,26,,,,,26,35,35,,,284,,,,,26,,,,,,284,,,,26,216,,35,,249,249', '249,,,,,,,,,,,,,,301,302,303,,,,,26,,,,,,,,249,249,,,26,,,,,,,26,26', ',,,,,35,,,,,35,,,,,,,,,,35,,26,,26,26,,,26,,,,,,26,,,,,,,,,,,,,,,,,', ',,,,,,35,,,,,,,26,,,,,35,,,,837,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,,35,35', ',,35,,,,,,35,,,,,,26,,,,,,,,,,380,249,388,249,341,26,,,405,,,26,,26', ',35,,,,,,,216,,,419,420,421,422,423,424,425,426,427,428,429,430,431', '432,433,434,435,436,437,438,439,440,441,442,443,444,,,,,,,,,249,,249', ',,,,249,,,,,,249,249,,,,,,,,249,,,35,,,,,,35,,35,,,,,,,,,,,,,,,,,490', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,249,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,249,,405,600,388,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,249,,249,,249,,,,,,,,,,,,618,,,,,,,,,,,,249,,,', ',,,,,,640,641,642,,,,,,249,,,,249,,,249,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,249,249,,,,,,,,,,249,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,718,,249,721', ',,725,727,,,,730,,,732,,,,,,,,,,,,,,,,,249,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,249,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,249,,814,,,,,,,,,,,725,727,730,,816,,,,,,,,,,,249', ',,249,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,249,,,,,,,,,,,,', ',,,,814,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,249,,,249,,,249' ] racc_goto_table = arr = ::Array.new(2562, 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 = [ '50,50,59,3,22,49,43,61,61,22,58,21,88,13,13,4,27,13,19,29,29,29,85,21', '114,56,56,39,62,62,20,152,89,111,22,22,22,53,53,123,27,15,8,44,11,11', '5,83,54,54,47,82,82,84,84,22,56,56,56,50,13,13,13,13,149,148,22,22,22', '35,88,107,147,40,65,45,65,33,33,118,60,60,152,25,60,64,64,19,25,25,65', '119,25,34,34,34,23,23,36,90,8,31,31,31,22,142,91,142,142,18,108,105', '22,63,18,138,63,36,36,92,138,48,48,93,94,95,96,18,97,98,99,18,18,18', '100,25,25,25,25,18,18,18,33,33,59,59,116,112,101,102,103,17,104,9,67', '109,17,66,57,149,18,18,55,37,117,1,18,18,26,120,18,18,18,18,121,122', '16,124,125,108,41,17,126,127,129,130,131,132,133,136,137,139,140,141', '50,29,12,22,22,143,144,62,17,112,145,112,146,10,21,18,81,6,114,18,18', '18,18,18,15,15,15,107,22,108,79,78,15,123,105,77,147,86,85,5,19,25,25', '25,25,87,20,70,69,116,,,,111,9,41,148,17,41,45,,,9,108,,17,47,114,45', ',29,29,147,118,,36,43,,20,29,,39,56,13,13,119,39,,22,21,,106,22,22,27', '56,33,33,62,44,62,19,116,,21,22,,,18,18,18,18,18,18,83,,114,,18,18,18', '18,18,142,,14,,40,84,,14,21,40,18,20,,152,,88,,,,,20,,,,,,,17,17,,31', '88,14,89,21,25,25,33,31,,19,,,,112,8,112,,50,33,19,,17,14,25,,,,65,18', '18,65,,,14,41,116,,18,25,18,27,35,112,18,18,35,23,62,,,,,62,61,53,,18', ',,50,45,11,114,29,,54,62,,33,61,82,14,5,,,60,33,123,,14,,17,18,18,,41', '17,106,,,106,41,64,41,59,27,,,,41,43,18,58,61,,,64,,62,43,112,62,34', ',,,18,34,,56,41,,,50,29,,,,56,22,62,,,,,50,,59,22,,,,62,,,,25,,,82,', ',,,,,,3,13,,,,,65,14,14,65,,,,,,,34,25,18,34,,,,,,,41,22,50,29,22,,14', ',50,62,88,88,,29,,,,62,,,,,106,,106,,22,,,88,88,,,85,,22,20,,50,,,18', ',2,,,,,114,,25,18,,18,,,,,,,18,,82,,41,,14,27,4,18,58,14,43,2,58,53', '15,15,22,,,15,11,43,,41,54,,,,,56,106,106,,,,22,22,27,,22,56,,,62,18', ',62,18,,,22,,49,18,41,13,3,22,,,,3,,18,,,18,,64,18,64,,64,,,106,,106', ',,,,,,,,17,,,17,,,,27,,,,,,,18,18,27,,59,18,50,59,22,106,,17,61,22,88', ',,19,,,88,18,,22,,,,,,,25,,,,41,,,,,110,18,18,,,18,,,,,,,41,15,,,18', '13,,,,,22,18,17,3,64,41,56,,,,,,22,2,2,33,22,,,22,22,17,17,,,,,41,,', ',,,,,,110,,2,110,,,,17,,22,22,18,,22,,,18,,,22,88,18,,,,,,,,56,,18,', ',25,,24,,,22,,18,,,,,21,,,,22,61,,,,,,14,17,,14,,2,17,,,,2,,18,,,,17', ',3,,,,,,18,14,,,18,,,18,18,,,,,,,50,29,,,,,,62,,,,,,,,17,18,,18,18,', ',18,22,,,,17,18,22,50,22,,,17,17,,,14,27,,,,,,,,,18,,,,,,,,,14,14,18', '17,17,110,,17,110,,,,,17,,,,,,,,,14,38,24,24,,,38,,,,110,,,110,,110', ',,,38,,,17,38,38,38,,,,,,38,,,18,,,,,,,,,,,,,,,18,,14,38,38,,18,14,18', '38,38,,24,38,24,,,14,,24,,,,,,,,,,110,,46,110,,110,,46,,,,,,17,,,,,110', '17,,17,,38,,,14,38,38,38,38,38,46,46,46,,,,14,,,110,14,,,14,14,,,,,', ',46,,,,,,2,,,2,,46,46,46,46,,,,14,14,,,14,,,,,,14,,,,,,,,113,113,113', ',,,,,,,,,,46,,,,,,,,46,24,14,,,,38,38,38,38,38,38,,,,,38,38,38,38,38', ',,,,,2,,,,,38,,,,,,,,,,,,,,2,2,,,,,,,,,,,,,,,,,,,,24,2,24,,24,14,,,', ',,14,,14,38,38,24,,,46,46,,,38,,38,,,,,38,,,,,,,,,,,,,,46,,24,,,,24', ',,24,,,,,,,,,,,,,,2,38,38,,,,,,,,,,,,,,,,,,38,,24,,,,,,,,,,,,,38,,46', '2,,,46,46,,,,,,,,2,,,,46,,,2,2,,,,,,,,24,,,,,,,,,,,113,113,113,,,,2', '2,,,2,,,,,,,38,24,,,,,,,,,,,,,,,,,,,,113,113,,,113,113,,113,,2,,,,,', ',,,,,,,,,,,,,38,,,,,,,,,24,,,38,,,,,,,,,,,,,,,,38,,,,,,,,,,,,,,,,,,', ',,,2,,,,,,2,,,,,,,24,,38,,,38,,113,113,113,113,38,113,,,,,,,,,38,,,38', ',46,38,,,113,113,113,113,,46,,,,,,,,,,,,,,,,,,,,,,,38,38,,,,38,,,,,', ',,,,,113,113,113,113,24,38,,46,113,,46,,,,,,,,,113,,,,,38,38,,,,,,,46', ',,,,,,,,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,46,,,,,,24,,38', '24,,,,38,,,,,38,46,46,,,46,,,,,38,,,,,,46,,,,38,28,,46,,28,28,28,,,', ',,,,,,,,,,28,28,28,,,,,38,,,,,,,,28,28,,,38,,,,,,,38,38,,,,,,46,,,,', '46,,,,,,,,,,46,,38,,38,38,,,38,,,,,,38,,,,,,,,,,,,,,,,,,,,,,,,46,,,', ',,,38,,,,,46,,,,46,,,46,46,,,,,,,,,,,,,,,,,,,,,,,,,46,46,,,46,,,,,,46', ',,,,,38,,,,,,,,,,28,28,28,28,46,38,,,28,,,38,,38,,46,,,,,,,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,,,,,,,,28,,,46,,,,,,46,,46,,,,,', ',,,,,,,,,,,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,28,28,,28,,,,,,,,,,,28,,,28,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,28,,,28' ] racc_goto_check = arr = ::Array.new(2562, 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, 165, 574, -48, -290, -446, -433, nil, 39, 148, 204, 38, 189, -44, 319, 23, 114, 151, 109, -180, -359, -2, 4, -99, 772, 31, 58, -1, 1671, -3, nil, 79, nil, -122, 67, -197, -347, -295, 966, -3, 43, -27, nil, -25, 11, -220, 1045, -285, 58, -60, -6, nil, nil, 31, 42, -213, -6, 105, -43, -51, -229, -46, 2, -341, -166, -373, -306, -114, nil, -221, -382, nil, nil, nil, nil, nil, nil, 164, 171, 169, nil, 154, -268, -630, -479, -302, 169, -100, 9, -522, 34, -247, -188, 64, -556, 65, -557, -413, -738, -418, -566, -194, -203, -405, -658, -676, -234, -448, -679, -448, 129, -570, -456, 625, -293, nil, -360, -493, -578, -566, -148, -330, 119, -278, 157, -476, -473, -63, nil, -87, -87, -680, -306, -460, nil, nil, 118, 117, 39, 114, 114, -167, -252, 120, -362, -359, -453, -587, -596, -755, nil, nil, -418 ] racc_goto_default = [ nil, nil, 305, nil, nil, 792, nil, 3, nil, 4, 325, nil, nil, nil, 214, 16, 11, 215, 300, nil, nil, 546, 213, nil, 255, 15, nil, 411, 19, 20, 21, 390, 25, 637, nil, nil, nil, nil, 290, 29, nil, nil, 31, 34, 33, nil, 211, 336, nil, 117, 396, 116, 119, 69, 70, nil, 42, nil, 645, 251, nil, 252, 401, 588, nil, 253, nil, nil, 268, nil, nil, 43, 44, 45, 46, 47, 48, 49, nil, 269, 55, nil, nil, nil, nil, nil, nil, nil, 529, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 670, 518, nil, 671, nil, 507, nil, 509, nil, 779, 602, nil, nil, nil, 515, nil, nil, nil, 704, nil, nil, nil, nil, 400, nil, nil, nil, nil, nil, 68, 71, 72, nil, nil, nil, nil, nil, 565, nil, nil, nil, 508, 520, 521, 745, 524, 527, 260 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 139, :_reduce_none, 4, 141, :_reduce_2, 2, 140, :_reduce_3, 0, 145, :_reduce_4, 1, 145, :_reduce_5, 3, 145, :_reduce_6, 2, 145, :_reduce_7, 0, 164, :_reduce_8, 4, 147, :_reduce_9, 3, 147, :_reduce_10, 3, 147, :_reduce_11, 3, 147, :_reduce_12, 2, 147, :_reduce_13, 3, 147, :_reduce_14, 3, 147, :_reduce_15, 3, 147, :_reduce_16, 3, 147, :_reduce_17, 3, 147, :_reduce_18, 4, 147, :_reduce_19, 4, 147, :_reduce_20, 3, 147, :_reduce_21, 3, 147, :_reduce_22, 3, 147, :_reduce_23, 6, 147, :_reduce_24, 5, 147, :_reduce_25, 5, 147, :_reduce_26, 5, 147, :_reduce_27, 3, 147, :_reduce_28, 3, 147, :_reduce_29, 3, 147, :_reduce_30, 3, 147, :_reduce_31, 1, 147, :_reduce_none, 1, 163, :_reduce_none, 3, 163, :_reduce_34, 3, 163, :_reduce_35, 3, 163, :_reduce_36, 2, 163, :_reduce_37, 1, 163, :_reduce_none, 1, 151, :_reduce_none, 1, 153, :_reduce_none, 1, 153, :_reduce_none, 2, 153, :_reduce_42, 2, 153, :_reduce_43, 2, 153, :_reduce_44, 1, 168, :_reduce_none, 4, 168, :_reduce_46, 4, 168, :_reduce_47, 0, 175, :_reduce_48, 5, 173, :_reduce_49, 2, 167, :_reduce_50, 3, 167, :_reduce_51, 4, 167, :_reduce_52, 5, 167, :_reduce_53, 4, 167, :_reduce_54, 5, 167, :_reduce_55, 2, 167, :_reduce_56, 2, 167, :_reduce_57, 1, 154, :_reduce_58, 3, 154, :_reduce_59, 1, 178, :_reduce_60, 3, 178, :_reduce_61, 1, 177, :_reduce_none, 2, 177, :_reduce_63, 3, 177, :_reduce_64, 5, 177, :_reduce_65, 2, 177, :_reduce_66, 4, 177, :_reduce_67, 2, 177, :_reduce_68, 4, 177, :_reduce_69, 1, 177, :_reduce_70, 3, 177, :_reduce_71, 1, 181, :_reduce_none, 3, 181, :_reduce_73, 2, 180, :_reduce_74, 3, 180, :_reduce_75, 1, 183, :_reduce_76, 3, 183, :_reduce_77, 1, 182, :_reduce_78, 4, 182, :_reduce_79, 3, 182, :_reduce_80, 3, 182, :_reduce_81, 3, 182, :_reduce_82, 3, 182, :_reduce_83, 2, 182, :_reduce_84, 1, 182, :_reduce_85, 1, 152, :_reduce_86, 4, 152, :_reduce_87, 3, 152, :_reduce_88, 3, 152, :_reduce_89, 3, 152, :_reduce_90, 3, 152, :_reduce_91, 2, 152, :_reduce_92, 1, 152, :_reduce_93, 1, 185, :_reduce_94, 1, 185, :_reduce_none, 2, 186, :_reduce_96, 1, 186, :_reduce_97, 3, 186, :_reduce_98, 1, 187, :_reduce_none, 1, 187, :_reduce_none, 1, 187, :_reduce_none, 1, 187, :_reduce_none, 1, 187, :_reduce_none, 1, 190, :_reduce_104, 1, 190, :_reduce_none, 1, 149, :_reduce_none, 1, 149, :_reduce_none, 1, 150, :_reduce_108, 0, 193, :_reduce_109, 4, 150, :_reduce_110, 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_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_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_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 3, 166, :_reduce_181, 5, 166, :_reduce_182, 3, 166, :_reduce_183, 5, 166, :_reduce_184, 6, 166, :_reduce_185, 5, 166, :_reduce_186, 5, 166, :_reduce_187, 5, 166, :_reduce_188, 5, 166, :_reduce_189, 4, 166, :_reduce_190, 3, 166, :_reduce_191, 3, 166, :_reduce_192, 3, 166, :_reduce_193, 3, 166, :_reduce_194, 3, 166, :_reduce_195, 3, 166, :_reduce_196, 3, 166, :_reduce_197, 3, 166, :_reduce_198, 3, 166, :_reduce_199, 4, 166, :_reduce_200, 4, 166, :_reduce_201, 2, 166, :_reduce_202, 2, 166, :_reduce_203, 3, 166, :_reduce_204, 3, 166, :_reduce_205, 3, 166, :_reduce_206, 3, 166, :_reduce_207, 3, 166, :_reduce_208, 3, 166, :_reduce_209, 3, 166, :_reduce_210, 3, 166, :_reduce_211, 3, 166, :_reduce_212, 3, 166, :_reduce_213, 3, 166, :_reduce_214, 3, 166, :_reduce_215, 3, 166, :_reduce_216, 2, 166, :_reduce_217, 2, 166, :_reduce_218, 3, 166, :_reduce_219, 3, 166, :_reduce_220, 3, 166, :_reduce_221, 3, 166, :_reduce_222, 3, 166, :_reduce_223, 6, 166, :_reduce_224, 1, 166, :_reduce_none, 1, 162, :_reduce_none, 1, 195, :_reduce_none, 2, 195, :_reduce_none, 4, 195, :_reduce_229, 2, 195, :_reduce_230, 3, 200, :_reduce_231, 0, 201, :_reduce_232, 1, 201, :_reduce_none, 0, 157, :_reduce_234, 1, 157, :_reduce_none, 1, 169, :_reduce_236, 2, 169, :_reduce_237, 2, 169, :_reduce_238, 4, 169, :_reduce_239, 6, 169, :_reduce_240, 1, 169, :_reduce_241, 4, 204, :_reduce_242, 3, 204, :_reduce_243, 2, 204, :_reduce_244, 4, 204, :_reduce_245, 6, 204, :_reduce_246, 1, 204, :_reduce_247, 0, 206, :_reduce_248, 2, 172, :_reduce_249, 1, 205, :_reduce_250, 0, 207, :_reduce_251, 3, 205, :_reduce_252, 0, 208, :_reduce_253, 4, 205, :_reduce_254, 2, 203, :_reduce_255, 2, 202, :_reduce_256, 1, 202, :_reduce_257, 0, 202, :_reduce_258, 1, 197, :_reduce_259, 2, 197, :_reduce_260, 3, 197, :_reduce_261, 4, 197, :_reduce_262, 3, 161, :_reduce_263, 4, 161, :_reduce_264, 2, 161, :_reduce_265, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_274, 3, 194, :_reduce_275, 0, 230, :_reduce_276, 4, 194, :_reduce_277, 3, 194, :_reduce_278, 3, 194, :_reduce_279, 2, 194, :_reduce_280, 3, 194, :_reduce_281, 3, 194, :_reduce_282, 1, 194, :_reduce_283, 4, 194, :_reduce_284, 3, 194, :_reduce_285, 1, 194, :_reduce_286, 5, 194, :_reduce_287, 4, 194, :_reduce_288, 3, 194, :_reduce_289, 2, 194, :_reduce_290, 1, 194, :_reduce_none, 2, 194, :_reduce_292, 2, 194, :_reduce_293, 6, 194, :_reduce_294, 6, 194, :_reduce_295, 0, 231, :_reduce_296, 0, 232, :_reduce_297, 7, 194, :_reduce_298, 0, 233, :_reduce_299, 0, 234, :_reduce_300, 7, 194, :_reduce_301, 5, 194, :_reduce_302, 4, 194, :_reduce_303, 0, 235, :_reduce_304, 0, 236, :_reduce_305, 9, 194, :_reduce_306, 0, 237, :_reduce_307, 6, 194, :_reduce_308, 0, 238, :_reduce_309, 7, 194, :_reduce_310, 0, 239, :_reduce_311, 5, 194, :_reduce_312, 0, 240, :_reduce_313, 6, 194, :_reduce_314, 0, 241, :_reduce_315, 0, 242, :_reduce_316, 9, 194, :_reduce_317, 1, 194, :_reduce_318, 1, 194, :_reduce_319, 1, 194, :_reduce_320, 1, 194, :_reduce_321, 1, 156, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 2, 220, :_reduce_325, 1, 222, :_reduce_none, 1, 222, :_reduce_none, 1, 221, :_reduce_none, 5, 221, :_reduce_329, 1, 143, :_reduce_none, 2, 143, :_reduce_331, 1, 224, :_reduce_none, 1, 224, :_reduce_none, 1, 243, :_reduce_none, 3, 243, :_reduce_335, 1, 246, :_reduce_336, 3, 246, :_reduce_337, 1, 245, :_reduce_none, 4, 245, :_reduce_339, 6, 245, :_reduce_340, 3, 245, :_reduce_341, 5, 245, :_reduce_342, 2, 245, :_reduce_343, 4, 245, :_reduce_344, 1, 245, :_reduce_345, 3, 245, :_reduce_346, 6, 247, :_reduce_347, 8, 247, :_reduce_348, 4, 247, :_reduce_349, 6, 247, :_reduce_350, 4, 247, :_reduce_351, 2, 247, :_reduce_none, 6, 247, :_reduce_353, 2, 247, :_reduce_354, 4, 247, :_reduce_355, 6, 247, :_reduce_356, 2, 247, :_reduce_357, 4, 247, :_reduce_358, 2, 247, :_reduce_359, 4, 247, :_reduce_360, 1, 247, :_reduce_361, 0, 174, :_reduce_362, 1, 174, :_reduce_363, 3, 253, :_reduce_364, 1, 253, :_reduce_365, 4, 253, :_reduce_366, 0, 254, :_reduce_367, 2, 254, :_reduce_368, 1, 255, :_reduce_369, 3, 255, :_reduce_370, 1, 256, :_reduce_371, 1, 256, :_reduce_none, 0, 260, :_reduce_373, 3, 219, :_reduce_374, 4, 258, :_reduce_375, 2, 258, :_reduce_376, 0, 263, :_reduce_377, 4, 259, :_reduce_378, 0, 264, :_reduce_379, 4, 259, :_reduce_380, 0, 265, :_reduce_381, 5, 262, :_reduce_382, 2, 170, :_reduce_383, 4, 170, :_reduce_384, 4, 170, :_reduce_385, 2, 218, :_reduce_386, 4, 218, :_reduce_387, 4, 218, :_reduce_388, 3, 218, :_reduce_389, 3, 218, :_reduce_390, 3, 218, :_reduce_391, 2, 218, :_reduce_392, 1, 218, :_reduce_393, 4, 218, :_reduce_394, 0, 267, :_reduce_395, 5, 217, :_reduce_396, 0, 268, :_reduce_397, 5, 217, :_reduce_398, 5, 223, :_reduce_399, 1, 269, :_reduce_400, 1, 269, :_reduce_none, 6, 142, :_reduce_402, 0, 142, :_reduce_403, 1, 270, :_reduce_404, 1, 270, :_reduce_none, 1, 270, :_reduce_none, 2, 271, :_reduce_407, 1, 271, :_reduce_none, 2, 144, :_reduce_409, 1, 144, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 210, :_reduce_414, 1, 273, :_reduce_415, 2, 273, :_reduce_416, 3, 274, :_reduce_417, 1, 274, :_reduce_418, 1, 274, :_reduce_419, 3, 211, :_reduce_420, 4, 212, :_reduce_421, 3, 213, :_reduce_422, 0, 278, :_reduce_423, 3, 278, :_reduce_424, 1, 279, :_reduce_425, 2, 279, :_reduce_426, 3, 214, :_reduce_427, 0, 281, :_reduce_428, 3, 281, :_reduce_429, 0, 275, :_reduce_430, 2, 275, :_reduce_431, 0, 276, :_reduce_432, 2, 276, :_reduce_433, 0, 277, :_reduce_434, 2, 277, :_reduce_435, 1, 280, :_reduce_436, 2, 280, :_reduce_437, 0, 283, :_reduce_438, 4, 280, :_reduce_439, 1, 282, :_reduce_440, 1, 282, :_reduce_441, 1, 282, :_reduce_442, 1, 282, :_reduce_none, 1, 191, :_reduce_444, 3, 192, :_reduce_445, 1, 272, :_reduce_446, 1, 272, :_reduce_447, 2, 272, :_reduce_448, 2, 272, :_reduce_449, 1, 184, :_reduce_450, 1, 184, :_reduce_451, 1, 184, :_reduce_452, 1, 184, :_reduce_453, 1, 184, :_reduce_454, 1, 184, :_reduce_455, 1, 184, :_reduce_456, 1, 184, :_reduce_457, 1, 184, :_reduce_458, 1, 184, :_reduce_459, 1, 184, :_reduce_460, 1, 184, :_reduce_461, 1, 215, :_reduce_462, 1, 155, :_reduce_463, 1, 160, :_reduce_464, 1, 160, :_reduce_465, 1, 225, :_reduce_466, 3, 225, :_reduce_467, 2, 225, :_reduce_468, 3, 227, :_reduce_469, 2, 227, :_reduce_470, 6, 261, :_reduce_471, 8, 261, :_reduce_472, 4, 261, :_reduce_473, 6, 261, :_reduce_474, 4, 261, :_reduce_475, 6, 261, :_reduce_476, 2, 261, :_reduce_477, 4, 261, :_reduce_478, 6, 261, :_reduce_479, 2, 261, :_reduce_480, 4, 261, :_reduce_481, 2, 261, :_reduce_482, 4, 261, :_reduce_483, 1, 261, :_reduce_484, 0, 261, :_reduce_485, 1, 257, :_reduce_486, 1, 257, :_reduce_487, 1, 257, :_reduce_488, 1, 257, :_reduce_489, 1, 244, :_reduce_none, 1, 244, :_reduce_491, 3, 244, :_reduce_492, 2, 244, :_reduce_493, 1, 285, :_reduce_none, 3, 285, :_reduce_495, 1, 248, :_reduce_496, 3, 248, :_reduce_497, 3, 286, :_reduce_498, 3, 287, :_reduce_499, 1, 249, :_reduce_500, 3, 249, :_reduce_501, 1, 284, :_reduce_502, 3, 284, :_reduce_503, 1, 288, :_reduce_none, 1, 288, :_reduce_none, 2, 250, :_reduce_506, 1, 250, :_reduce_507, 1, 289, :_reduce_none, 1, 289, :_reduce_none, 2, 252, :_reduce_510, 2, 251, :_reduce_511, 0, 251, :_reduce_512, 1, 228, :_reduce_none, 3, 228, :_reduce_514, 0, 216, :_reduce_515, 2, 216, :_reduce_none, 1, 199, :_reduce_517, 3, 199, :_reduce_518, 3, 290, :_reduce_519, 2, 290, :_reduce_520, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 171, :_reduce_none, 1, 171, :_reduce_none, 1, 171, :_reduce_none, 1, 171, :_reduce_none, 1, 266, :_reduce_none, 1, 266, :_reduce_none, 1, 266, :_reduce_none, 1, 229, :_reduce_none, 1, 229, :_reduce_none, 1, 159, :_reduce_533, 1, 159, :_reduce_534, 0, 146, :_reduce_none, 1, 146, :_reduce_none, 0, 165, :_reduce_none, 1, 165, :_reduce_none, 2, 179, :_reduce_539, 2, 158, :_reduce_540, 0, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 226, :_reduce_544, 1, 226, :_reduce_none, 1, 148, :_reduce_none, 2, 148, :_reduce_none, 0, 196, :_reduce_548 ] racc_reduce_n = 549 racc_shift_n = 962 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tPLUS => 104, :tMINUS => 105, :tLT => 106, :tGT => 107, :tPIPE => 108, :tBANG => 109, :tCARET => 110, :tLCURLY => 111, :tRCURLY => 112, :tBACK_REF2 => 113, :tSYMBEG => 114, :tSTRING_BEG => 115, :tXSTRING_BEG => 116, :tREGEXP_BEG => 117, :tREGEXP_OPT => 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, :tCHARACTER => 134, :tANDDOT => 135, :tEQL => 136, :tLOWEST => 137 } racc_nt_base = 138 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tANDDOT", "tEQL", "tLOWEST", "$start", "program", "compstmt", "bodystmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "opt_terms", "stmt", "terms", "fitem", "undef_list", "expr_value", "lhs", "command_call", "mlhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "mrhs", "arg_value", "expr", "@1", "opt_nl", "arg", "command", "block_command", "call_args", "block_call", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "@2", "operation", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@3", "primary", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "call_args2", "open_args", "@4", "@5", "@6", "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", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "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", "@20", "f_args", "do_block", "@21", "@22", "@23", "operation3", "@24", "@25", "cases", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "qword_list", "string_dvar", "@26", "f_optarg", "f_arg_item", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_3(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_4(val, _values, result) result = [] result end def _reduce_5(val, _values, result) result = [ val[0] ] result end def _reduce_6(val, _values, result) result = val[0] << val[2] result end def _reduce_7(val, _values, result) result = [ val[1] ] result end def _reduce_8(val, _values, result) @lexer.state = :expr_fname result end def _reduce_9(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_10(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_11(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_12(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_13(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_14(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_15(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_16(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_17(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_18(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_19(val, _values, result) if @context.indirectly_in_def? diagnostic :error, :begin_in_method, nil, val[0] end result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_20(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end def _reduce_21(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_22(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_23(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_25(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_26(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_27(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_28(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_29(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_30(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_31(val, _values, result) result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end # reduce 32 omitted # reduce 33 omitted def _reduce_34(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_35(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_36(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_37(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 38 omitted # reduce 39 omitted # reduce 40 omitted # reduce 41 omitted def _reduce_42(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_43(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_44(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end # reduce 45 omitted def _reduce_46(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], *val[3]) result end def _reduce_47(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], *val[3]) result end def _reduce_48(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_49(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_50(val, _values, result) result = @builder.call_method(nil, nil, val[0], *val[1]) result end def _reduce_51(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], *val[1]) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_52(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], *val[3]) result end def _reduce_53(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], *val[3]) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_54(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], *val[3]) result end def _reduce_55(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], *val[3]) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_56(val, _values, result) result = @builder.keyword_cmd(:super, val[0], *val[1]) result end def _reduce_57(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], *val[1]) result end def _reduce_58(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_59(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_60(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_61(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 62 omitted def _reduce_63(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_64(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_65(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_66(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_67(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_68(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_69(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_70(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_71(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 72 omitted def _reduce_73(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_74(val, _values, result) result = [ val[0] ] result end def _reduce_75(val, _values, result) result = val[0] << val[1] result end def _reduce_76(val, _values, result) result = [ val[0] ] result end def _reduce_77(val, _values, result) result = val[0] << val[2] result end def _reduce_78(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_79(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_80(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_81(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_82(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_83(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_84(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_85(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_86(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_87(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_88(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_89(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_90(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_91(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_92(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_93(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_94(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 95 omitted def _reduce_96(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_97(val, _values, result) result = @builder.const(val[0]) result end def _reduce_98(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 99 omitted # reduce 100 omitted # reduce 101 omitted # reduce 102 omitted # reduce 103 omitted def _reduce_104(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 105 omitted # reduce 106 omitted # reduce 107 omitted def _reduce_108(val, _values, result) result = [ val[0] ] result end def _reduce_109(val, _values, result) @lexer.state = :expr_fname result end def _reduce_110(val, _values, result) result = val[0] << val[3] result end # 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 # reduce 174 omitted # reduce 175 omitted # reduce 176 omitted # reduce 177 omitted # reduce 178 omitted # reduce 179 omitted # reduce 180 omitted def _reduce_181(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_182(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) result end def _reduce_183(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_184(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) result end def _reduce_185(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_186(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_187(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_188(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_189(val, _values, result) diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] result end def _reduce_190(val, _values, result) diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] result end def _reduce_191(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_192(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_193(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_194(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_195(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_196(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_197(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_198(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_199(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_200(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) result end def _reduce_201(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) result end def _reduce_202(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_203(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_204(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_205(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_207(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_214(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_215(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_218(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_224(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 225 omitted # reduce 226 omitted # reduce 227 omitted # reduce 228 omitted def _reduce_229(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_230(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_231(val, _values, result) result = val result end def _reduce_232(val, _values, result) result = [ nil, [], nil ] result end # reduce 233 omitted def _reduce_234(val, _values, result) result = [] result end # reduce 235 omitted def _reduce_236(val, _values, result) result = [ val[0] ] result end def _reduce_237(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_238(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_239(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_240(val, _values, result) val[2][-1] = @builder.objc_varargs(val[2][-1], val[4]) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[5]) result end def _reduce_241(val, _values, result) result = [ val[0] ] result end def _reduce_242(val, _values, result) result = [ val[0], *val[2].concat(val[3]) ] result end def _reduce_243(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_244(val, _values, result) result = [ @builder.associate(nil, val[0], nil), *val[1] ] result end def _reduce_245(val, _values, result) result = [ val[0], @builder.associate(nil, val[2], nil), *val[3] ] result end def _reduce_246(val, _values, result) result = [ val[0], *val[2]. push(@builder.associate(nil, val[4], nil)). concat(val[5]) ] result end def _reduce_247(val, _values, result) result = [ val[0] ] result end def _reduce_248(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) result end def _reduce_249(val, _values, result) @lexer.cmdarg = val[0] result = val[1] result end def _reduce_250(val, _values, result) result = [ nil, val[0], nil ] result end def _reduce_251(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_252(val, _values, result) result = [ val[0], [], val[2] ] result end def _reduce_253(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_254(val, _values, result) result = [ val[0], val[1], val[3] ] result end def _reduce_255(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_256(val, _values, result) result = [ val[1] ] result end def _reduce_257(val, _values, result) result = [] result end def _reduce_258(val, _values, result) result = [] result end def _reduce_259(val, _values, result) result = [ val[0] ] result end def _reduce_260(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_261(val, _values, result) result = val[0] << val[2] result end def _reduce_262(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_263(val, _values, result) result = val[0] << val[2] result end def _reduce_264(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_265(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end # reduce 266 omitted # reduce 267 omitted # reduce 268 omitted # reduce 269 omitted # reduce 270 omitted # reduce 271 omitted # reduce 272 omitted # reduce 273 omitted def _reduce_274(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_275(val, _values, result) result = @builder.begin_keyword(val[0], val[1], val[2]) result end def _reduce_276(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_277(val, _values, result) result = @builder.begin(val[0], val[1], val[3]) result end def _reduce_278(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_279(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_280(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_281(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_282(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_283(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_284(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_285(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_286(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_287(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_288(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_289(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_290(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 291 omitted def _reduce_292(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_293(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_294(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_295(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) result end def _reduce_296(val, _values, result) @lexer.cond.push(true) result end def _reduce_297(val, _values, result) @lexer.cond.pop result end def _reduce_298(val, _values, result) result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_299(val, _values, result) @lexer.cond.push(true) result end def _reduce_300(val, _values, result) @lexer.cond.pop result end def _reduce_301(val, _values, result) result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_302(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_303(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_304(val, _values, result) @lexer.cond.push(true) result end def _reduce_305(val, _values, result) @lexer.cond.pop result end def _reduce_306(val, _values, result) result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_307(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:class) result end def _reduce_308(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_309(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) result end def _reduce_310(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_311(val, _values, result) @static_env.extend_static @lexer.push_cmdarg result end def _reduce_312(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend result end def _reduce_313(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:def) result end def _reduce_314(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_315(val, _values, result) @lexer.state = :expr_fname result end def _reduce_316(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) result end def _reduce_317(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_318(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_319(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_320(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_321(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 322 omitted # reduce 323 omitted # reduce 324 omitted def _reduce_325(val, _values, result) result = val[1] result end # reduce 326 omitted # reduce 327 omitted # reduce 328 omitted def _reduce_329(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 330 omitted def _reduce_331(val, _values, result) result = val result end # reduce 332 omitted # reduce 333 omitted # reduce 334 omitted def _reduce_335(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_336(val, _values, result) result = [ val[0] ] result end def _reduce_337(val, _values, result) result = val[0] << val[2] result end # reduce 338 omitted def _reduce_339(val, _values, result) result = val[0]. push(@builder.objc_restarg(val[2], val[3])) result end def _reduce_340(val, _values, result) result = val[0]. push(@builder.objc_restarg(val[2], val[3])). concat(val[5]) result end def _reduce_341(val, _values, result) result = val[0]. push(@builder.objc_restarg(val[2])) result end def _reduce_342(val, _values, result) result = val[0]. push(@builder.objc_restarg(val[2])). concat(val[4]) result end def _reduce_343(val, _values, result) result = [ @builder.objc_restarg(val[0], val[1]) ] result end def _reduce_344(val, _values, result) result = [ @builder.objc_restarg(val[0], val[1]), *val[3] ] result end def _reduce_345(val, _values, result) result = [ @builder.objc_restarg(val[0]) ] result end def _reduce_346(val, _values, result) result = [ @builder.objc_restarg(val[0]), *val[2] ] result end def _reduce_347(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_348(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_349(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_350(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_351(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 352 omitted def _reduce_353(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_354(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_355(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_356(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_357(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_358(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_359(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_360(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_361(val, _values, result) result = [ val[0] ] result end def _reduce_362(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_363(val, _values, result) @lexer.state = :expr_value result end def _reduce_364(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_365(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_366(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_367(val, _values, result) result = [] result end def _reduce_368(val, _values, result) result = val[1] result end def _reduce_369(val, _values, result) result = [ val[0] ] result end def _reduce_370(val, _values, result) result = val[0] << val[2] result end def _reduce_371(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 372 omitted def _reduce_373(val, _values, result) @static_env.extend_dynamic result end def _reduce_374(val, _values, result) result = [ val[1], val[2] ] @static_env.unextend result end def _reduce_375(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_376(val, _values, result) result = @builder.args(nil, val[0].concat(val[1]), nil) result end def _reduce_377(val, _values, result) @context.push(:lambda) result end def _reduce_378(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_379(val, _values, result) @context.push(:lambda) result end def _reduce_380(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_381(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_382(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_383(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_384(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_385(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_386(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_387(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_388(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_389(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_390(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_391(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_392(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_393(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_394(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_395(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_396(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_397(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_398(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_399(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_400(val, _values, result) result = [ val[0] ] result end # reduce 401 omitted def _reduce_402(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_403(val, _values, result) result = [] result end def _reduce_404(val, _values, result) result = [ val[0] ] result end # reduce 405 omitted # reduce 406 omitted def _reduce_407(val, _values, result) result = [ val[0], val[1] ] result end # reduce 408 omitted def _reduce_409(val, _values, result) result = [ val[0], val[1] ] result end # reduce 410 omitted # reduce 411 omitted # reduce 412 omitted # reduce 413 omitted def _reduce_414(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_415(val, _values, result) result = [ val[0] ] result end def _reduce_416(val, _values, result) result = val[0] << val[1] result end def _reduce_417(val, _values, result) result = @builder.string_compose(val[0], val[1], val[2]) result end def _reduce_418(val, _values, result) result = @builder.string(val[0]) result end def _reduce_419(val, _values, result) result = @builder.character(val[0]) result end def _reduce_420(val, _values, result) result = @builder.xstring_compose(val[0], val[1], val[2]) result end def _reduce_421(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_422(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_423(val, _values, result) result = [] result end def _reduce_424(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_425(val, _values, result) result = [ val[0] ] result end def _reduce_426(val, _values, result) result = val[0] << val[1] result end def _reduce_427(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_428(val, _values, result) result = [] result end def _reduce_429(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_430(val, _values, result) result = [] result end def _reduce_431(val, _values, result) result = val[0] << val[1] result end def _reduce_432(val, _values, result) result = [] result end def _reduce_433(val, _values, result) result = val[0] << val[1] result end def _reduce_434(val, _values, result) result = [] result end def _reduce_435(val, _values, result) result = val[0] << val[1] result end def _reduce_436(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_437(val, _values, result) result = val[1] result end def _reduce_438(val, _values, result) @lexer.cond.push(false) @lexer.cmdarg.push(false) result end def _reduce_439(val, _values, result) @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_440(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_441(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_442(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 443 omitted def _reduce_444(val, _values, result) result = @builder.symbol(val[0]) result end def _reduce_445(val, _values, result) result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_446(val, _values, result) result = @builder.integer(val[0]) result end def _reduce_447(val, _values, result) result = @builder.float(val[0]) result end def _reduce_448(val, _values, result) num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_449(val, _values, result) num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_450(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_451(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_452(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_453(val, _values, result) result = @builder.const(val[0]) result end def _reduce_454(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_455(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_456(val, _values, result) result = @builder.self(val[0]) result end def _reduce_457(val, _values, result) result = @builder.true(val[0]) result end def _reduce_458(val, _values, result) result = @builder.false(val[0]) result end def _reduce_459(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_460(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_461(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_462(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_463(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_464(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_465(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_466(val, _values, result) result = nil result end def _reduce_467(val, _values, result) result = [ val[0], val[1] ] result end def _reduce_468(val, _values, result) yyerrok result = nil result end def _reduce_469(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_470(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_471(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_472(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_473(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_474(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_475(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_476(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_477(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_478(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_479(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_480(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_481(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_482(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_483(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_484(val, _values, result) result = [ val[0] ] result end def _reduce_485(val, _values, result) result = [] result end def _reduce_486(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_487(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_488(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_489(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 490 omitted def _reduce_491(val, _values, result) @static_env.declare val[0][0] result = @builder.arg(val[0]) result end def _reduce_492(val, _values, result) @static_env.declare val[2][0] result = @builder.objc_kwarg(val[0], val[1], val[2]) result end def _reduce_493(val, _values, result) @static_env.declare val[1][0] result = @builder.objc_kwarg(val[0], nil, val[1]) result end # reduce 494 omitted def _reduce_495(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_496(val, _values, result) result = [ val[0] ] result end def _reduce_497(val, _values, result) result = val[0] << val[2] result end def _reduce_498(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_499(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_500(val, _values, result) result = [ val[0] ] result end def _reduce_501(val, _values, result) result = val[0] << val[2] result end def _reduce_502(val, _values, result) result = [ val[0] ] result end def _reduce_503(val, _values, result) result = val[0] << val[2] result end # reduce 504 omitted # reduce 505 omitted def _reduce_506(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_507(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 508 omitted # reduce 509 omitted def _reduce_510(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_511(val, _values, result) result = [ val[1] ] result end def _reduce_512(val, _values, result) result = [] result end # reduce 513 omitted def _reduce_514(val, _values, result) result = val[1] result end def _reduce_515(val, _values, result) result = [] result end # reduce 516 omitted def _reduce_517(val, _values, result) result = [ val[0] ] result end def _reduce_518(val, _values, result) result = val[0] << val[2] result end def _reduce_519(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_520(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end # reduce 521 omitted # reduce 522 omitted # reduce 523 omitted # reduce 524 omitted # reduce 525 omitted # reduce 526 omitted # reduce 527 omitted # reduce 528 omitted # reduce 529 omitted # reduce 530 omitted # reduce 531 omitted # reduce 532 omitted def _reduce_533(val, _values, result) result = [:dot, val[0][1]] result end def _reduce_534(val, _values, result) result = [:anddot, val[0][1]] result end # reduce 535 omitted # reduce 536 omitted # reduce 537 omitted # reduce 538 omitted def _reduce_539(val, _values, result) result = val[1] result end def _reduce_540(val, _values, result) result = val[1] result end # reduce 541 omitted # reduce 542 omitted # reduce 543 omitted def _reduce_544(val, _values, result) yyerrok result end # reduce 545 omitted # reduce 546 omitted # reduce 547 omitted def _reduce_548(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class RubyMotion end # module Parser parser-2.7.0.2/lib/parser/ruby27.rb0000644000004100000410000111144313617025313016733 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby27 < Parser::Base def version 27 end def default_encoding Encoding::UTF_8 end ##### State transition tables begin ### clist = [ '-685,532,587,816,834,-108,-106,-685,-685,-685,213,214,276,-685,-685', '628,-685,223,834,1030,-111,-105,-590,-109,-685,-685,630,492,757,-590', '221,882,-110,-277,-107,932,-685,-685,587,-685,-685,-685,-685,-685,-106', '-113,758,-112,587,834,-483,-111,118,-91,118,-112,492,117,224,117,-112', '224,-107,-105,-113,-77,-685,-685,-685,-685,-685,-685,-685,-685,-685', '-685,-685,-685,-685,-685,224,627,-685,-685,-685,-682,655,-590,-681,-113', '-685,-107,629,-685,-107,1083,213,214,-685,275,-685,1031,-685,-685,224', '-685,-685,-685,-685,-685,-580,-685,-685,-685,-99,-97,766,-580,-580,-580', '118,587,-580,-580,-580,117,-580,-685,-682,-102,-685,-685,-100,-685,-580', '-685,-580,-580,-580,-105,881,-101,-685,-98,-105,-109,-580,-580,-108', '-580,-580,-580,-580,-580,-110,-109,118,587,587,911,817,117,-106,-113', '-103,-112,118,-106,-113,-111,-112,117,-96,-104,-111,-276,-580,-580,-580', '-580,-580,-580,-580,-580,-580,-580,-580,-580,-580,-580,118,594,-580', '-580,-580,117,-580,-580,276,771,-580,1090,118,-580,-580,804,-580,117', '-580,-107,-580,-694,-580,-580,-107,-580,-580,-580,-580,-580,118,-580', '-302,-580,874,117,594,213,214,-302,-302,-302,-681,-694,-302,-302,-302', '-580,-302,118,-580,-580,-580,-580,117,-580,-302,-580,-302,-302,-302', '224,-580,213,214,-580,803,-101,-302,-302,650,-302,-302,-302,-302,-302', '-108,799,1036,224,-99,-108,-110,-109,276,118,118,-110,-109,615,117,117', '118,1091,931,275,1035,117,-302,-302,-302,-302,-302,-302,-302,-302,-302', '-302,-302,-302,-302,-302,96,97,-302,-302,-302,-101,832,-302,96,97,-302', '600,-694,-302,-302,852,-302,-110,-302,224,-302,-101,-302,-302,276,-302', '-302,-302,-302,-302,-302,-302,650,-302,-99,649,271,-302,-302,-302,789', '617,616,-302,-302,224,-302,-302,224,772,-302,-302,-302,-302,-302,-302', '219,-302,1098,275,615,-101,-302,269,-101,-111,-302,-302,649,-302,-302', '-302,-302,-302,-99,768,-101,-99,98,99,-100,-98,-99,219,767,461,98,99', '271,-99,269,-110,545,829,-108,547,-302,-302,-302,-302,-302,-302,-302', '-302,-302,-302,-302,-302,-302,-302,762,275,-302,-302,-302,-587,654,532', '830,689,-302,220,-587,-302,617,616,760,-108,-302,615,-302,615,-302,-302', '800,-302,-302,-302,-302,-302,615,-302,-685,-302,-113,-681,-100,-98,220', '-685,-685,-685,-108,759,-685,-685,-685,-302,-685,545,-302,-302,547,-102', '-103,-302,-685,-685,-685,-685,-685,-595,-302,906,874,-111,-112,-110', '-685,-685,-587,-685,-685,-685,-685,-685,-100,-98,545,-100,-98,547,615', '617,616,617,616,613,615,213,214,-100,-98,802,617,616,618,748,-685,-685', '-685,-685,-685,-685,-685,-685,-685,-685,-685,-685,-685,-685,-594,816', '-685,-685,-685,874,831,-685,-106,-595,-685,615,118,-685,-685,771,-685', '117,-685,746,-685,615,-685,-685,615,-685,-685,-685,-685,-685,-302,-685', '-685,-685,617,616,620,-302,-302,-302,617,616,631,-302,-302,600,-302', '-685,-98,852,-685,-685,-685,-685,-302,-685,-97,-685,224,-105,-107,1120', '-685,-594,744,-109,-302,-302,-106,-302,-302,-302,-302,-302,742,617,616', '613,567,740,564,563,562,572,565,617,616,622,617,616,626,600,1098,575', '740,601,-302,-302,-302,-302,-302,-302,-302,-302,-302,-302,-302,-302', '-302,-302,-96,221,-302,-302,-302,570,654,1081,1082,737,-302,615,-105', '-302,580,579,583,582,-302,733,-302,576,-302,-302,224,-302,-302,-302', '-302,-302,-583,-302,862,-302,963,408,731,-583,-583,-583,410,409,-583', '-583,-583,-586,-583,-302,-104,730,-302,-302,-586,-302,-583,-302,-583', '-583,-583,840,-113,923,-302,-679,836,-111,-583,-583,837,-583,-583,-583', '-583,-583,725,617,616,613,725,-303,-585,-588,-591,583,582,980,-303,-585', '-588,-591,545,538,711,544,-275,-303,-583,-583,-583,-583,-583,-583,-583', '-583,-583,-583,-583,-583,-583,-583,-586,984,-583,-583,-583,-583,-583', '-583,846,847,-583,988,-583,-583,-583,989,-583,-679,-583,740,-583,-583', '-583,-583,758,-583,-583,-583,-583,-583,991,-583,-302,-583,-303,-585', '-588,-591,-340,-302,-679,262,263,993,-682,-340,995,-583,-302,-589,-583', '-583,-583,-583,-340,-583,-589,-583,997,-685,906,874,-583,213,214,-583', '-685,-685,-685,572,-583,997,-685,-685,-302,-685,224,261,260,575,224', '-302,714,-685,-685,1004,-682,-91,1006,224,-302,106,105,107,108,-685', '-685,-302,-685,-685,-685,-685,-685,-340,224,224,1014,110,109,111,1015', '224,583,582,-589,1018,224,576,224,1023,96,97,-278,245,321,-685,-685', '-685,-685,-685,-685,-685,-685,-685,-685,-685,-685,-685,-685,-302,245', '-685,-685,-685,245,655,245,219,-583,-685,224,-580,-685,219,458,-583', '224,-685,-580,-685,1110,-685,-685,459,-685,-685,-685,-685,-685,605,-685', '-685,-685,659,94,82,85,86,1029,87,89,88,90,949,271,1032,-685,83,93,-685', '-685,648,-100,575,-685,688,647,84,98,99,224,-685,224,224,-109,298,72', '73,74,9,60,1040,220,-583,66,67,-580,224,220,70,-678,68,69,71,30,31,75', '76,643,639,1044,576,740,77,28,27,106,105,107,108,740,1048,19,957,1050', '1052,245,1054,8,48,300,10,110,109,111,100,59,102,101,103,224,104,112', '113,219,96,97,44,45,43,-592,218,-580,1056,219,638,-275,-592,242,-580', '216,642,244,243,-678,636,-592,635,-580,40,640,632,33,607,82,61,62,-593', '599,63,598,35,400,1077,-593,47,83,-678,1078,245,594,1087,789,-593,20', '834,84,1089,507,94,82,85,86,1092,87,89,88,90,949,220,549,834,83,93,548', '-592,224,-580,575,220,65,242,84,98,99,244,243,41,42,298,72,73,74,9,60', '245,1108,535,66,67,529,1111,-593,70,-685,68,69,71,30,31,75,76,271,224', '280,526,576,77,28,27,106,105,107,108,1116,519,19,1117,957,1118,1121', '997,8,48,300,10,110,109,111,100,59,102,101,103,997,104,112,113,-303', '96,97,44,45,43,219,-303,-685,997,219,518,224,525,-76,-685,-303,603,127', '507,-681,1133,523,505,-685,40,605,503,33,1136,740,61,62,219,1138,63', '1140,35,1142,1144,1115,47,567,-685,564,563,562,1144,565,1113,20,492', '223,730,463,94,82,85,86,462,87,89,88,90,460,-303,411,1078,83,93,398', '220,1159,-685,224,220,65,1136,84,98,99,1136,325,41,42,298,72,73,74,9', '60,324,265,215,66,67,-682,-681,220,70,224,68,69,71,30,31,75,76,237,212', '211,210,127,77,28,27,106,105,107,108,794,795,19,997,796,112,113,1136', '8,48,300,10,110,109,111,100,59,102,101,103,1171,104,112,113,1144,96', '97,44,45,43,245,249,250,251,252,262,263,257,258,253,254,-293,238,239', '1144,1144,255,256,-293,40,114,874,33,572,1144,61,62,-293,245,63,224', '35,242,575,248,47,244,243,725,240,241,261,260,246,20,247,271,271,224', '94,82,85,86,219,87,89,88,90,725,507,1110,900,83,93,901,259,583,582,224', '605,65,576,84,98,99,874,-293,41,42,298,72,73,74,9,60,908,909,505,66', '67,224,864,862,70,860,68,69,71,30,31,75,76,121,122,123,124,125,77,28', '27,106,105,107,108,265,855,19,854,220,224,851,644,8,48,300,10,110,109', '111,100,59,102,101,103,919,104,112,113,844,96,97,44,45,43,245,249,250', '251,252,262,263,257,258,253,254,219,238,239,835,834,255,256,597,40,224', ',33,,,61,62,595,,63,,35,242,,248,47,244,243,,240,241,261,260,246,20', '247,,,,94,82,85,86,219,87,89,88,90,,,534,,83,93,,259,,-249,,459,65,', '84,98,99,,220,41,42,298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31', '75,76,121,122,123,124,125,77,28,27,106,105,107,108,,,19,,220,,,644,8', '48,300,10,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', '245,249,250,251,252,262,263,257,258,253,254,,238,239,,,255,256,,40,', ',33,,,61,62,,,63,,35,242,,248,47,244,243,,240,241,261,260,246,20,247', ',,,94,82,85,86,,87,89,88,90,,,,,83,93,,259,,,,,65,,84,98,99,,,41,42', '298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,121,122,123,124', '125,77,28,27,106,105,107,108,,1071,19,564,563,562,,565,8,48,300,10,110', '109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,245,249,250', '251,252,262,263,257,258,253,254,,238,239,,,255,256,,40,,,33,,,61,62', ',,63,,35,242,,248,47,244,243,,240,241,261,260,246,20,247,,,,94,82,85', '86,,87,89,88,90,,,,,83,93,224,259,,,,,65,,84,98,99,,,41,42,298,72,73', '74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,121,122,123,124,125,77', '28,27,106,105,107,108,,1071,19,564,563,562,,565,8,48,300,10,110,109', '111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,245,249,250,251', '252,262,263,257,258,253,254,,238,239,,,255,256,,40,,,33,,,61,62,,,63', ',35,242,,248,47,244,243,,240,241,261,260,246,20,247,,,,94,82,85,86,', '87,89,88,90,,,,,83,93,,259,,,,,65,,84,98,99,,,41,42,298,72,73,74,9,60', ',,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,', ',19,,,,,,8,48,300,10,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,245,249,250,251,252,262,263,257,258,253,254,,238,239,,,255', '256,,40,,,33,,,61,62,,,63,,35,242,,248,47,244,243,,240,241,261,260,246', '20,247,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,259,,,,,65,,84,98,99,', ',41,42,5,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77', '28,27,106,105,107,108,,,19,,,,,,8,48,7,10,110,109,111,100,59,102,101', '103,,104,112,113,,96,97,44,45,43,245,249,250,251,252,262,263,257,258', '253,254,,238,239,,,255,256,,40,,,33,,,61,62,,,63,,35,242,,248,47,244', '243,,240,241,261,260,246,20,247,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',259,,,,,65,,84,98,99,,,41,42,298,72,73,74,9,60,,,,66,67,,,,70,,68,69', '71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,300,10,110', '109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,245,249,250', '251,252,262,263,257,258,253,254,,238,239,,,255,256,,40,,,33,,,61,62', ',,63,,35,242,,248,47,244,243,,240,241,261,260,246,20,247,,,,94,82,85', '86,,87,89,88,90,,,,,83,93,,259,,,,,65,,84,98,99,,,41,42,298,72,73,74', '9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107', '108,,567,19,564,563,562,,565,8,48,300,10,110,109,111,100,59,102,101', '103,,104,112,113,,96,97,44,45,43,567,,564,563,562,,565,,750,,567,,564', '563,562,,565,754,,40,,,33,,,61,62,,,63,567,35,564,563,562,47,565,750', ',,,,,,20,,754,750,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,750,,,65,,84', '98,99,,754,41,42,298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75', '76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,300,10,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,245,249,250,251,252,262', '263,257,258,253,254,,-706,-706,,,255,256,,40,,,33,,,61,62,,245,63,,35', '242,,248,47,244,243,,240,241,261,260,246,20,247,,,,94,82,85,86,,87,89', '88,90,,,242,,83,93,244,243,,240,241,,65,,84,98,99,,,41,42,298,72,73', '74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107', '108,,,19,,,245,,,8,48,300,10,110,109,111,100,59,102,101,103,,104,112', '113,,96,97,44,45,43,245,-706,-706,-706,-706,262,263,242,,-706,-706,244', '243,,240,241,255,256,,40,,,33,,,61,62,,,63,,35,242,,248,47,244,243,', '240,241,261,260,246,20,247,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,567', ',564,563,562,65,565,84,98,99,,,41,42,298,72,73,74,9,60,,,,66,67,,,,70', ',68,69,71,30,31,75,76,750,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48', '300,10,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,245', '249,250,251,252,262,263,257,258,253,254,,-706,-706,,,255,256,,40,,,33', ',,61,62,,,63,,35,242,,248,47,244,243,,240,241,261,260,246,20,247,,,', '94,82,85,86,,87,89,88,90,,,,,83,93,,567,,564,563,562,65,565,84,98,99', ',,41,42,298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,750,', ',,,77,28,27,106,105,107,108,,,19,,,,,,8,48,300,10,110,109,111,100,59', '102,101,103,,104,112,113,,96,97,44,45,43,245,-706,-706,-706,-706,262', '263,,,-706,-706,,,,,,255,256,,40,,,302,,,61,62,,,63,,35,242,,248,47', '244,243,,240,241,261,260,246,20,247,,,,94,82,85,86,,87,89,88,90,,,,', '83,93,,,,,,,65,,84,98,99,,,41,42,298,72,73,74,9,60,,,,66,67,,,,70,,68', '69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,300,10', '110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,245,-706', '-706,-706,-706,262,263,,,-706,-706,,,,,,255,256,,40,,,33,,,61,62,,,63', ',35,242,,248,47,244,243,,240,241,261,260,246,20,247,,,,94,82,85,86,', '87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,298,72,73,74,9,60,', ',,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,', '19,,,,,,8,48,300,10,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,245,-706,-706,-706,-706,262,263,,,-706,-706,,,,,,255,256', ',40,,,33,,,61,62,,,63,,35,242,,248,47,244,243,,240,241,261,260,246,20', '247,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42', '298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27', '106,105,107,108,,,19,,,,,,8,48,300,10,110,109,111,100,59,102,101,103', ',104,112,113,,96,97,44,45,43,245,,,,,,,,,,,,,,,,255,256,,40,,,33,,,61', '62,,,63,,35,242,,248,47,244,243,,240,241,,,246,20,247,,,,94,82,85,86', ',87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,298,72,73,74,9,60', ',,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,', ',19,,,,,,8,48,300,10,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,245,-706,-706,-706,-706,262,263,,,-706,-706,,,,,,255,256', ',40,,,33,,,61,62,,,63,,35,242,,248,47,244,243,,240,241,261,260,246,20', '247,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42', '298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27', '106,105,107,108,,,19,,,,,,8,48,300,10,110,109,111,100,59,102,101,103', ',104,112,113,,96,97,44,45,43,245,-706,-706,-706,-706,262,263,,,-706', '-706,,,,,,255,256,,40,,,33,,,61,62,,,63,,35,242,,248,47,244,243,,240', '241,261,260,246,20,247,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65', ',84,98,99,,,41,42,298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75', '76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,300,10,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,245,249,250,251,252,262', '263,,,253,254,,,,,,255,256,,40,,,33,,,61,62,,,63,,35,242,,248,47,244', '243,,240,241,261,260,246,20,247,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,,,,65,,84,98,99,,,41,42,5,72,73,74,9,60,,,,66,67,,,,70,,68,69,71', '30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,7,10,110,109', '111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,245,249,250,251', '252,262,263,257,,253,254,,,,,,255,256,,40,,,33,,,61,62,,,63,,35,242', ',248,47,244,243,,240,241,261,260,246,20,247,,,,94,82,85,86,,87,89,88', '90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,298,72,73,74,9,60,,,,66,67,', ',,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8', '48,300,10,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', '245,249,250,251,252,262,263,257,258,253,254,,-706,-706,,,255,256,,40', ',,33,,,61,62,,,63,,35,242,,248,47,244,243,,240,241,261,260,246,20,247', ',,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,298', '72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106', '105,107,108,,,19,,,,,,8,48,300,10,110,109,111,100,59,102,101,103,,104', '112,113,,96,97,44,45,43,245,,,,,,,,,,,,,,,,255,256,,40,,,302,,,61,62', ',,63,,35,242,,248,47,244,243,,240,241,,,246,20,247,,,,94,82,85,86,,87', '89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,298,72,73,74,9,60,,,,66', '67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,', ',,,8,48,300,10,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44', '45,43,245,249,250,251,252,262,263,257,258,253,254,,-706,-706,,,255,256', ',40,,,33,,,61,62,,,63,,35,242,,248,47,244,243,,240,241,261,260,246,20', '247,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42', '298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27', '106,105,107,108,,,19,,,,,,8,48,300,10,110,109,111,100,59,102,101,103', ',104,112,113,,96,97,44,45,43,245,,,,,,,,,,,,,,,,255,256,,40,,,33,,,61', '62,,,63,,35,242,,,47,244,243,,240,241,,,,20,,,,,94,82,85,86,,87,89,88', '90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,298,72,73,74,9,60,,,,66,67,', ',,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8', '48,300,10,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', '245,,,,,,,,,,,,,,,,255,256,,40,,,33,,,61,62,,,63,,35,242,,248,47,244', '243,,240,241,,,,20,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,', '84,98,99,,,41,42,298,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75', '76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,300,10,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,245,,,,,,,,,,,,,,,,255,256', ',40,,,33,,,61,62,,,63,,35,242,,248,47,244,243,,240,241,,,,20,,,,,94', '82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,298,72,73', '74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107', '108,,,19,,,,,,8,48,300,10,110,109,111,100,59,102,101,103,,104,112,113', ',96,97,44,45,43,,,,,,,,,,,,,,,,,,,,40,,,302,,,61,62,,,63,,35,,,,47,', ',,,,,,,20,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84', '98,99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107', '108,,,19,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,20,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,118,,,,,117,65,,84,98,99', ',,41,42,72,73,74,,60,,,,66,67,,,,70,,68,69,71,317,318,75,76,,,,,,77', '314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101', '103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62', ',,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72', '73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77', '314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101', '103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61', '62,,,63,,,,287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,', '83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75', '76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,416,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90', ',,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,', ',,,83,93,,,,,,,65,,84,98,99,,,41,42,72,73,74,9,60,,,,66,67,,,,70,,68', '69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,7,10', '110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,', ',,,,,,,,,,,40,,,33,,,61,62,,,63,,35,,,,47,,,,,,,,,20,,,,,94,82,85,86', ',87,89,88,90,,,,,83,93,,,,,,400,65,,84,98,99,,,41,42,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,', '94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67', '41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,', ',,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', ',,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94', '82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41', '42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,', ',,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,', ',,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94,82', '85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42', ',70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,,48', ',,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,', ',,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94,82,85', '86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,72,73,74,9,60,', ',,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,', '19,,,,,,8,48,,10,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,40,,,33,,,61,62,,,63,,35,,,,47,,,,,,,,,20', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,416,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,416,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,', '94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67', '41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,', ',,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', ',,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94', '82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41', '42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236,,,', ',,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', ',,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94', '82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41', '42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236,,,', ',,,48,,,110,109,111,100,59,102,101,103,292,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,289,,287,,47,,,293,,,', ',,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108', ',,19,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44', '45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,', ',,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,', '94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67', '41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,', ',94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67', '41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,', ',,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', ',,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94', '82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41', '42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,', ',,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,', ',,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94,82', '85,86,,87,89,88,90,,,,,83,93,224,,,72,73,74,65,60,84,98,99,66,67,41', '42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236,,,', ',,,48,,,110,109,111,100,59,102,101,103,292,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,289,,287,,47,,,293,,,', ',,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,292,104,112,113,,96,97,44', '45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,289,,287,,47,,,293', ',,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84', '98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105', '107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113', ',96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,', ',,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84', '98,99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96', '97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108', ',,19,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44', '45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,', ',,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,', ',94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67', '41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,292,104,112,113,,96,97,44', '45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,289,,287,,47,,,293', ',,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84', '98,99,66,67,41,494,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,292,104,112,113', ',96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,289,,287', ',47,,,293,,,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72,73', '74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27', '106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,292', '104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63', ',289,,287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93', '224,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75,76', ',,,,,77,28,27,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,', ',,77,28,27,106,105,107,108,,,19,,,,,,,48,,,110,109,111,100,59,102,101', '103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62', ',,63,,,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,', ',65,,84,98,99,,,41,42,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75', '76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,,10,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,40,,', '33,,,61,62,,,63,,35,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89,88,90,,', ',,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75', '76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,,48,,,110,109,111,100,59', '102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235', ',,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89,88,90,,,,,83', '93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75,76', ',,,,,77,28,27,106,105,107,108,,,19,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235', ',,61,62,,,63,,,,287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87,89,88,90', ',,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229', ',,235,,,61,62,,,63,,708,,287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87', '89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69', '71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110', '109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,', ',,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87', '89,88,90,,,,,83,93,,,,,,,65,,84,98,99,-687,,41,42,,,,-687,-687,-687', ',,-687,-687,-687,,-687,,,,,,,,-687,-687,-687,-687,-687,,,,,,,,-687,-687', ',-687,-687,-687,-687,-687,,,,,,,,,,,,,,,,,,,,,,,-687,-687,-687,-687', '-687,-687,-687,-687,-687,-687,-687,-687,-687,-687,,,-687,-687,-687,', ',-687,,,-687,,,-687,-687,,-687,,-687,,-687,,-687,-687,,-687,-687,-687', '-687,-687,,-687,-687,-687,,,,,,,,,,,,,,-687,,,-687,-687,-687,-687,,-687', ',-687,,72,73,74,-687,60,,,,66,67,,,,70,,68,69,71,317,318,75,76,,,,,', '77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101', '103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62', ',,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,', ',,65,,84,98,99,,,41,42,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31', '75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,,10,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,40,,', '33,,,61,62,,,63,,35,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89,88,90,,', ',,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75', '76,,,,,,77,28,27,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59', '102,101,103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,289,,287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87', '89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69', '71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236,,,,,,,48,,,110,109', '111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,', ',,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89', '88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71', '317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109', '111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,', ',,,229,,,235,,,61,62,,,63,,808,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87', '89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69', '71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,,48,,,110,109', '111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,', ',,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89', '88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,72,73,74,9,60,,,,66,67,,', ',70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8', '48,,10,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,', ',,,,,,,,,,,,,,,,,,40,,,33,,,61,62,,,63,,35,,,,47,,,,,,,,,20,,,,,94,82', '85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42', ',70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,', ',,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', ',,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94', '82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41', '42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,', ',94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67', '41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,', ',94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67', '41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,', '236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44', '45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,-686,,41,42', ',,,-686,-686,-686,,,-686,-686,-686,,-686,,,,,,,,-686,-686,-686,-686', '-686,,,,,,,,-686,-686,,-686,-686,-686,-686,-686,,,,,,,,,,,,,,,,,,,,', ',,-686,-686,-686,-686,-686,-686,-686,-686,-686,-686,-686,-686,-686,-686', ',,-686,-686,-686,,,-686,,,-686,,,-686,-686,,-686,,-686,,-686,,-686,-686', ',-686,-686,-686,-686,-686,,-686,-686,-686,,,,,,,,,,,,,,-686,,,-686,-686', '-686,-686,,-686,,-686,,72,73,74,-686,60,,,,66,67,,,,70,,68,69,71,317', '318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111', '100,59,102,101,103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,', ',,229,,,235,,,61,62,,,63,,708,,,,47,,,293,,,,,,234,,,,,94,290,85,86', ',87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68', '69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,', ',110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,', ',,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85', '86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70', ',68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,', '48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,', ',,,,,,,,,,,,,,,,229,,,235,538,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94', '82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41', '42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236,,,', ',,,48,,,110,109,111,100,59,102,101,103,292,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,289,,287,,47,,,293,,,', ',,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98', '99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107', '108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,292,104,112,113', ',96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,', '293,,,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65', '60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106', '105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,292,104', '112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,289', ',287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72', '73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77', '314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101', '103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62', ',,63,,289,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,', ',,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,,', ',,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,', ',,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,', '61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93', ',,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75,76,,,', ',,77,28,27,106,105,107,108,,,19,,,,,,,48,,,110,109,111,100,59,102,101', '103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62', ',,63,,,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,', ',65,,84,98,99,-258,,41,42,,,,-258,-258,-258,,,-258,-258,-258,567,-258', '564,563,562,572,565,,,-258,-258,-258,,,,575,,,,,,-258,-258,,-258,-258', '-258,-258,-258,567,,564,563,562,572,565,567,570,564,563,562,572,565', ',575,,580,579,583,582,,575,,576,,567,,564,563,562,572,565,-258,,,,570', ',,-258,575,,,570,271,-258,,583,582,224,,,576,,583,582,,,,576,,,570,', ',,,-258,-258,,,580,579,583,582,,,,576,,,,-258,,,-258,,72,73,74,-258', '60,,,,66,67,-258,,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105', '107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113', ',96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,', ',,,,,,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99', '-258,,41,42,,,,-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,,271,-258,,,-258,-258,,-258,,-258', ',-258,,-258,-258,,-258,-258,-258,-258,-258,,-258,-258,-258,,,,,,,,,', ',,,,-258,,,-258,-258,,-258,,-258,72,73,74,,60,,-258,,66,67,,,,70,,68', '69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,', ',110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,', ',,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85', '86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70', ',68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236,,,,,,,48,', ',110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,', ',,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85', '86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70', ',68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,', '48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,', ',,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82', '85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42', ',70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,', ',,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43', ',,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94', '82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41', '42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45', '43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,', ',94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67', '41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,', '236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,44', '45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,-418,,41,42', ',,,-418,-418,-418,,,-418,-418,-418,,-418,,,,,,,,-418,-418,-418,-418', ',,,,,,,,-418,-418,,-418,-418,-418,-418,-418,,,,,,,,,,,,,,,,,,,,,,,-418', '-418,-418,-418,-418,-418,-418,-418,-418,-418,-418,-418,-418,-418,,,-418', '-418,-418,,,-418,,271,-418,,,-418,-418,,-418,,-418,,-418,,-418,-418', ',-418,-418,-418,-418,-418,-309,-418,-418,-418,,,,-309,-309,-309,,,-309', '-309,-309,,-309,-418,,,-418,-418,,-418,-309,-418,-309,-309,,,,,-418', ',,,-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,,280,-309,,,-309,-309,,-309,,-309,,-309,,-309,-309,,-309', '-309,-309,-309,-309,,-309,,-309,,,,,,,,,,,,,,-309,,,-309,-309,,-309', ',-309,72,73,74,,60,,-309,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77', '28,27,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103', '292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62', ',,63,,289,,287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,', '83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,30,31,75', '76,,,,,,77,28,27,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59', '102,101,103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,289,,287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87', '89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69', '71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236,,,,,,,48,,,110,109', '111,100,59,102,101,103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,', ',,,,,,229,,,235,,,61,62,,,63,,289,,287,,47,,,293,,,,,,234,,,,,94,290', '85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,,,41,42,72,73,74,9,60', ',,,66,67,,,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,', ',19,,,,,,8,48,7,10,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,40,,,33,,,61,62,,,63,,35,,,,47,,,,,,,,,20', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,236', ',,,,,,48,,,110,109,111,100,59,102,101,103,292,104,112,113,,96,97,44', '45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,289,,287,,47,,,293', ',,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84', '98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105', '107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101,103,292,104,112', '113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,708,', '287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,,83,93,,,,72', '73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77', '314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100,59,102,101', '103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61', '62,,,63,,,,287,,47,,,293,,,,,,234,,,,,94,290,85,86,,87,89,88,90,,,,', '83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318,75', '76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,', ',,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,', ',,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,', ',,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,', ',,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229,', ',235,,,61,62,,,63,,,,,,47,,,,,,,,,234,,,,,94,82,85,86,,87,89,88,90,', ',,,83,93,,,,,,,65,,84,98,99,,,41,42,72,73,74,9,60,,,,66,67,,,,70,,68', '69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,300,10', '110,109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,', ',,,,,,,,,,,40,,,33,,,61,62,,,63,,35,,,,47,,,,,,,,,20,,,,,94,82,85,86', ',87,89,88,90,,,,,83,93,,,,,,400,65,,84,98,99,,,41,42,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,234', ',,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66', '67,41,42,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108', ',,236,,,,,,,48,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97', '44,45,43,,,,,,,,,,,,,,,,,,,,229,,,235,,,61,62,,,63,,708,,,,47,,,,,,', ',,234,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98,99,-294', ',41,42,,,,-294,-294,-294,,,-294,-294,-294,,-294,,,,,,,,-294,,-294,-294', '-294,,,,106,105,107,108,-294,-294,,-294,-294,-294,-294,-294,,,,,110', '109,111,,,,,,,,,,,96,97,,,321,-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', ',94,82,85,86,,87,89,88,90,,,,-294,83,93,-294,-294,-294,-294,,-294,688', '-294,84,98,99,,-294,72,73,74,9,60,,,,66,67,,,,70,,68,69,71,30,31,75', '76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,8,48,,10,110,109,111,100', '59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,40,,', '33,,,61,62,,,63,,35,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89,88,90,,', ',,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109,111,100', '59,102,101,103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,,,,,229', ',,235,,,61,62,,,63,,289,,,,47,,,293,,,,,,234,,,,,94,290,85,86,,87,89', '88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71', '317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,48,,,110,109', '111,100,59,102,101,103,292,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,', ',,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,293,,,,,,234,,,,,94,290,85,86', ',87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68', '69,71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,,48,,,110', '109,111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,', ',,,,,,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87', '89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69', '71,30,31,75,76,,,,,,77,28,27,106,105,107,108,,,19,,,,,,,48,,,110,109', '111,100,59,102,101,103,,104,112,113,,96,97,44,45,43,,,,,,,,,,,,,,,,', ',,,229,,,235,,,61,62,,,63,,,,,,47,,,,,,,,,20,,,,,94,82,85,86,,87,89', '88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,41,42,,70,,68,69,71', '317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110', '109,111,100,59,102,101,103,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,', ',,,,311,,,307,,,61,62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88', '90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110,109,111', '100,59,102,101,103,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,311', ',,307,,,61,62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90,,,,,83', '93,,,,72,73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318,75,76,,', ',,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,311,,,307,,,61', '62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72', '73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318,75,76,,,,,,77,314', '320,106,105,107,108,,,236,,,,,,,315,,,110,109,111,100,59,102,101,103', ',104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,311,,,307,,,61,62,,,63', ',306,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72,73,74', '65,60,84,98,99,66,67,,,,70,,68,69,71,317,318,75,76,,,,,,77,314,320,106', '105,107,108,,,236,,,,,,,315,,,110,109,111,100,59,102,101,103,,104,112', '113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,311,,,235,,,61,62,,,63,,,567,,564', '563,562,572,565,,,,,,,,,575,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,323', ',570,65,,84,98,99,72,73,74,,60,583,582,,66,67,576,,,70,,68,69,71,317', '318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110,109', '111,100,59,102,101,103,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,', '360,,,33,,,61,62,,,63,,35,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90', ',,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318,75', '76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110,109,111,365', '59,102,101,366,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,372,,,367,', ',235,,,61,62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90,,,,,83', '93,,,,72,73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318,75,76,,', ',,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110,109,111,365,59,102', '101,366,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,367,,,235,,,61', '62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72', '73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318,75,76,,,,,,77,314', '320,106,105,107,108,,,236,,,,,,,315,,,110,109,111,100,59,102,101,103', ',104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,311,,,235,,,61,62,,,63', ',,567,,564,563,562,572,565,,,,,,,,,575,,94,82,85,86,,87,89,88,90,,,', ',83,93,,,,521,,570,65,,84,98,99,72,73,74,,60,583,582,,66,67,576,,,70', ',68,69,71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,', '315,,,110,109,111,100,59,102,101,103,,104,112,113,,96,97,,,321,,,,,', ',,,,,,,,,,,,,,1058,,,235,,,61,62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86', ',87,89,88,90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,,,,70,,68,69', '71,317,318,75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110', '109,111,100,59,102,101,103,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,', ',,,,311,,,307,,,61,62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88', '90,,,,,83,93,,,,72,73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318', '75,76,,,,,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110,109,111', '100,59,102,101,103,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,311', ',,307,,,61,62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90,,,,,83', '93,,,,72,73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318,75,76,,', ',,,77,314,320,106,105,107,108,,,236,,,,,,,315,,,110,109,111,100,59,102', '101,103,,104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,1064,,,235,,,61', '62,,,63,,,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,72', '73,74,65,60,84,98,99,66,67,,,,70,,68,69,71,317,318,75,76,,,,,,77,314', '320,106,105,107,108,,,236,,,,,,,315,,,110,109,111,100,59,102,101,103', ',104,112,113,,96,97,,,321,,,,,,,,,,,,,,,,,,,,1058,,,235,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,65,,84,98', '99,177,188,178,201,174,194,184,183,204,205,199,182,181,176,202,206,207', '186,175,189,193,195,187,180,,,,196,203,198,197,190,200,185,173,192,191', ',,,,,172,179,170,171,167,168,169,130,132,,,131,,,,,,,,161,162,,158,140', '141,142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,,,,,,,,,155,154', ',139,160,157,156,165,152,153,147,145,137,159,138,,,166,94,,,,,,,,,,', ',,,93,177,188,178,201,174,194,184,183,204,205,199,182,181,176,202,206', '207,186,175,189,193,195,187,180,,,,196,203,198,197,190,200,185,173,192', '191,,,,,,172,179,170,171,167,168,169,130,132,,,131,,,,,,,,161,162,,158', '140,141,142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,,,,,,,,,155', '154,,139,160,157,156,165,152,153,147,145,137,159,138,,,166,94,,,,,,', ',,,,,,,93,177,188,178,201,174,194,184,183,204,205,199,182,181,176,202', '206,207,186,175,189,193,195,187,180,,,,196,203,198,197,190,200,185,173', '192,191,,,,,,172,179,170,171,167,168,169,130,132,,,131,,,,,,,,161,162', ',158,140,141,142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,,,,,', ',,,155,154,,139,160,157,156,165,152,153,147,145,137,159,138,,,166,94', ',,,,,,,,,,,,,93,177,188,178,201,174,194,184,183,204,205,199,182,181', '176,202,206,207,186,175,189,193,195,187,180,,,,196,203,198,197,190,200', '185,173,192,191,,,,,,172,179,170,171,167,168,169,130,132,129,,131,,', ',,,,,161,162,,158,140,141,142,149,146,148,,,143,144,,,,163,164,150,151', ',,,,,,,,,,,,,155,154,,139,160,157,156,165,152,153,147,145,137,159,138', ',,166,94,106,105,107,108,,,,,,,,,,93,,,110,109,111,689,,,567,692,564', '563,562,572,565,96,97,,,321,,,,575,,,,,,,,,,,,,,,,691,,,673,,,570,671', ',,672,,,,,580,579,583,582,,,,576,,,,690,,,,94,82,85,86,,87,89,88,90', ',,,,83,93,106,105,107,108,,,688,,84,98,99,,,677,678,,110,109,111,689', ',,567,692,564,563,562,572,565,96,97,,,321,,,,575,,,,,,,,,,,,,,,,691', ',,673,,,570,671,,,672,,943,,,580,579,583,582,,,,576,,,,690,,,,94,82', '85,86,,87,89,88,90,,,,,83,93,106,105,107,108,,,688,,84,98,99,,,677,678', ',110,109,111,689,,,567,692,564,563,562,572,565,96,97,,,321,,,,575,,', ',,,,,,,,,,,,,691,,,673,,,570,671,,,672,,,,,580,579,583,582,,,,576,,', ',690,,,,94,82,85,86,,87,89,88,90,,,,,83,93,106,105,107,108,,,688,,84', '98,99,,,677,678,,110,109,111,689,,,567,692,564,563,562,572,565,96,97', ',,321,,,,575,,,,,,,,,,,,,,,,691,,,673,,,570,671,,,672,,,,,,,583,582', ',,,576,,,,690,,,,94,82,85,86,,87,89,88,90,,,,,83,93,,,,,,,688,,84,98', '99,,,677,678,177,188,178,201,174,194,184,183,204,205,199,182,181,176', '202,206,207,186,175,189,193,195,187,180,,,,196,203,198,197,190,200,185', '173,192,191,,,,,,172,179,170,171,167,168,169,130,132,,,131,,,,,,,,161', '162,,158,140,141,142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,', ',,,,,,,155,154,,139,160,157,156,165,152,153,147,145,137,159,138,,,166', '106,105,107,108,,,567,,564,563,562,572,565,,,,110,109,111,689,,575,', '692,949,,,,,96,97,,,321,575,,,,,,,,,570,,,,,,,,,,691,583,582,673,,,576', '671,,,672,,943,,,,,,,576,,,,,,,690,,,,94,950,85,86,,87,89,88,90,,,,', '83,93,106,105,107,108,,,688,,84,98,99,,,677,678,,110,109,111,689,,,567', '692,564,563,562,572,565,96,97,,,321,,,,575,,,,,,,,,,,,,,,,691,,,673', ',,570,671,,,672,,,,,580,579,583,582,,,,576,,,,690,,,,94,82,85,86,,87', '89,88,90,,,,,83,93,,,,,,,688,,84,98,99,,,677,678,177,188,178,201,174', '194,184,183,204,205,199,182,181,176,202,206,207,186,175,189,193,195', '187,180,,,,196,203,198,383,382,384,381,173,192,191,,,,,,172,179,170', '171,378,379,380,376,132,102,101,377,,104,,,,,,161,162,,158,140,141,142', '149,146,148,,,143,144,,,,163,164,150,151,,,,,,388,,,,,,,,155,154,,139', '160,157,156,165,152,153,147,145,137,159,138,,,166,106,105,107,108,,', '567,,564,563,562,572,565,,,,110,109,111,689,,575,,692,,,,,,96,97,,,321', ',,,,,,,,,570,,,,,,,,,,691,583,582,673,,,576,671,,,672,,,,,,,,,,,,,,', ',690,,,,94,82,85,86,,87,89,88,90,,,,,83,93,106,105,107,108,,,688,,84', '98,99,,,677,678,,110,109,111,689,,,567,692,564,563,562,572,565,96,97', ',,321,,,,575,,,,,,,,,,,,,,,,691,,,673,,,570,671,,,672,,,,,580,579,583', '582,,,,576,,,,690,,,,94,82,85,86,,87,89,88,90,,,,,83,93,106,105,107', '108,,,688,,84,98,99,,,677,678,,110,109,111,689,,,567,692,564,563,562', '572,565,96,97,,,321,,,,575,,,,,,,,,,,,,,,,691,,,673,,,570,671,,,672', ',,,,,,583,582,,,,576,,,,690,,,,94,82,85,86,,87,89,88,90,,,,,83,93,106', '105,107,108,,,688,,84,98,99,,,677,678,,110,109,111,689,,,567,692,564', '563,562,572,565,96,97,,,321,,,,575,,,,,,,,,,,,,,,,691,,,673,,,570,671', ',,672,,1028,,,,,583,582,,,,576,,,,690,,,,94,82,85,86,,87,89,88,90,,', ',,83,93,106,105,107,108,,,688,,84,98,99,,,677,678,,110,109,111,689,', ',,692,949,,,,,96,97,,,321,575,,,,,,,,,,,,,,,,,,,691,,,673,,,,671,,,672', ',943,,,,,,,576,,,,,,,690,,,,94,950,85,86,,87,89,88,90,,,,,83,93,106', '105,107,108,,,688,,84,98,99,,,677,678,,110,109,111,689,,,,692,949,,', ',,96,97,,,321,575,,,,,,,,,,,,,,,,,,,691,,,673,,,,671,,,672,,943,,,,', ',,576,,,,,,,690,,,,94,950,85,86,,87,89,88,90,,,,,83,93,106,105,107,108', ',,688,,84,98,99,,,677,678,,110,109,111,689,,,567,692,564,563,562,572', '565,96,97,,,321,,,,575,,,,,,,,,,,,,,,,691,,,673,,,570,671,,,672,,,,', '580,579,583,582,,,,576,,,,690,,,,94,82,85,86,,87,89,88,90,,,,,83,93', '106,105,107,108,,,688,,84,98,99,,,677,678,,110,109,111,689,,,567,692', '564,563,562,572,565,96,97,,,321,,,,575,,,,,,,,,,,,,,,,691,,,673,,,570', '671,,,672,,943,,,,,583,582,,,,576,,,,690,,,,94,82,85,86,,87,89,88,90', ',,,,83,93,106,105,107,108,,,688,,84,98,99,,,677,678,,110,109,111,689', ',,,692,,,,,,96,97,,,321,,,,,,,,106,105,107,108,,,,,,,,,691,,,673,110', '109,111,671,,,672,,,,,,,96,97,,,321,,,,,690,,,,94,82,85,86,,87,89,88', '90,,,,,83,93,,,,,,,688,,84,98,99,,,677,678,,,,,,,,,,,,94,82,85,86,,87', '89,88,90,,,,,83,93,106,105,107,108,,,688,,84,98,99,,,,,,110,109,111', '660,442,,,661,,,,,,96,97,161,162,321,158,140,141,142,149,146,148,,,143', '144,,,,163,164,150,151,,,,,,271,,,,,,,,155,154,,139,160,157,156,165', '152,153,147,145,137,159,138,,,166,94,82,85,86,,87,89,88,90,,,,,83,93', '718,442,,,719,,688,,84,98,99,,161,162,,158,140,141,142,149,146,148,', ',143,144,,,,163,164,150,151,,,,,,271,,,,,,,,155,154,,139,160,157,156', '165,152,153,147,145,137,159,138,721,449,166,,722,,,,,,,,161,162,,158', '140,141,142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,271,,,,,,', ',155,154,,139,160,157,156,165,152,153,147,145,137,159,138,445,449,166', ',444,,,,,,,,161,162,,158,140,141,142,149,146,148,,,143,144,,,,163,164', '150,151,,,,,,271,,,,,,,,155,154,,139,160,157,156,165,152,153,147,145', '137,159,138,813,449,166,,812,,,,,,,,161,162,,158,140,141,142,149,146', '148,,,143,144,,,,163,164,150,151,,,,,,271,,,,,,,,155,154,,139,160,157', '156,165,152,153,147,145,137,159,138,490,442,166,,491,,,,,,,,161,162', ',158,140,141,142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,,,,,', ',,,155,154,,139,160,157,156,165,152,153,147,145,137,159,138,1148,449', '166,,1147,,,,,,,,161,162,,158,140,141,142,149,146,148,,,143,144,,,,163', '164,150,151,,,,,,271,,,,,,,,155,154,,139,160,157,156,165,152,153,147', '145,137,159,138,1151,442,166,,1152,,,,,,,,161,162,,158,140,141,142,149', '146,148,,,143,144,,,,163,164,150,151,,,,,,271,,,,,,,,155,154,,139,160', '157,156,165,152,153,147,145,137,159,138,660,442,166,,661,,,,,,,,161', '162,,158,140,141,142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,271', ',,,,,,,155,154,,139,160,157,156,165,152,153,147,145,137,159,138,662', '449,166,,663,,,,,,,,161,162,,158,140,141,142,149,146,148,,,143,144,', ',,163,164,150,151,,,,,,271,,,,,,,,155,154,,139,160,157,156,165,152,153', '147,145,137,159,138,777,449,166,,778,,,,,,,,161,162,,158,140,141,142', '149,146,148,,,143,144,,,,163,164,150,151,,,,,,271,,,,,,,,155,154,,139', '160,157,156,165,152,153,147,145,137,159,138,810,442,166,,811,,,,,,,', '161,162,,158,140,141,142,149,146,148,,,143,144,,,,163,164,150,151,,', ',,,271,,,,,,,,155,154,,139,160,157,156,165,152,153,147,145,137,159,138', '780,449,166,,781,,,,,,,,161,162,,158,140,141,142,149,146,148,,,143,144', ',,,163,164,150,151,,,,,,271,,,,,,,,155,154,,139,160,157,156,165,152', '153,147,145,137,159,138,438,442,166,,439,,,,,,,,161,162,,158,140,141', '142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,271,,,,,,,,155,154', ',139,160,157,156,165,152,153,147,145,137,159,138,775,442,166,,776,,', ',,,,,161,162,,158,140,141,142,149,146,148,,,143,144,,,,163,164,150,151', ',,,,,271,,,,,,,,155,154,,139,160,157,156,165,152,153,147,145,137,159', '138,490,442,166,,491,,,,,,,,161,162,,158,140,141,142,149,146,148,,,143', '144,,,,163,164,150,151,,,,,,271,,,,,,,,155,154,,139,160,157,156,165', '152,153,147,145,137,159,138,1153,449,166,,1154,,,,,,,,161,162,,158,140', '141,142,149,146,148,,,143,144,,,,163,164,150,151,,,,,,271,,,,,,,,155', '154,,139,160,157,156,165,152,153,147,145,137,159,138,662,449,166,,663', ',,,,,,,161,162,,158,140,141,142,149,146,148,,,143,144,,,,163,164,150', '151,,,,,,271,,,,,,,,155,154,,139,160,157,156,165,152,153,147,145,137', '159,138,,567,166,564,563,562,572,565,,567,,564,563,562,572,565,575,', ',,,,,,575,,,,,,,,,,,,,,570,552,,,,,,,570,580,579,583,582,,,,576,580', '579,583,582,,,,576' ] racc_action_table = arr = ::Array.new(27126, 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 = [ '813,460,349,928,937,775,358,813,813,813,728,728,64,813,813,395,813,19', '958,943,778,1061,378,777,813,813,396,656,577,378,423,735,776,807,913', '833,813,813,773,813,813,813,813,813,1062,1065,577,1116,983,1009,937', '1154,917,713,296,598,651,917,19,296,460,958,928,357,361,713,813,813', '813,813,813,813,813,813,813,813,813,813,813,813,809,395,813,813,813', '778,813,378,777,423,813,1166,396,813,833,1009,608,608,813,64,813,943', '813,813,728,813,813,813,813,813,100,813,813,813,775,358,589,100,100', '100,349,350,100,100,100,349,100,813,1154,778,813,813,777,813,100,813', '100,100,100,1061,735,776,813,913,1061,813,100,100,1151,100,100,100,100', '100,1152,1153,773,1005,1007,773,646,773,1062,1065,598,1116,983,1062', '1065,1154,1116,983,357,361,1154,637,100,100,100,100,100,100,100,100', '100,100,100,100,100,100,608,592,100,100,100,608,100,100,697,592,100', '1028,354,100,100,630,100,354,100,1166,100,836,100,100,1166,100,100,100', '100,100,589,100,663,100,1013,589,1013,454,454,663,663,663,1153,837,663', '663,663,100,663,350,100,100,100,100,350,100,663,100,663,663,663,836', '100,612,612,100,628,719,663,663,439,663,663,663,663,663,1151,620,951', '837,718,1151,1152,1153,316,1005,1007,1152,1153,1041,1005,1007,924,1028', '818,697,951,924,663,663,663,663,663,663,663,663,663,663,663,663,663', '663,43,43,663,663,663,439,663,663,321,321,663,691,671,663,663,691,663', '439,663,454,663,719,663,663,26,663,663,663,663,663,444,663,811,663,718', '438,316,444,444,444,610,1041,1041,444,444,612,444,663,671,593,663,663', '663,663,444,663,24,663,1041,316,623,719,663,24,719,663,444,444,810,444', '444,444,444,444,718,591,719,718,43,43,721,869,438,386,590,230,321,321', '26,718,386,811,343,660,438,343,444,444,444,444,444,444,444,444,444,444', '444,444,444,444,586,26,444,444,444,384,444,325,661,834,444,24,384,444', '623,623,584,810,444,625,444,390,444,444,623,444,444,444,444,444,391', '444,662,444,230,721,721,869,386,662,662,662,660,581,662,662,662,444', '662,734,444,444,734,444,325,444,662,662,662,662,662,228,444,1127,1127', '444,325,661,662,662,384,662,662,662,662,662,721,869,340,721,869,340', '392,625,625,390,390,390,397,14,14,721,869,625,391,391,391,569,662,662', '662,662,662,662,662,662,662,662,662,662,662,662,227,645,662,662,662', '1158,662,662,228,39,662,1034,3,662,662,1158,662,3,662,560,662,393,662', '662,394,662,662,662,662,662,812,662,662,662,392,392,392,812,812,812', '397,397,397,812,812,840,812,662,645,840,662,662,662,662,812,662,39,662', '1069,227,645,1069,662,38,559,662,812,812,39,812,812,812,812,812,558', '1034,1034,1034,789,556,789,789,789,789,789,393,393,393,394,394,394,367', '1034,789,555,367,812,812,812,812,812,812,812,812,812,812,812,812,812', '812,38,17,812,812,812,789,812,1008,1008,554,812,509,38,812,789,789,789', '789,812,542,812,789,812,812,541,812,812,812,812,812,103,812,856,812', '859,129,540,103,103,103,129,129,103,103,103,383,103,812,17,539,812,812', '383,812,103,812,103,103,103,670,17,789,812,366,670,812,103,103,670,103', '103,103,103,103,868,509,509,509,530,601,382,381,380,740,740,872,601', '382,381,380,339,527,509,339,875,601,103,103,103,103,103,103,103,103', '103,103,103,103,103,103,383,876,103,103,103,366,103,103,674,674,103', '883,366,103,103,884,103,366,103,885,103,366,103,103,887,103,103,103', '103,103,890,103,722,103,601,382,381,380,49,722,366,46,46,891,722,49', '893,103,722,379,103,103,103,103,49,103,379,103,894,445,761,761,103,348', '348,103,445,445,445,737,366,896,445,445,781,445,899,46,46,737,522,781', '520,445,445,904,781,517,907,516,781,846,846,846,846,445,445,722,445', '445,445,445,445,49,500,496,914,846,846,846,916,495,737,737,379,920,921', '737,922,926,846,846,927,472,846,445,445,445,445,445,445,445,445,445', '445,445,445,445,445,781,471,445,445,445,470,445,469,226,377,445,938', '376,445,1109,226,377,939,445,376,445,1109,445,445,226,445,445,445,445', '445,1109,445,445,445,456,846,846,846,846,942,846,846,846,846,843,446', '944,445,846,846,445,445,437,445,843,445,846,436,846,846,846,952,445', '953,955,445,798,798,798,798,798,798,956,226,377,798,798,376,434,1109', '798,365,798,798,798,798,798,798,798,424,420,964,843,965,798,798,798', '798,798,798,798,966,968,798,843,969,970,467,972,798,798,798,798,798', '798,798,798,798,798,798,798,973,798,798,798,16,798,798,798,798,798,308', '16,365,974,422,417,415,308,467,365,16,422,467,467,365,414,308,412,365', '798,422,406,798,371,80,798,798,309,362,798,360,798,356,1002,309,798', '80,365,1003,468,355,1017,1022,309,798,1026,80,1027,344,798,798,798,798', '1030,798,798,798,798,1032,16,342,1033,798,798,341,308,337,365,1032,422', '798,468,798,798,798,468,468,798,798,588,588,588,588,588,588,331,1055', '329,588,588,322,1058,309,588,780,588,588,588,588,588,588,588,320,315', '314,311,1032,588,588,588,588,588,588,588,1064,305,588,1067,1032,1068', '1073,1074,588,588,588,588,588,588,588,588,588,588,588,588,1075,588,588', '588,526,588,588,588,588,588,310,526,780,1076,369,304,303,310,301,780', '526,369,300,288,780,1090,310,285,780,588,369,284,588,1093,1099,588,588', '1063,1102,588,1103,588,1104,1105,1063,588,754,780,754,754,754,1107,754', '1063,588,270,236,1112,232,588,588,588,588,231,588,588,588,588,229,526', '208,1126,588,588,114,310,1132,780,48,369,588,1134,588,588,588,1135,40', '588,588,585,585,585,585,585,585,37,22,15,585,585,1147,1148,1063,585', '1150,585,585,585,585,585,585,585,21,13,12,10,7,585,585,585,585,585,585', '585,616,616,585,1156,616,616,616,1160,585,585,585,585,585,585,585,585', '585,585,585,585,1162,585,585,585,1163,585,585,585,585,585,21,21,21,21', '21,21,21,21,21,21,21,312,21,21,1164,1165,21,21,312,585,1,729,585,1044', '1176,585,585,312,727,585,736,585,21,1044,21,585,21,21,724,21,21,21,21', '21,585,21,723,720,717,585,585,585,585,1057,585,585,585,585,715,707,1057', '752,585,585,753,21,1044,1044,755,1057,585,1044,585,585,585,763,312,585', '585,962,962,962,962,962,962,769,770,705,962,962,774,703,702,962,701', '962,962,962,962,962,962,962,514,514,514,514,514,962,962,962,962,962', '962,962,696,694,962,693,1057,783,690,427,962,962,962,962,962,962,962', '962,962,962,962,962,787,962,962,962,672,962,962,962,962,962,427,427', '427,427,427,427,427,427,427,427,427,359,427,427,667,665,427,427,359', '962,664,,962,,,962,962,359,,962,,962,427,,427,962,427,427,,427,427,427', '427,427,962,427,,,,962,962,962,962,326,962,962,962,962,,,326,,962,962', ',427,,427,,326,962,,962,962,962,,359,962,962,863,863,863,863,863,863', ',,,863,863,,,,863,,863,863,863,863,863,863,863,336,336,336,336,336,863', '863,863,863,863,863,863,,,863,,326,,,433,863,863,863,863,863,863,863', '863,863,863,863,863,,863,863,863,,863,863,863,863,863,433,433,433,433', '433,433,433,433,433,433,433,,433,433,,,433,433,,863,,,863,,,863,863', ',,863,,863,433,,433,863,433,433,,433,433,433,433,433,863,433,,,,863', '863,863,863,,863,863,863,863,,,,,863,863,,433,,,,,863,,863,863,863,', ',863,863,235,235,235,235,235,235,,,,235,235,,,,235,,235,235,235,235', '235,235,235,6,6,6,6,6,235,235,235,235,235,235,235,,988,235,988,988,988', ',988,235,235,235,235,235,235,235,235,235,235,235,235,,235,235,235,,235', '235,235,235,235,486,486,486,486,486,486,486,486,486,486,486,,486,486', ',,486,486,,235,,,235,,,235,235,,,235,,235,486,,486,235,486,486,,486', '486,486,486,486,235,486,,,,235,235,235,235,,235,235,235,235,,,,,235', '235,486,486,,,,,235,,235,235,235,,,235,235,1060,1060,1060,1060,1060', '1060,,,,1060,1060,,,,1060,,1060,1060,1060,1060,1060,1060,1060,299,299', '299,299,299,1060,1060,1060,1060,1060,1060,1060,,1120,1060,1120,1120', '1120,,1120,1060,1060,1060,1060,1060,1060,1060,1060,1060,1060,1060,1060', ',1060,1060,1060,,1060,1060,1060,1060,1060,282,282,282,282,282,282,282', '282,282,282,282,,282,282,,,282,282,,1060,,,1060,,,1060,1060,,,1060,', '1060,282,,282,1060,282,282,,282,282,282,282,282,1060,282,,,,1060,1060', '1060,1060,,1060,1060,1060,1060,,,,,1060,1060,,282,,,,,1060,,1060,1060', '1060,,,1060,1060,987,987,987,987,987,987,,,,987,987,,,,987,,987,987', '987,987,987,987,987,,,,,,987,987,987,987,987,987,987,,,987,,,,,,987', '987,987,987,987,987,987,987,987,987,987,987,,987,987,987,,987,987,987', '987,987,961,961,961,961,961,961,961,961,961,961,961,,961,961,,,961,961', ',987,,,987,,,987,987,,,987,,987,961,,961,987,961,961,,961,961,961,961', '961,987,961,,,,987,987,987,987,,987,987,987,987,,,,,987,987,,961,,,', ',987,,987,987,987,,,987,987,127,127,127,127,127,127,,,,127,127,,,,127', ',127,127,127,127,127,127,127,,,,,,127,127,127,127,127,127,127,,,127', ',,,,,127,127,127,127,127,127,127,127,127,127,127,127,,127,127,127,,127', '127,127,127,127,537,537,537,537,537,537,537,537,537,537,537,,537,537', ',,537,537,,127,,,127,,,127,127,,,127,,127,537,,537,127,537,537,,537', '537,537,537,537,127,537,,,,127,127,127,127,,127,127,127,127,,,,,127', '127,,537,,,,,127,,127,127,127,,,127,127,980,980,980,980,980,980,,,,980', '980,,,,980,,980,980,980,980,980,980,980,,,,,,980,980,980,980,980,980', '980,,,980,,,,,,980,980,980,980,980,980,980,980,980,980,980,980,,980', '980,980,,980,980,980,980,980,815,815,815,815,815,815,815,815,815,815', '815,,815,815,,,815,815,,980,,,980,,,980,980,,,980,,980,815,,815,980', '815,815,,815,815,815,815,815,980,815,,,,980,980,980,980,,980,980,980', '980,,,,,980,980,,815,,,,,980,,980,980,980,,,980,980,986,986,986,986', '986,986,,,,986,986,,,,986,,986,986,986,986,986,986,986,,,,,,986,986', '986,986,986,986,986,,900,986,900,900,900,,900,986,986,986,986,986,986', '986,986,986,986,986,986,,986,986,986,,986,986,986,986,986,570,,570,570', '570,,570,,900,,1077,,1077,1077,1077,,1077,900,,986,,,986,,,986,986,', ',986,750,986,750,750,750,986,750,570,,,,,,,986,,570,1077,,986,986,986', '986,,986,986,986,986,,,,,986,986,,,,750,,,986,,986,986,986,,750,986', '986,609,609,609,609,609,609,,,,609,609,,,,609,,609,609,609,609,609,609', '609,,,,,,609,609,609,609,609,609,609,,,609,,,,,,609,609,609,609,609', '609,609,609,609,609,609,609,,609,609,609,,609,609,609,609,609,327,327', '327,327,327,327,327,327,327,327,327,,327,327,,,327,327,,609,,,609,,', '609,609,,483,609,,609,327,,327,609,327,327,,327,327,327,327,327,609', '327,,,,609,609,609,609,,609,609,609,609,,,483,,609,609,483,483,,483', '483,,609,,609,609,609,,,609,609,210,210,210,210,210,210,,,,210,210,', ',,210,,210,210,210,210,210,210,210,,,,,,210,210,210,210,210,210,210', ',,210,,,482,,,210,210,210,210,210,210,210,210,210,210,210,210,,210,210', '210,,210,210,210,210,210,481,481,481,481,481,481,481,482,,481,481,482', '482,,482,482,481,481,,210,,,210,,,210,210,,,210,,210,481,,481,210,481', '481,,481,481,481,481,481,210,481,,,,210,210,210,210,,210,210,210,210', ',,,,210,210,,901,,901,901,901,210,901,210,210,210,,,210,210,874,874', '874,874,874,874,,,,874,874,,,,874,,874,874,874,874,874,874,874,901,', ',,,874,874,874,874,874,874,874,,,874,,,,,,874,874,874,874,874,874,874', '874,874,874,874,874,,874,874,874,,874,874,874,874,874,465,465,465,465', '465,465,465,465,465,465,465,,465,465,,,465,465,,874,,,874,,,874,874', ',,874,,874,465,,465,874,465,465,,465,465,465,465,465,874,465,,,,874', '874,874,874,,874,874,874,874,,,,,874,874,,1078,,1078,1078,1078,874,1078', '874,874,874,,,874,874,33,33,33,33,33,33,,,,33,33,,,,33,,33,33,33,33', '33,33,33,1078,,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33', '33,33,33,33,33,,33,33,33,,33,33,33,33,33,480,480,480,480,480,480,480', ',,480,480,,,,,,480,480,,33,,,33,,,33,33,,,33,,33,480,,480,33,480,480', ',480,480,480,480,480,33,480,,,,33,33,33,33,,33,33,33,33,,,,,33,33,,', ',,,,33,,33,33,33,,,33,33,335,335,335,335,335,335,,,,335,335,,,,335,', '335,335,335,335,335,335,335,,,,,,335,335,335,335,335,335,335,,,335,', ',,,,335,335,335,335,335,335,335,335,335,335,335,335,,335,335,335,,335', '335,335,335,335,479,479,479,479,479,479,479,,,479,479,,,,,,479,479,', '335,,,335,,,335,335,,,335,,335,479,,479,335,479,479,,479,479,479,479', '479,335,479,,,,335,335,335,335,,335,335,335,335,,,,,335,335,,,,,,,335', ',335,335,335,,,335,335,1088,1088,1088,1088,1088,1088,,,,1088,1088,,', ',1088,,1088,1088,1088,1088,1088,1088,1088,,,,,,1088,1088,1088,1088,1088', '1088,1088,,,1088,,,,,,1088,1088,1088,1088,1088,1088,1088,1088,1088,1088', '1088,1088,,1088,1088,1088,,1088,1088,1088,1088,1088,478,478,478,478', '478,478,478,,,478,478,,,,,,478,478,,1088,,,1088,,,1088,1088,,,1088,', '1088,478,,478,1088,478,478,,478,478,478,478,478,1088,478,,,,1088,1088', '1088,1088,,1088,1088,1088,1088,,,,,1088,1088,,,,,,,1088,,1088,1088,1088', ',,1088,1088,918,918,918,918,918,918,,,,918,918,,,,918,,918,918,918,918', '918,918,918,,,,,,918,918,918,918,918,918,918,,,918,,,,,,918,918,918', '918,918,918,918,918,918,918,918,918,,918,918,918,,918,918,918,918,918', '536,,,,,,,,,,,,,,,,536,536,,918,,,918,,,918,918,,,918,,918,536,,536', '918,536,536,,536,536,,,536,918,536,,,,918,918,918,918,,918,918,918,918', ',,,,918,918,,,,,,,918,,918,918,918,,,918,918,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,477,477,477,477,477,477,477,,,477', '477,,,,,,477,477,,912,,,912,,,912,912,,,912,,912,477,,477,912,477,477', ',477,477,477,477,477,912,477,,,,912,912,912,912,,912,912,912,912,,,', ',912,912,,,,,,,912,,912,912,912,,,912,912,779,779,779,779,779,779,,', ',779,779,,,,779,,779,779,779,779,779,779,779,,,,,,779,779,779,779,779', '779,779,,,779,,,,,,779,779,779,779,779,779,779,779,779,779,779,779,', '779,779,779,,779,779,779,779,779,476,476,476,476,476,476,476,,,476,476', ',,,,,476,476,,779,,,779,,,779,779,,,779,,779,476,,476,779,476,476,,476', '476,476,476,476,779,476,,,,779,779,779,779,,779,779,779,779,,,,,779', '779,,,,,,,779,,779,779,779,,,779,779,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,484,484,484,484,484,484,484,,,484,484,', ',,,,484,484,,784,,,784,,,784,784,,,784,,784,484,,484,784,484,484,,484', '484,484,484,484,784,484,,,,784,784,784,784,,784,784,784,784,,,,,784', '784,,,,,,,784,,784,784,784,,,784,784,0,0,0,0,0,0,,,,0,0,,,,0,,0,0,0', '0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,', '0,0,0,0,0,485,485,485,485,485,485,485,485,,485,485,,,,,,485,485,,0,', ',0,,,0,0,,,0,,0,485,,485,0,485,485,,485,485,485,485,485,0,485,,,,0,0', '0,0,,0,0,0,0,,,,,0,0,,,,,,,0,,0,0,0,,,0,0,1079,1079,1079,1079,1079,1079', ',,,1079,1079,,,,1079,,1079,1079,1079,1079,1079,1079,1079,,,,,,1079,1079', '1079,1079,1079,1079,1079,,,1079,,,,,,1079,1079,1079,1079,1079,1079,1079', '1079,1079,1079,1079,1079,,1079,1079,1079,,1079,1079,1079,1079,1079,466', '466,466,466,466,466,466,466,466,466,466,,466,466,,,466,466,,1079,,,1079', ',,1079,1079,,,1079,,1079,466,,466,1079,466,466,,466,466,466,466,466', '1079,466,,,,1079,1079,1079,1079,,1079,1079,1079,1079,,,,,1079,1079,', ',,,,,1079,,1079,1079,1079,,,1079,1079,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,487,,,,,,,,,,,,,,,,487,487,,302,,,302,', ',302,302,,,302,,302,487,,487,302,487,487,,487,487,,,487,302,487,,,,302', '302,302,302,,302,302,302,302,,,,,302,302,,,,,,,302,,302,302,302,,,302', '302,1128,1128,1128,1128,1128,1128,,,,1128,1128,,,,1128,,1128,1128,1128', '1128,1128,1128,1128,,,,,,1128,1128,1128,1128,1128,1128,1128,,,1128,', ',,,,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,,1128', '1128,1128,,1128,1128,1128,1128,1128,328,328,328,328,328,328,328,328', '328,328,328,,328,328,,,328,328,,1128,,,1128,,,1128,1128,,,1128,,1128', '328,,328,1128,328,328,,328,328,328,328,328,1128,328,,,,1128,1128,1128', '1128,,1128,1128,1128,1128,,,,,1128,1128,,,,,,,1128,,1128,1128,1128,', ',1128,1128,352,352,352,352,352,352,,,,352,352,,,,352,,352,352,352,352', '352,352,352,,,,,,352,352,352,352,352,352,352,,,352,,,,,,352,352,352', '352,352,352,352,352,352,352,352,352,,352,352,352,,352,352,352,352,352', '475,,,,,,,,,,,,,,,,475,475,,352,,,352,,,352,352,,,352,,352,475,,,352', '475,475,,475,475,,,,352,,,,,352,352,352,352,,352,352,352,352,,,,,352', '352,,,,,,,352,,352,352,352,,,352,352,788,788,788,788,788,788,,,,788', '788,,,,788,,788,788,788,788,788,788,788,,,,,,788,788,788,788,788,788', '788,,,788,,,,,,788,788,788,788,788,788,788,788,788,788,788,788,,788', '788,788,,788,788,788,788,788,474,,,,,,,,,,,,,,,,474,474,,788,,,788,', ',788,788,,,788,,788,474,,474,788,474,474,,474,474,,,,788,,,,,788,788', '788,788,,788,788,788,788,,,,,788,788,,,,,,,788,,788,788,788,,,788,788', '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,473,,,,,,', ',,,,,,,,,473,473,,353,,,353,,,353,353,,,353,,353,473,,473,353,473,473', ',473,473,,,,353,,,,,353,353,353,353,,353,353,353,353,,,,,353,353,,,', ',,,353,,353,353,353,,,353,353,307,307,307,307,307,307,,,,307,307,,,', '307,,307,307,307,307,307,307,307,,,,,,307,307,307,307,307,307,307,,', '307,,,,,,307,307,307,307,307,307,307,307,307,307,307,307,,307,307,307', ',307,307,307,307,307,,,,,,,,,,,,,,,,,,,,307,,,307,,,307,307,,,307,,307', ',,,307,,,,,,,,,307,,,,,307,307,307,307,,307,307,307,307,,,,,307,307', ',,,70,70,70,307,70,307,307,307,70,70,307,307,,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,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,,,,931,931,931,932,931,932,932', '932,931,931,932,932,,931,,931,931,931,931,931,931,931,,,,,,931,931,931', '931,931,931,931,,,931,,,,,,,931,,,931,931,931,931,931,931,931,931,931', '931,931,931,,931,931,931,931,931,,,,,,,,,,,,,,,,,,,,931,,,931,,,931', '931,,,931,,,,931,,931,,,931,,,,,,931,,,,,931,931,931,931,,931,931,931', '931,,,,,931,931,,,,730,730,730,931,730,931,931,931,730,730,931,931,', '730,,730,730,730,730,730,730,730,,,,,,730,730,730,730,730,730,730,,', '730,,,,,,,730,,,730,730,730,730,730,730,730,730,,730,730,730,,730,730', '730,730,730,,,,,,,,,,,,,,,,,,,,730,,,730,,,730,730,,,730,,730,,,,730', ',,,,,,,,730,,,,,730,730,730,730,,730,730,730,730,,,,,730,730,,,,416', '416,416,730,416,730,730,730,416,416,730,730,,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,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,116,,,,,116,116,,,,,,116,116,,116,116,116,,,116,116,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,121,122,121,121,121,122,122,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,,,,123,123', '123,122,123,122,122,122,123,123,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,,,,124,124,124,123,124,123,123,123,124', '124,123,123,,124,,124,124,124,124,124,124,124,,,,,,124,124,124,124,124', '124,124,,,124,,,,,,,124,,,124,124,124,124,124,124,124,124,,124,124,124', ',124,124,124,124,124,,,,,,,,,,,,,,,,,,,,124,,,124,,,124,124,,,124,,', ',,,124,,,,,,,,,124,,,,,124,124,124,124,,124,124,124,124,,,,,124,124', ',,,,,,124,,124,124,124,,,124,124,125,125,125,125,125,,,,125,125,,,,125', ',125,125,125,125,125,125,125,,,,,,125,125,125,125,125,125,125,,,125', ',,,,,125,125,,125,125,125,125,125,125,125,125,125,,125,125,125,,125', '125,125,125,125,,,,,,,,,,,,,,,,,,,,125,,,125,,,125,125,,,125,,125,,', ',125,,,,,,,,,125,,,,,125,125,125,125,,125,125,125,125,,,,,125,125,,', ',211,211,211,125,211,125,125,125,211,211,125,125,,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,211,212,211,211', '211,212,212,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,,,,213,213,213,212,213,212,212,212,213,213,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,,,,214,214,214', '213,214,213,213,213,214,214,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,,,,215,215,215,214,215,214,214,214,215,215,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,,,,216', '216,216,215,216,215,215,215,216,216,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,,,,906,906,906,216,906', '216,216,216,906,906,216,216,,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,906,,906,906,906', '906,,,,,906,906,,,,785,785,785,906,785,906,906,906,785,785,906,906,', '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,,,,221,221', '221,785,221,785,785,785,221,221,785,785,,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,221,222,221,221,221,222', '222,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', ',,,223,223,223,222,223,222,222,222,223,223,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,,,523,523,523,223,523,223', '223,223,523,523,223,223,,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,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,,,,655,655,655,523,655,523,523,523,655,655,523', '523,,655,,655,655,655,655,655,655,655,,,,,,655,655,655,655,655,655,655', ',,655,,,,,,,655,,,655,655,655,655,655,655,655,655,,655,655,655,,655', '655,655,655,655,,,,,,,,,,,,,,,,,,,,655,,,655,,,655,655,,,655,,,,,,655', ',,,,,,,,655,,,,,655,655,655,655,,655,655,655,655,,,,,655,655,,,,1113', '1113,1113,655,1113,655,655,655,1113,1113,655,655,,1113,,1113,1113,1113', '1113,1113,1113,1113,,,,,,1113,1113,1113,1113,1113,1113,1113,,,1113,', ',,,,,1113,,,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113', ',1113,1113,1113,1113,1113,,,,,,,,,,,,,,,,,,,,1113,,,1113,,,1113,1113', ',,1113,,1113,,1113,,1113,,,1113,,,,,,1113,,,,,1113,1113,1113,1113,,1113', '1113,1113,1113,,,,,1113,1113,,,,234,234,234,1113,234,1113,1113,1113', '234,234,1113,1113,,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,,,,654,654,654,234,654,234,234,234,654,654,234,234,,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,,,,238,238,238,654', '238,654,654,654,238,238,654,654,,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,238,239,238,238,238,239,239,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,,,,240', '240,240,239,240,239,239,239,240,240,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,,,,241,241,241,240,241,240,240,240', '241,241,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', ',,,242,242,242,241,242,241,241,241,242,242,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,,,,243,243,243,242,243,242', '242,242,243,243,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,,,,244,244,244,243,244,243,243,243,244,244,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,,,,245,245,245', '244,245,244,244,244,245,245,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,,,,246,246,246,245,246,245,245,245,246,246,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,,,,247', '247,247,246,247,246,246,246,247,247,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,,,,248,248,248,247,248,247,247,247', '248,248,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', ',,,249,249,249,248,249,248,248,248,249,249,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,,,,372,372,372,249,372,249', '249,249,372,372,249,249,,372,,372,372,372,372,372,372,372,,,,,,372,372', '372,372,372,372,372,,,372,,,,,,,372,,,372,372,372,372,372,372,372,372', ',372,372,372,,372,372,372,372,372,,,,,,,,,,,,,,,,,,,,372,,,372,,,372', '372,,,372,,,,,,372,,,,,,,,,372,,,,,372,372,372,372,,372,372,372,372', ',,,,372,372,,,,251,251,251,372,251,372,372,372,251,251,372,372,,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', '251,252,251,251,251,252,252,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,,,,253,253,253,252,253,252,252,252,253,253,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,,,,254', '254,254,253,254,253,253,253,254,254,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,,,,255,255,255,254,255,254,254,254', '255,255,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', ',,,256,256,256,255,256,255,255,255,256,256,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,,,,257,257,257,256,257,256', '256,256,257,257,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,,,,258,258,258,257,258,257,257,257,258,258,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,,,,259,259,259', '258,259,258,258,258,259,259,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,,,,264,264,264,259,264,259,259,259,264,264,259', '259,,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,,,,808', '808,808,264,808,264,264,264,808,808,264,264,,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,,,,650,650,650,808,650,808,808,808', '650,650,808,808,,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', ',,,271,271,271,650,271,650,650,650,271,271,650,650,,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,,,,272,272,272', '271,272,271,271,271,272,272,271,271,,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,,272,272,272,272,,,,,272,272,,,,280,280,280,272,280,272,272', '272,280,280,272,272,,280,,280,280,280,280,280,280,280,,,,,,280,280,280', '280,280,280,280,,,280,,,,,,,280,,,280,280,280,280,280,280,280,280,280', '280,280,280,,280,280,280,280,280,,,,,,,,,,,,,,,,,,,,280,,,280,,,280', '280,,,280,,280,,280,,280,,,280,,,,,,280,,,,,280,280,280,280,,280,280', '280,280,,,,,280,280,280,,,649,649,649,280,649,280,280,280,649,649,280', '280,,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,,,,532', '532,532,649,532,649,649,649,532,532,649,649,,532,,532,532,532,532,532', '532,532,,,,,,532,532,532,532,532,532,532,,,532,,,,,,,532,,,532,532,532', '532,532,532,532,532,,532,532,532,,532,532,532,532,532,,,,,,,,,,,,,,', ',,,,,532,,,532,,,532,532,,,532,,,,,,532,,,,,,,,,532,,,,,532,532,532', '532,,532,532,532,532,,,,,532,532,,,,287,287,287,532,287,532,532,532', '287,287,532,532,,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', ',,,289,289,289,287,289,287,287,287,289,289,287,287,,289,,289,289,289', '289,289,289,289,,,,,,289,289,289,289,289,289,289,,,289,,,,,,,289,,,289', '289,289,289,289,289,289,289,,289,289,289,,289,289,289,289,289,,,,,,', ',,,,,,,,,,,,,289,,,289,,,289,289,,,289,,,,,,289,,,,,,,,,289,,,,,289', '289,289,289,,289,289,289,289,,,,,289,289,,,,292,292,292,289,292,289', '289,289,292,292,289,289,,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,,,,293,293,293,292,293,292,292,292,293,293,292,292,,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,,,,388,388,388', '293,388,293,293,293,388,388,293,293,,388,,388,388,388,388,388,388,388', ',,,,,388,388,388,388,388,388,388,,,388,,,,,,,388,,,388,388,388,388,388', '388,388,388,,388,388,388,,388,388,388,388,388,,,,,,,,,,,,,,,,,,,,388', ',,388,,,388,388,,,388,,,,,,388,,,,,,,,,388,,,,,388,388,388,388,,388', '388,388,388,,,,,388,388,,,,,,,388,,388,388,388,,,388,388,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,298', '298,298,,,,,298,298,,,,1082,1082,1082,298,1082,298,298,298,1082,1082', '298,298,,1082,,1082,1082,1082,1082,1082,1082,1082,,,,,,1082,1082,1082', '1082,1082,1082,1082,,,1082,,,,,,,1082,,,1082,1082,1082,1082,1082,1082', '1082,1082,,1082,1082,1082,,1082,1082,1082,1082,1082,,,,,,,,,,,,,,,,', ',,,1082,,,1082,,,1082,1082,,,1082,,,,,,1082,,,,,,,,,1082,,,,,1082,1082', '1082,1082,,1082,1082,1082,1082,,,,,1082,1082,,,,1081,1081,1081,1082', '1081,1082,1082,1082,1081,1081,1082,1082,,1081,,1081,1081,1081,1081,1081', '1081,1081,,,,,,1081,1081,1081,1081,1081,1081,1081,,,1081,,,,,,,1081', ',,1081,1081,1081,1081,1081,1081,1081,1081,,1081,1081,1081,,1081,1081', '1081,1081,1081,,,,,,,,,,,,,,,,,,,,1081,,,1081,,,1081,1081,,,1081,,,', ',,1081,,,,,,,,,1081,,,,,1081,1081,1081,1081,,1081,1081,1081,1081,,,', ',1081,1081,,,,648,648,648,1081,648,1081,1081,1081,648,648,1081,1081', ',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,648,647,648,648,648,647,647,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,,,,535,535,535', '647,535,647,647,647,535,535,647,647,,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,450,,535,535,,,,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,,644,644,644,450,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,,,,640,640,640,643,640,643', '643,643,640,640,643,643,,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,,,,639,639,639,640,639,640,640,640,639,639,640', '640,,639,,639,639,639,639,639,639,639,,,,,,639,639,639,639,639,639,639', ',,639,,,,,,,639,,,639,639,639,639,639,639,639,639,,639,639,639,,639', '639,639,639,639,,,,,,,,,,,,,,,,,,,,639,,,639,,,639,639,,,639,,,,,,639', ',,,,,,,,639,,,,,639,639,639,639,,639,639,639,639,,,,,639,639,,,,638', '638,638,639,638,639,639,639,638,638,639,639,,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,,,,538,538,538,638,538,638,638,638', '538,538,638,638,,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,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,,', ',854,854,854,636,854,636,636,636,854,854,636,636,,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,,,854,,,,,,854,,,,,,,,,854,,,,,854,854', '854,854,,854,854,854,854,,,,,854,854,,,,462,462,462,854,462,854,854', '854,462,462,854,854,,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,,,,816,816,816,462,816,462,462,462,816,816,462,462,,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,816,,816,816,816,816,,,,,816,816,,,,829,829,829,816', '829,816,816,816,829,829,816,816,,829,,829,829,829,829,829,829,829,,', ',,,829,829,829,829,829,829,829,,,829,,,,,,,829,,,829,829,829,829,829', '829,829,829,,829,829,829,,829,829,829,829,829,,,,,,,,,,,,,,,,,,,,829', ',,829,,,829,829,,,829,,,,,,829,,,,,,,,,829,,,,,829,829,829,829,,829', '829,829,829,,,,,829,829,,,,,,,829,,829,829,829,449,,829,829,,,,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,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,449,449,,449,,449,,544,544,544,449,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,,,,332,332,332', '544,332,544,544,544,332,332,544,544,,332,,332,332,332,332,332,332,332', ',,,,,332,332,332,332,332,332,332,,,332,,,,,,,332,,,332,332,332,332,332', '332,332,332,,332,332,332,,332,332,332,332,332,,,,,,,,,,,,,,,,,,,,332', ',,332,,,332,332,,,332,,,,,,332,,,,,,,,,332,,,,,332,332,332,332,,332', '332,332,332,,,,,332,332,,,,334,334,334,332,334,332,332,332,334,334,332', '332,,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,,', ',605,605,605,334,605,334,334,334,605,605,334,334,,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,605,605,,,,,605,605,,,,547,547,547,605', '547,605,605,605,547,547,605,605,,547,,547,547,547,547,547,547,547,,', ',,,547,547,547,547,547,547,547,,,547,,,,,,,547,,,547,547,547,547,547', '547,547,547,547,547,547,547,,547,547,547,547,547,,,,,,,,,,,,,,,,,,,', '547,,,547,,,547,547,,,547,,,,,,547,,,547,,,,,,547,,,,,547,547,547,547', ',547,547,547,547,,,,,547,547,,,,595,595,595,547,595,547,547,547,595', '595,547,547,,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,,,,594,594,594,595,594,595,595,595,594,594,595,595,,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,594,,594,594,594', '594,594,,,,,,,,,,,,,,,,,,,,594,,,594,,,594,594,,,594,,594,,,,594,,,', ',,,,,594,,,,,594,594,594,594,,594,594,594,594,,,,,594,594,,,,830,830', '830,594,830,594,594,594,830,830,594,594,,830,,830,830,830,830,830,830', '830,,,,,,830,830,830,830,830,830,830,,,830,,,,,,,830,,,830,830,830,830', '830,830,830,830,,830,830,830,,830,830,830,830,830,,,,,,,,,,,,,,,,,,', ',830,,,830,,,830,830,,,830,,,,,,830,,,,,,,,,830,,,,,830,830,830,830', ',830,830,830,830,,,,,830,830,,,,250,250,250,830,250,830,830,830,250', '250,830,830,,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', ',,,831,831,831,250,831,250,250,250,831,831,250,250,,831,,831,831,831', '831,831,831,831,,,,,,831,831,831,831,831,831,831,,,831,,,,,,,831,,,831', '831,831,831,831,831,831,831,,831,831,831,,831,831,831,831,831,,,,,,', ',,,,,,,,,,,,,831,,,831,,,831,831,,,831,,,,,,831,,,,,,,,,831,,,,,831', '831,831,831,,831,831,831,831,,,,,831,831,,,,832,832,832,831,832,831', '831,831,832,832,831,831,,832,,832,832,832,832,832,832,832,,,,,,832,832', '832,832,832,832,832,,,832,,,,,,,832,,,832,832,832,832,832,832,832,832', ',832,832,832,,832,832,832,832,832,,,,,,,,,,,,,,,,,,,,832,,,832,,,832', '832,,,832,,,,,,832,,,,,,,,,832,,,,,832,832,832,832,,832,832,832,832', ',,,,832,832,,,,573,573,573,832,573,832,832,832,573,573,832,832,,573', ',573,573,573,573,573,573,573,,,,,,573,573,573,573,573,573,573,,,573', ',,,,,,573,,,573,573,573,573,573,573,573,573,,573,573,573,,573,573,573', '573,573,,,,,,,,,,,,,,,,,,,,573,,,573,,,573,573,,,573,,,,,,573,,,,,,', ',,573,,,,,573,573,573,573,,573,573,573,573,,,,,573,573,,,,351,351,351', '573,351,573,573,573,351,351,573,573,,351,,351,351,351,351,351,351,351', ',,,,,351,351,351,351,351,351,351,,,351,,,,,,,351,,,351,351,351,351,351', '351,351,351,,351,351,351,,351,351,351,351,351,,,,,,,,,,,,,,,,,,,,351', ',,351,,,351,351,,,351,,,,,,351,,,,,,,,,351,,,,,351,351,351,351,,351', '351,351,351,,,,,351,351,,,,,,,351,,351,351,351,489,,351,351,,,,489,489', '489,,,489,489,489,862,489,862,862,862,862,862,,,489,489,489,,,,862,', ',,,,489,489,,489,489,489,489,489,1142,,1142,1142,1142,1142,1142,995', '862,995,995,995,995,995,,1142,,862,862,862,862,,995,,862,,1048,,1048', '1048,1048,1048,1048,489,,,,1142,,,489,1048,,,995,489,489,,1142,1142', '862,,,1142,,995,995,,,,995,,,1048,,,,,489,489,,,1048,1048,1048,1048', ',,,1048,,,,489,,,489,,463,463,463,489,463,,,,463,463,489,,,463,,463', '463,463,463,463,463,463,,,,,,463,463,463,463,463,463,463,,,463,,,,,', ',463,,,463,463,463,463,463,463,463,463,,463,463,463,,463,463,463,463', '463,,,,,,,,,,,,,,,,,,,,463,,,463,,,463,463,,,463,,,,,,463,,,,,,,,,463', ',,,,463,463,463,463,,463,463,463,463,,,,,463,463,,,,,,,463,,463,463', '463,440,,463,463,,,,440,440,440,,,440,440,440,,440,,,,,,,,440,440,440', '440,,,,,,,,,440,440,,440,440,440,440,440,,,,,,,,,,,,,,,,,,,,,,,440,440', '440,440,440,440,440,440,440,440,440,440,440,440,,,440,440,440,,,440', ',440,440,,,440,440,,440,,440,,440,,440,440,,440,440,440,440,440,,440', '440,440,,,,,,,,,,,,,,440,,,440,440,,440,,440,748,748,748,,748,,440,', '748,748,,,,748,,748,748,748,748,748,748,748,,,,,,748,748,748,748,748', '748,748,,,748,,,,,,,748,,,748,748,748,748,748,748,748,748,,748,748,748', ',748,748,748,748,748,,,,,,,,,,,,,,,,,,,,748,,,748,,,748,748,,,748,,', ',,,748,,,,,,,,,748,,,,,748,748,748,748,,748,748,748,748,,,,,748,748', ',,,20,20,20,748,20,748,748,748,20,20,748,748,,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,,,,494,494,494', '20,494,20,20,20,494,494,20,20,,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,494', '494,,,,,494,494,,,,461,461,461,494,461,494,494,494,461,461,494,494,', '461,,461,461,461,461,461,461,461,,,,,,461,461,461,461,461,461,461,,', '461,,,,,,,461,,,461,461,461,461,461,461,461,461,,461,461,461,,461,461', '461,461,461,,,,,,,,,,,,,,,,,,,,461,,,461,,,461,461,,,461,,,,,,461,,', ',,,,,,461,,,,,461,461,461,461,,461,461,461,461,,,,,461,461,,,,711,711', '711,461,711,461,461,461,711,711,461,461,,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,711,711,711,,,,,,,,,,,,,,,,,,', ',711,,,711,,,711,711,,,711,,,,,,711,,,,,,,,,711,,,,,711,711,711,711', ',711,711,711,711,,,,,711,711,,,,708,708,708,711,708,711,711,711,708', '708,711,711,,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,708,,708,708,708,708,,,,,708,708', ',,,,,,708,,708,708,708,27,,708,708,,,,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,28,27,27,27,,,,28,28,28,,,28,28,28', ',28,27,,,27,27,,27,28,27,28,28,,,,,27,,,,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,,28,28,,28,28,28,28,28,,28,,28,,,,,', ',,,,,,,,28,,,28,28,,28,,28,29,29,29,,29,,28,,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,,,,,,29,,,,,29,29,29,29,,29,29,29,29,,,,,29,29', ',,,30,30,30,29,30,29,29,29,30,30,29,29,,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,,,,31,31,31', '30,31,30,30,30,31,31,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,31,,,31', '31,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5,,,5,,,,,', '5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,,,,5,,,5,', ',5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,,459,459,459', '5,459,5,5,5,459,459,5,5,,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,,,,503,503,503,459,503,459,459,459,503,503,459', '459,,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', ',,,505,505,505,503,505,503,503,503,505,505,503,503,,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,,,,41,41,41,505,41', '505,505,505,41,41,505,505,,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,,,,42,42,42,41,42,41,41,41,42,42', '41,41,,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,,,,507,507,507,42,507,42,42,42,507,507,42,42,,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,,,,44,44,44,507,44', '507,507,507,44,44,507,507,,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,44,45,44,44,44,45,45', '44,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,,,,,,,45,,45,45,45,,,45,45,513,513,513,513,513,,,,513', '513,,,,513,,513,513,513,513,513,513,513,,,,,,513,513,513,513,513,513', '513,,,513,,,,,,513,513,513,513,513,513,513,513,513,513,513,513,,513', '513,513,,513,513,513,513,513,,,,,,,,,,,,,,,,,,,,513,,,513,,,513,513', ',,513,,513,,,,513,,,,,,,,,513,,,,,513,513,513,513,,513,513,513,513,', ',,,513,513,,,,,,513,513,,513,513,513,,,513,513,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,,,,911,911,911,47,911,47,47,47,911,911,47,47,,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,911,911,,911,911,911,911,,,,,911,911,,,,,,,911,,911', '911,911,59,,911,911,,,,59,59,59,,,59,59,59,,59,,,,,,,,59,,59,59,59,', ',,678,678,678,678,59,59,,59,59,59,59,59,,,,,678,678,678,,,,,,,,,,,678', '678,,,678,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,,678,678,678', '678,,678,678,678,678,,,,59,678,678,59,59,59,59,,59,678,59,678,678,678', ',59,61,61,61,61,61,,,,61,61,,,,61,,61,61,61,61,61,61,61,,,,,,61,61,61', '61,61,61,61,,,61,,,,,,61,61,,61,61,61,61,61,61,61,61,61,,61,61,61,,61', '61,61,61,61,,,,,,,,,,,,,,,,,,,,61,,,61,,,61,61,,,61,,61,,,,61,,,,,,', ',,61,,,,,61,61,61,61,,61,61,61,61,,,,,61,61,,,,62,62,62,61,62,61,61', '61,62,62,61,61,,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,,,,63,63,63,62,63,62,62,62,63,63,62', '62,,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,,,,,63,63,,,,66,66,66,63,66,63,63,63,66,66,63,63,,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,66,67,66,66,66,67,67,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,,,,323,323,323,67,323,67,67', '67,323,323,67,67,,323,,323,323,323,323,323,323,323,,,,,,323,323,323', '323,323,323,323,,,323,,,,,,,323,,,323,323,323,323,323,323,323,323,,323', '323,323,,323,323,,,323,,,,,,,,,,,,,,,,,,,,323,,,323,,,323,323,,,323', ',,,,,,,,,,,,,,,,,,,323,323,323,323,,323,323,323,323,,,,,323,323,,,,725', '725,725,323,725,323,323,323,725,725,,,,725,,725,725,725,725,725,725', '725,,,,,,725,725,725,725,725,725,725,,,725,,,,,,,725,,,725,725,725,725', '725,725,725,725,,725,725,725,,725,725,,,725,,,,,,,,,,,,,,,,,,,,725,', ',725,,,725,725,,,725,,,,,,,,,,,,,,,,,,,,725,725,725,725,,725,725,725', '725,,,,,725,725,,,,714,714,714,725,714,725,725,725,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,,,,34,34,34,714,34,714,714,714', '34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34,34,,,34,,,', ',,,34,,,34,34,34,34,34,34,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,34,35,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,,,746', ',746,746,746,746,746,,,,,,,,,746,,35,35,35,35,,35,35,35,35,,,,,35,35', ',,,35,,746,35,,35,35,35,71,71,71,,71,746,746,,71,71,746,,,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,,,,72,72', '72,71,72,71,71,71,72,72,,,,72,,72,72,72,72,72,72,72,,,,,,72,72,72,72', '72,72,72,,,72,,,,,,,72,,,72,72,72,72,72,72,72,72,,72,72,72,,72,72,,', '72,,,,,,,,,,,,,,,,,72,,,72,,,72,,,72,72,,,72,,,,,,,,,,,,,,,,,,,,72,72', '72,72,,72,72,72,72,,,,,72,72,,,,73,73,73,72,73,72,72,72,73,73,,,,73', ',73,73,73,73,73,73,73,,,,,,73,73,73,73,73,73,73,,,73,,,,,,,73,,,73,73', '73,73,73,73,73,73,,73,73,73,,73,73,,,73,,,,,,,,,,,,,,,,,,,,73,,,73,', ',73,73,,,73,,,,,,,,,,,,,,,,,,,,73,73,73,73,,73,73,73,73,,,,,73,73,,', ',306,306,306,73,306,73,73,73,306,306,,,,306,,306,306,306,306,306,306', '306,,,,,,306,306,306,306,306,306,306,,,306,,,,,,,306,,,306,306,306,306', '306,306,306,306,,306,306,306,,306,306,,,306,,,,,,,,,,,,,,,,,,,,306,', ',306,,,306,306,,,306,,,1140,,1140,1140,1140,1140,1140,,,,,,,,,1140,', '306,306,306,306,,306,306,306,306,,,,,306,306,,,,306,,1140,306,,306,306', '306,1056,1056,1056,,1056,1140,1140,,1056,1056,1140,,,1056,,1056,1056', '1056,1056,1056,1056,1056,,,,,,1056,1056,1056,1056,1056,1056,1056,,,1056', ',,,,,,1056,,,1056,1056,1056,1056,1056,1056,1056,1056,,1056,1056,1056', ',1056,1056,,,1056,,,,,,,,,,,,,,,,,,,,1056,,,1056,,,1056,1056,,,1056', ',,,,,,,,,,,,,,,,,,,1056,1056,1056,1056,,1056,1056,1056,1056,,,,,1056', '1056,,,,529,529,529,1056,529,1056,1056,1056,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,,,,521,521,521,529,521,529,529,529', '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,,,,984,984,984', '521,984,521,521,521,984,984,,,,984,,984,984,984,984,984,984,984,,,,', ',984,984,984,984,984,984,984,,,984,,,,,,,984,,,984,984,984,984,984,984', '984,984,,984,984,984,,984,984,,,984,,,,,,,,,,,,,,,,,,,,984,,,984,,,984', '984,,,984,,,,,,,,,,,,,,,,,,,,984,984,984,984,,984,984,984,984,,,,,984', '984,,,,975,975,975,984,975,984,984,984,975,975,,,,975,,975,975,975,975', '975,975,975,,,,,,975,975,975,975,975,975,975,,,975,,,,,,,975,,,975,975', '975,975,975,975,975,975,,975,975,975,,975,975,,,975,,,,,,,,,,,,,,,,', ',,,975,,,975,,,975,975,,,975,,,,,,,,,,,,,,,,,,,,975,975,975,975,,975', '975,975,975,,,,,975,975,,,,,,,975,,975,975,975,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,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,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,9,9,,,9,9,,,,,,,,,,,,,,9,8,8,8', '8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,', ',,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8,8,,,,8,8,8,8', ',,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8,8,,,8,8,1092,1092,1092,1092', ',,,,,,,,,8,,,1092,1092,1092,1092,,,1138,1092,1138,1138,1138,1138,1138', '1092,1092,,,1092,,,,1138,,,,,,,,,,,,,,,,1092,,,1092,,,1138,1092,,,1092', ',,,,1138,1138,1138,1138,,,,1138,,,,1092,,,,1092,1092,1092,1092,,1092', '1092,1092,1092,,,,,1092,1092,1083,1083,1083,1083,,,1092,,1092,1092,1092', ',,1092,1092,,1083,1083,1083,1083,,,991,1083,991,991,991,991,991,1083', '1083,,,1083,,,,991,,,,,,,,,,,,,,,,1083,,,1083,,,991,1083,,,1083,,1083', ',,991,991,991,991,,,,991,,,,1083,,,,1083,1083,1083,1083,,1083,1083,1083', '1083,,,,,1083,1083,1091,1091,1091,1091,,,1083,,1083,1083,1083,,,1083', '1083,,1091,1091,1091,1091,,,552,1091,552,552,552,552,552,1091,1091,', ',1091,,,,552,,,,,,,,,,,,,,,,1091,,,1091,,,552,1091,,,1091,,,,,552,552', '552,552,,,,552,,,,1091,,,,1091,1091,1091,1091,,1091,1091,1091,1091,', ',,,1091,1091,835,835,835,835,,,1091,,1091,1091,1091,,,1091,1091,,835', '835,835,835,,,1121,835,1121,1121,1121,1121,1121,835,835,,,835,,,,1121', ',,,,,,,,,,,,,,,835,,,835,,,1121,835,,,835,,,,,,,1121,1121,,,,1121,,', ',835,,,,835,835,835,835,,835,835,835,835,,,,,835,835,,,,,,,835,,835', '835,835,,,835,835,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,791,,791,791,791,791,791,791,791,791,791,791,791,791', ',,791,910,910,910,910,,,997,,997,997,997,997,997,,,,910,910,910,910', ',997,,910,910,,,,,910,910,,,910,910,,,,,,,,,997,,,,,,,,,,910,997,997', '910,,,997,910,,,910,,910,,,,,,,910,,,,,,,910,,,,910,910,910,910,,910', '910,910,910,,,,,910,910,464,464,464,464,,,910,,910,910,910,,,910,910', ',464,464,464,464,,,1050,464,1050,1050,1050,1050,1050,464,464,,,464,', ',,1050,,,,,,,,,,,,,,,,464,,,464,,,1050,464,,,464,,,,,1050,1050,1050', '1050,,,,1050,,,,464,,,,464,464,464,464,,464,464,464,464,,,,,464,464', ',,,,,,464,,464,464,464,,,464,464,74,74,74,74,74,74,74,74,74,74,74,74', '74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74,74,74', ',,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,74,74,,74,74,74,74', '74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74,74,74', '74,74,74,74,74,74,74,,,74,1133,1133,1133,1133,,,1052,,1052,1052,1052', '1052,1052,,,,1133,1133,1133,1133,,1052,,1133,,,,,,1133,1133,,,1133,', ',,,,,,,,1052,,,,,,,,,,1133,1052,1052,1133,,,1052,1133,,,1133,,,,,,,', ',,,,,,,,1133,,,,1133,1133,1133,1133,,1133,1133,1133,1133,,,,,1133,1133', '1136,1136,1136,1136,,,1133,,1133,1133,1133,,,1133,1133,,1136,1136,1136', '1136,,,790,1136,790,790,790,790,790,1136,1136,,,1136,,,,790,,,,,,,,', ',,,,,,,1136,,,1136,,,790,1136,,,1136,,,,,790,790,790,790,,,,790,,,,1136', ',,,1136,1136,1136,1136,,1136,1136,1136,1136,,,,,1136,1136,948,948,948', '948,,,1136,,1136,1136,1136,,,1136,1136,,948,948,948,948,,,1171,948,1171', '1171,1171,1171,1171,948,948,,,948,,,,1171,,,,,,,,,,,,,,,,948,,,948,', ',1171,948,,,948,,,,,,,1171,1171,,,,1171,,,,948,,,,948,948,948,948,,948', '948,948,948,,,,,948,948,940,940,940,940,,,948,,948,948,948,,,948,948', ',940,940,940,940,,,1144,940,1144,1144,1144,1144,1144,940,940,,,940,', ',,1144,,,,,,,,,,,,,,,,940,,,940,,,1144,940,,,940,,940,,,,,1144,1144', ',,,1144,,,,940,,,,940,940,940,940,,940,940,940,940,,,,,940,940,838,838', '838,838,,,940,,940,940,940,,,940,940,,838,838,838,838,,,,838,838,,,', ',838,838,,,838,838,,,,,,,,,,,,,,,,,,,838,,,838,,,,838,,,838,,838,,,', ',,,838,,,,,,,838,,,,838,838,838,838,,838,838,838,838,,,,,838,838,839', '839,839,839,,,838,,838,838,838,,,838,838,,839,839,839,839,,,,839,839', ',,,,839,839,,,839,839,,,,,,,,,,,,,,,,,,,839,,,839,,,,839,,,839,,839', ',,,,,,839,,,,,,,839,,,,839,839,839,839,,839,839,839,839,,,,,839,839', '1031,1031,1031,1031,,,839,,839,839,839,,,839,839,,1031,1031,1031,1031', ',,742,1031,742,742,742,742,742,1031,1031,,,1031,,,,742,,,,,,,,,,,,,', ',,1031,,,1031,,,742,1031,,,1031,,,,,742,742,742,742,,,,742,,,,1031,', ',,1031,1031,1031,1031,,1031,1031,1031,1031,,,,,1031,1031,841,841,841', '841,,,1031,,1031,1031,1031,,,1031,1031,,841,841,841,841,,,993,841,993', '993,993,993,993,841,841,,,841,,,,993,,,,,,,,,,,,,,,,841,,,841,,,993', '841,,,841,,841,,,,,993,993,,,,993,,,,841,,,,841,841,841,841,,841,841', '841,841,,,,,841,841,845,845,845,845,,,841,,841,841,841,,,841,841,,845', '845,845,845,,,,845,,,,,,845,845,,,845,,,,,,,,847,847,847,847,,,,,,,', ',845,,,845,847,847,847,845,,,845,,,,,,,847,847,,,847,,,,,845,,,,845', '845,845,845,,845,845,845,845,,,,,845,845,,,,,,,845,,845,845,845,,,845', '845,,,,,,,,,,,,847,847,847,847,,847,847,847,847,,,,,847,847,677,677', '677,677,,,847,,847,847,847,,,,,,677,677,677,457,457,,,457,,,,,,677,677', '457,457,677,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,677,677,677,677,,677,677,677,677,,,,,677,677,524,524,,,524', ',677,,677,677,677,,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,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,218,218,525,,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', '642,642,218,,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,267,267,642,,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,1110,1110,267,,1110,,,,', ',,,1110,1110,,1110,1110,1110,1110,1110,1110,1110,,,1110,1110,,,,1110', '1110,1110,1110,,,,,,1110,,,,,,,,1110,1110,,1110,1110,1110,1110,1110', '1110,1110,1110,1110,1110,1110,1110,1114,1114,1110,,1114,,,,,,,,1114', '1114,,1114,1114,1114,1114,1114,1114,1114,,,1114,1114,,,,1114,1114,1114', '1114,,,,,,1114,,,,,,,,1114,1114,,1114,1114,1114,1114,1114,1114,1114', '1114,1114,1114,1114,1114,533,533,1114,,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,533,533,533,533,534,534,533,,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,597,597,534,,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,641,641,597,,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,603,603,641,,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,217,217,603,,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,596,596,217,,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,604,604,596', ',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,1115,1115,604,,1115,,,,,,,,1115,1115,,1115,1115,1115,1115', '1115,1115,1115,,,1115,1115,,,,1115,1115,1115,1115,,,,,,1115,,,,,,,,1115', '1115,,1115,1115,1115,1115,1115,1115,1115,1115,1115,1115,1115,1115,458', '458,1115,,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,,347,458,347,347,347,347,347,,744,,744,744,744', '744,744,347,,,,,,,,744,,,,,,,,,,,,,,347,347,,,,,,,744,347,347,347,347', ',,,347,744,744,744,744,,,,744' ] racc_action_check = arr = ::Array.new(27126, 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 = [ 3972, 1322, nil, 406, nil, 19401, 1653, 1152, 24045, 23917, 1151, nil, 1117, 1116, 465, 1159, 931, 549, nil, -72, 18087, 1236, 1217, nil, 281, nil, 301, 18752, 18862, 18996, 19127, 19258, nil, 2964, 22196, 22327, nil, 1110, 501, 447, 1179, 19925, 20056, 241, 20318, 20449, 714, 20735, 1096, 705, nil, nil, nil, nil, nil, nil, nil, nil, nil, 21007, nil, 21148, 21279, 21410, -13, nil, 21541, 21672, nil, nil, 5111, 22466, 22597, 22728, 24890, nil, nil, nil, nil, nil, 922, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 110, nil, nil, 664, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1222, nil, 5790, nil, nil, nil, nil, 5933, 6064, 6195, 6326, 6469, nil, 2100, nil, 616, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1085, nil, 2676, 6600, 6731, 6862, 6993, 7124, 7255, 26707, 26097, nil, nil, 7648, 7779, 7910, nil, nil, 814, 438, 387, 1161, 301, 1066, 1120, nil, 8434, 1668, 1115, nil, 8696, 8827, 8958, 9089, 9220, 9351, 9482, 9613, 9744, 9875, 10006, 10137, 16886, 10399, 10530, 10661, 10792, 10923, 11054, 11185, 11316, 11447, nil, nil, nil, nil, 11578, nil, nil, 26219, nil, nil, 1107, 11971, 12102, nil, nil, nil, nil, nil, nil, nil, 12233, nil, 1812, nil, 1046, 1042, nil, 12626, 1084, 12757, nil, nil, 12888, 13019, nil, nil, -76, nil, 13293, 1797, 1058, 1021, 4260, 1034, 1073, 996, 22859, 4980, 937, 964, 1081, 1064, 1236, nil, 1029, 987, 249, nil, nil, nil, 1027, 249, 971, 21803, nil, 333, 1422, 2532, 4404, 1035, nil, 1033, 15969, nil, 16100, 3108, 1509, 950, nil, 594, 360, 984, 961, 264, 975, nil, nil, 27013, 771, -10, 109, 17410, 4548, 4836, 72, 1038, 911, 39, -18, 1380, 989, 40, 1018, nil, nil, 939, 672, 564, nil, 1085, nil, 930, 10268, nil, nil, nil, 818, 815, -55, 716, 639, 638, 637, 602, 340, nil, 308, nil, 13150, nil, 373, 382, 434, 485, 488, -45, -34, 440, nil, nil, nil, nil, nil, nil, nil, nil, 922, 23661, nil, nil, nil, nil, 918, nil, 986, 887, 5647, 886, nil, nil, 828, nil, 941, -56, 929, nil, nil, 1380, nil, nil, nil, nil, nil, 1524, 831, nil, 807, 802, 251, 174, 17822, nil, nil, nil, 332, 803, 839, nil, nil, 15701, 14089, nil, nil, nil, 191, nil, 827, 25896, 26951, 19532, -85, 18349, 15298, 17681, 24747, 2820, 4116, 924, 987, 824, 822, 818, 801, 4836, 4692, 4548, 3684, 3540, 3252, 3108, 2964, 2676, 2651, 2560, 3828, 3972, 1668, 4260, nil, 17551, nil, nil, nil, nil, 18218, 725, 719, nil, nil, nil, 718, nil, nil, 19663, nil, 19794, nil, 20187, nil, 585, nil, nil, nil, 20592, 1365, nil, 703, 698, nil, nil, 693, 23260, 694, 8041, 25975, 26036, 1075, 636, nil, 23129, 579, nil, 12495, 26402, 26463, 13948, 3396, 2100, 14893, 676, 661, 528, 563, nil, 15838, nil, nil, 16362, nil, nil, nil, nil, 24328, nil, 510, 485, 470, nil, 465, 455, 410, nil, nil, nil, nil, nil, nil, nil, nil, 364, 2403, nil, nil, 17279, nil, nil, nil, -5, nil, nil, nil, 404, nil, nil, 377, 1236, 400, nil, 1092, 90, 377, 368, 175, 342, 16624, 16493, 26768, 26524, 31, nil, nil, 636, nil, 26646, 26829, 16231, nil, nil, 60, 2532, 253, nil, 217, nil, nil, nil, 1219, nil, nil, nil, 148, nil, nil, 302, nil, 371, nil, nil, 122, nil, 71, nil, nil, nil, 23789, nil, 15036, 42, 14762, 14631, 14500, 26585, 26158, 14369, 14226, 439, 66, 13817, 13686, 12364, 11840, -40, nil, nil, 8565, 8172, -69, nil, nil, nil, 309, 334, 444, 222, 1336, 1374, nil, 1351, nil, nil, 609, 220, 1327, nil, 674, nil, nil, 25896, 21007, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1371, 262, nil, 1287, 1408, nil, 1389, 173, nil, nil, nil, 1283, 1285, 1384, nil, 1256, nil, 1274, 18611, nil, nil, 18480, nil, -80, 22065, 1227, nil, 1220, 246, 233, 1260, 358, 699, 1259, 1207, 21934, nil, 1264, -26, 1309, 5516, nil, nil, nil, 331, 3, 1202, 757, nil, nil, 618, nil, 25564, nil, 27021, nil, 22374, nil, 17956, nil, 2433, nil, 1230, 1233, 1143, 1240, nil, nil, nil, nil, nil, 791, nil, 1363, nil, nil, nil, nil, nil, 1378, 1379, nil, nil, 26, 1262, -19, 8, -1, -4, 3684, 1083, 741, nil, 1291, 3828, 7517, nil, 1427, 4692, 551, 25074, 24566, nil, nil, nil, nil, nil, nil, 948, nil, nil, nil, nil, nil, nil, nil, nil, -100, 11709, -50, 284, 248, 554, 0, nil, 2244, 15429, nil, 151, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 15560, 16755, 17017, 17148, -51, 370, 24423, 121, 139, 25365, 25463, 518, 25659, nil, 871, nil, 25757, 803, 25798, nil, nil, nil, nil, nil, nil, 15167, nil, 557, nil, nil, 555, nil, nil, 17515, 1524, nil, nil, nil, nil, 575, 359, nil, nil, 711, nil, 2820, 595, 658, nil, nil, nil, nil, nil, nil, 620, 669, 630, nil, 717, nil, nil, 641, 654, nil, 657, 669, nil, 682, nil, nil, 690, 2374, 2756, nil, nil, 820, nil, 7386, 823, nil, nil, 24649, 20866, 3540, 10, 841, nil, 845, -78, 3396, nil, 850, 730, 732, nil, 152, nil, 736, 733, -83, nil, nil, 5385, 5254, nil, nil, nil, nil, -83, 764, 770, 25267, nil, 789, -32, 796, nil, nil, nil, 25169, nil, nil, 235, 814, 816, nil, 817, 842, nil, -69, nil, nil, 1956, 1380, nil, 841, 843, 851, nil, 852, 855, 856, nil, 882, 874, 872, 23522, nil, nil, nil, nil, 2244, nil, nil, 36, 23391, nil, 2388, 1956, 1654, nil, nil, 24230, nil, 25662, nil, 17551, nil, 24636, nil, nil, nil, nil, 914, 919, nil, 145, nil, 146, 602, -38, nil, nil, nil, 210, nil, nil, nil, 1046, nil, nil, nil, nil, 967, nil, nil, nil, 972, 928, 150, nil, 934, 25561, 1016, 988, 475, nil, nil, nil, nil, nil, nil, 219, nil, nil, 1269, nil, nil, nil, 17570, nil, 24750, nil, 24960, nil, nil, 991, 22998, 1278, 1050, nil, 1812, 9, 32, 1108, 1073, 33, nil, 1018, 1124, 452, nil, nil, nil, 1001, 1002, 1015, 1028, 2413, 2900, 4116, nil, 13555, 13424, 24227, nil, nil, nil, nil, 3252, nil, 1040, 24325, 24129, 1048, nil, nil, nil, nil, nil, 1049, nil, nil, 1053, 1055, 1057, 1058, nil, 1066, nil, 820, 26280, nil, 1198, 8303, 26341, 26890, 35, nil, nil, nil, 1798, 24426, nil, nil, nil, nil, 1086, 462, 4404, nil, nil, nil, 1215, 24973, 1096, 1100, 25071, nil, 24132, nil, 22906, nil, 17544, nil, 25270, nil, nil, 1159, 1160, nil, 1122, 136, 142, 143, 39, nil, 1142, nil, 515, nil, 1146, nil, 1159, 1163, 1183, 1184, 79, nil, nil, nil, nil, 25172, nil, nil, nil, nil, 1193, nil ] racc_action_default = [ -3, -706, -1, -692, -4, -706, -7, -706, -706, -706, -706, -30, -706, -706, -35, -706, -706, -293, -47, -694, -706, -54, -58, -59, -60, -64, -270, -270, -270, -306, -336, -337, -76, -12, -80, -88, -90, -706, -592, -593, -706, -706, -706, -706, -706, -706, -228, -706, -694, -242, -284, -285, -286, -287, -288, -289, -290, -291, -292, -680, -295, -299, -705, -670, -314, -396, -706, -706, -56, -56, -692, -706, -706, -706, -706, -338, -339, -341, -532, -533, -534, -535, -556, -538, -539, -558, -560, -543, -548, -552, -554, -570, -571, -572, -556, -574, -576, -577, -578, -579, -678, -581, -582, -679, -584, -585, -586, -587, -588, -589, -590, -591, -596, -597, -706, -2, -693, -701, -702, -703, -6, -706, -706, -706, -706, -706, -8, -3, -18, -706, -119, -120, -121, -122, -123, -124, -125, -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, -197, -198, -199, -23, -126, -12, -706, -706, -706, -706, -706, -260, -706, -706, -690, -691, -706, -706, -694, -695, -51, -706, -592, -593, -706, -293, -706, -706, -234, -706, -12, -706, -52, -211, -212, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -243, -244, -245, -246, -706, -405, -407, -706, -688, -689, -65, -260, -706, -313, -411, -420, -422, -71, -417, -72, -694, -73, -249, -265, -274, -274, -269, -706, -275, -706, -556, -672, -706, -706, -74, -75, -692, -13, -706, -16, -706, -78, -12, -694, -706, -81, -84, -12, -96, -97, -706, -706, -104, -306, -309, -694, -706, -336, -337, -340, -418, -706, -86, -706, -92, -303, -706, -213, -214, -575, -222, -223, -706, -235, -706, -12, -297, -694, -250, -698, -698, -706, -706, -698, -706, -315, -316, -626, -55, -706, -706, -706, -12, -12, -692, -706, -693, -592, -593, -706, -706, -293, -706, -351, -352, -114, -115, -706, -117, -706, -293, -600, -706, -592, -593, -329, -119, -120, -159, -160, -161, -177, -182, -189, -192, -331, -706, -668, -706, -536, -706, -706, -706, -706, -706, -706, -706, -706, 1178, -5, -704, -24, -25, -26, -27, -28, -706, -706, -20, -21, -22, -127, -706, -31, -34, -280, -706, -706, -279, -32, -706, -36, -706, -293, -44, -46, -200, -254, -275, -48, -49, -37, -201, -254, -694, -261, -274, -274, -681, -682, -270, -415, -683, -684, -682, -681, -270, -414, -416, -683, -684, -43, -208, -50, -694, -312, -706, -706, -706, -260, -303, -706, -706, -706, -706, -209, -210, -215, -216, -217, -218, -219, -220, -224, -225, -226, -227, -229, -230, -231, -232, -233, -236, -237, -238, -239, -694, -247, -426, -270, -681, -682, -62, -66, -627, -694, -694, -271, -424, -426, -694, -308, -266, -706, -267, -706, -272, -706, -276, -706, -675, -677, -11, -693, -15, -17, -694, -77, -301, -93, -82, -706, -694, -260, -706, -706, -103, -706, -575, -706, -89, -94, -706, -706, -706, -706, -248, -240, -706, -524, -706, -694, -706, -251, -700, -699, -253, -700, -304, -305, -671, -397, -626, -400, -667, -667, -667, -609, -611, -611, -611, -625, -628, -629, -630, -631, -632, -633, -634, -635, -706, -637, -639, -641, -646, -648, -649, -652, -657, -659, -660, -662, -663, -664, -706, -12, -342, -343, -12, -706, -706, -706, -706, -706, -706, -260, -706, -706, -303, -56, -114, -115, -116, -706, -706, -260, -325, -598, -706, -12, -603, -333, -694, -537, -557, -562, -706, -564, -540, -559, -706, -561, -542, -706, -545, -706, -547, -550, -706, -551, -706, -573, -9, -19, -706, -29, -706, -283, -706, -706, -260, -706, -706, -706, -706, -419, -706, -262, -264, -706, -706, -67, -259, -412, -706, -706, -69, -413, -311, -696, -681, -682, -681, -682, -694, -53, -445, -447, -449, -452, -505, -459, -462, -465, -498, -503, -504, -706, -706, -508, -509, -510, -511, -512, -513, -514, -515, -516, -396, -518, -706, -706, -522, -706, -706, -427, -61, -408, -424, -256, -257, -706, -386, -706, -307, -274, -273, -277, -706, -673, -674, -706, -14, -79, -706, -85, -91, -694, -681, -682, -258, -685, -102, -706, -87, -706, -207, -221, -694, -705, -705, -296, -298, -300, -698, -706, -694, -706, -606, -607, -706, -608, -706, -618, -706, -621, -706, -623, -706, -353, -706, -355, -357, -360, -363, -694, -640, -650, -651, -661, -665, -705, -344, -705, -57, -345, -346, -319, -320, -706, -706, -432, -322, -706, -694, -681, -682, -685, -302, -12, -114, -115, -118, -694, -12, -706, -327, -706, -12, -626, -626, -706, -669, -563, -566, -567, -568, -569, -12, -541, -544, -546, -549, -553, -555, -128, -33, -281, -706, -694, -681, -682, -682, -681, -45, -255, -706, -697, -274, -39, -203, -40, -204, -68, -41, -206, -42, -205, -70, -706, -706, -706, -706, -419, -706, -706, -450, -451, -706, -706, -706, -706, -461, -706, -464, -706, -501, -502, -506, -507, -517, -519, -115, -520, -706, -406, -386, -410, -409, -706, -421, -387, -694, -12, -423, -268, -278, -676, -83, -419, -95, -310, -705, -349, -12, -525, -705, -526, -527, -252, -398, -401, -403, -390, -706, -667, -647, -652, -666, -610, -611, -611, -638, -611, -611, -658, -611, -635, -653, -694, -706, -706, -362, -636, -706, -347, -706, -706, -321, -323, -706, -706, -12, -419, -706, -419, -706, -706, -12, -330, -706, -694, -694, -627, -706, -334, -706, -282, -419, -38, -202, -263, -706, -446, -448, -455, -458, -467, -694, -694, -468, -474, -706, -479, -485, -486, -488, -489, -492, -493, -556, -496, -694, -694, -521, -694, -706, -556, -694, -499, -500, -241, -12, -63, -667, -667, -667, -368, -370, -370, -370, -385, -706, -694, -635, -643, -644, -655, -425, -10, -12, -531, -350, -706, -706, -529, -12, -12, -706, -399, -605, -706, -614, -706, -616, -706, -619, -706, -622, -624, -354, -356, -358, -361, -317, -706, -318, -706, -437, -440, -443, -444, -277, -705, -324, -326, -599, -706, -332, -601, -602, -604, -603, -565, -453, -454, -483, -469, -472, -475, -477, -706, -706, -491, -706, -495, -497, -456, -457, -460, -463, -706, -466, -428, -706, -365, -366, -367, -376, -378, -706, -381, -706, -383, -388, -706, -706, -642, -706, -530, -12, -592, -593, -706, -706, -293, -528, -706, -706, -694, -392, -394, -395, -611, -611, -611, -611, -706, -706, -12, -433, -706, -706, -441, -429, -430, -431, -328, -12, -476, -470, -706, -706, -480, -481, -484, -487, -490, -494, -667, -645, -369, -370, -370, -370, -370, -656, -370, -389, -654, -706, -303, -524, -260, -706, -706, -303, -402, -404, -391, -706, -706, -612, -615, -617, -620, -359, -705, -12, -438, -439, -442, -706, -706, -473, -478, -706, -364, -706, -373, -706, -375, -706, -379, -706, -382, -384, -302, -685, -523, -694, -681, -682, -685, -302, -393, -611, -348, -705, -335, -471, -482, -370, -370, -370, -370, -419, -613, -434, -435, -436, -706, -371, -374, -377, -380, -370, -372 ] clist = [ '39,222,283,283,283,39,338,390,345,434,385,119,346,133,133,38,217,593', '266,397,38,540,729,770,268,305,225,504,352,353,334,136,136,39,309,309', '128,209,418,419,709,569,788,349,350,585,588,354,38,308,308,274,278,432', '602,319,319,6,496,452,304,39,6,553,495,738,739,741,904,665,892,358,374', '374,374,561,38,267,119,133,126,872,709,270,277,279,357,373,373,373,530', '329,319,319,319,706,1027,706,401,402,403,404,115,285,285,285,322,440', '446,348,348,895,116,348,969,907,39,1003,336,938,952,493,955,303,701', '39,1070,39,755,543,546,38,431,550,301,884,340,343,451,1072,38,1093,38', '2,120,1106,623,625,284,284,284,863,891,983,893,371,375,489,1001,281', '294,295,979,694,348,348,348,348,712,355,208,364,414,6,703,407,645,464', '764,504,698,339,405,709,6,634,332,1094,341,283,697,387,619,621,624,624', '342,362,606,386,335,1134,1135,749,541,848,849,939,953,337,39,784,956', '918,609,509,610,413,424,791,1022,424,1002,450,971,38,457,424,973,1069', '551,887,880,1106,735,39,986,412,987,706,706,488,441,1160,283,283,569', '1094,1094,498,38,499,664,283,769,399,429,430,1155,856,1084,972,304,1007', '1168,453,454,910,736,1128,406,1072,970,1008,1010,933,934,838,839,1011', '561,841,843,845,1095,1096,1097,876,715,1094,782,1,1161,1126,389,787', '724,527,39,452,1102,432,39,391,119,962,309,39,899,392,524,393,394,38', '531,395,717,38,396,542,793,308,38,309,859,892,533,319,589,304,417,417', '951,951,304,39,1001,951,308,798,425,274,785,425,319,278,285,440,446', '425,38,890,39,39,285,514,886,1100,895,596,,,119,,1131,1085,,38,38,528', '726,,1055,515,959,960,892,520,853,590,591,,,749,17,,268,902,774,17,', '284,516,,348,512,990,522,783,284,,1073,497,301,951,513,833,,301,,500', ',133,842,720,608,646,17,312,312,,,641,720,801,,801,,,,136,612,283,809', '1157,633,569,,569,611,,,,937,937,17,937,865,,,958,,966,592,1088,361', '370,370,1103,869,1104,,,450,687,652,709,,693,912,916,657,892,,920,1045', '1046,1047,,,,868,441,569,569,,720,820,822,,,,825,827,720,,283,651,,', '17,,823,656,,921,924,828,,17,1169,17,531,39,652,1009,913,561,561,,531', '309,,706,879,915,951,954,38,309,450,440,446,749,749,,308,,887,450,,', '319,,308,,696,,1162,441,319,928,,1033,,,974,877,441,779,865,,,,,,819', '821,283,,,824,826,,,,922,705,283,936,,728,,,,39,,,39,1170,,,,,17,1149', '423,765,,423,38,,450,38,1017,423,,,450,39,1137,,761,283,,763,786,,734', '17,,441,975,,38,,,,,441,,,,,,850,39,,966,133,966,858,966,39,,424,646', '450,1043,,,38,,646,930,424,424,136,38,,424,424,805,,,,441,820,822,827', '825,,,1068,878,1086,,687,687,1060,,,17,,,569,17,,937,,312,17,857,806', '1037,1038,,1039,,646,814,1079,,1080,,531,,312,,,749,749,,773,309,,870', ',883,17,,818,,,,309,,925,966,308,966,,966,929,966,319,17,17,,,308,,974', ',974,652,319,,657,,,,,,,,646,,,,,966,917,,,646,,425,,,930,,,,1132,,', '425,425,39,,,425,425,39,,,,39,,,646,,,38,,133,,39,38,,,,38,975,,914', ',975,,975,,975,38,,,981,344,,646,985,,424,,,926,,,348,,,,974,,,687,', ',687,687,,687,,885,883,687,687,687,,417,,,,,,,,,,,,,,39,,,,,,,,,,,39', '1034,,,38,743,745,747,1041,1005,,,,,,38,978,679,1166,894,,896,,17,975', ',975,982,975,455,975,312,1150,,,,687,,39,312,,,,,39,,,,,,,1016,,38,', ',,975,1021,38,646,646,,646,,1013,687,,,,425,,,,687,348,,,,,,883,,,,', '501,,39,,,415,428,,965,17,,,17,,,374,,38,,,39,,,517,1062,,39,39,,,373', ',,17,,38,319,,,1061,797,38,38,,720,319,,1059,,,,968,,1067,,,,,,,17,', ',423,,,,17,,,,687,,423,423,,,,423,423,,506,,508,,,510,511,,,,1119,,', ',,374,,1129,1130,39,,,1114,,,,,,,,373,,,,38,,319,,39,,,,687,,,283,1112', '39,,,687,687,,38,,,,312,,,,,38,679,679,1127,,888,312,,888,680,,,450', ',,16,,450,,,16,348,348,,,39,,,,646,687,658,,687,,226,441,1074,,1075', '38,1076,,,226,226,226,1099,16,310,310,965,1158,965,,965,,,,,17,,,681', ',17,,637,,17,,,699,700,,,16,704,,17,,226,226,,,226,359,369,369,,,,,713', ',,1105,423,1107,716,,,,,,,,,992,994,,996,998,,999,,,,732,15,,,,,15,', ',,,684,967,16,,,,,226,226,226,226,16,965,16,965,17,965,,965,,,,,15,', '707,17,344,,710,679,,,679,679,,679,,1156,,679,679,679,,,965,,,,,,15', ',,685,1163,,1164,,1165,792,,,,17,,707,,,344,17,,,,,,,,,,,,,,,,,682,1176', ',,,,680,680,756,16,226,422,226,226,422,226,,,679,15,422,226,226,,,,', '17,15,428,15,,,,16,,,,,,370,,,,,17,,,679,1065,,17,17,,,,679,,,,681,681', ',,,,,,,,226,226,,807,,1122,1123,1124,1125,226,,,707,344,,,,,,871,,,', ',,,888,16,,,967,16,967,,967,310,16,,,,,,,15,,15,903,,15,,,370,310,,15', '17,684,684,,,,,,,16,,,,15,679,,,,866,17,,867,,,,226,16,16,17,,,,,1167', ',,,,,680,875,,680,680,,680,226,,,680,680,680,,,,685,685,,898,,,,226', ',,967,679,967,17,967,,967,935,,679,679,15,,,,15,,,,,15,,,682,682,,,', '681,,,681,681,967,681,,,,681,681,681,,,1049,1051,1053,,,15,680,,679', ',927,679,,,,,,,,,,,15,15,,226,,1000,,,,,,,,,680,,,,,,,,680,,,,,1019', '1020,684,,,684,684,,684,,,681,684,684,684,,,1024,1025,,,,,,,,,,,,16', ',,,,,,1042,310,,226,681,,,,,310,,,681,,,,,,226,685,,,685,685,,685,,1012', ',685,685,685,,,,,,,,,684,680,,,,,,344,1139,1141,1143,1145,682,1146,', '682,682,,682,,,,682,682,682,16,,,16,,684,,,,,226,,,684,,,,,,,226,,,', '16,,,,680,685,681,,15,,,,680,680,,,,,,1172,1173,1174,1175,,,,,16,,,422', '226,,1177,16,685,,,682,,422,422,,685,,422,422,,,,,,,,680,,,680,681,', ',,,,,,681,681,682,,,,684,,,,682,,,,15,,,15,,,,,,,,,,,,,,,,,,,13,,15', '310,,13,681,,,681,,,,,310,,,,,,,,684,,685,,,,,15,684,684,15,13,,,15', ',,,,683,15,15,,,,15,15,,,,,,,,,682,,,,13,,,,,,,16,,,363,684,16,226,684', '685,16,,,,,,,685,685,,16,,,,,,,,,,,,,,,,26,,422,,,26,682,,,,,,,13,682', '682,,,,,26,,13,685,13,,685,,,26,26,26,,26,,,,,,,,,,,,,,,,16,,,,,,,682', ',,682,16,26,,,,,26,26,,15,26,,,,15,,,,15,,,,,,,,,,15,,,,226,,,,,686', '16,,,,,,16,,15,13,,420,,,420,,,,26,,420,,,26,26,26,26,26,,26,,,,,13', ',,,,,,,,,,,,,,,16,,,683,683,15,,,,,,,,1057,,,15,,16,,,,1063,,16,16,', ',,,,,,,,,,,,,,,,,,,,13,,,,13,,,15,,13,,,,15,,26,26,26,26,26,26,26,,', ',,26,26,26,,,,,,,,,13,,,26,,,,,,,1109,,,,16,,,13,13,,15,,,,,,,,,,,,', '16,,226,226,,15,26,26,,16,,15,15,,,26,,,,,,,,,,,,,,,,,,26,226,,,26,', ',,,26,,683,686,686,683,683,16,683,,,,683,683,683,,,,,,,,,,,,,,26,,,', ',,,,,,,,,,,15,26,26,26,,,,,,,,,,,,,,,,15,,,26,,,,,,15,,,,,,683,,,,26', ',,,,,,,,,,,,,,29,,,,,29,,13,,,,683,,,,15,,,,683,29,,,,,,,,,29,29,29', ',29,,,,,,,,,,,,,,,,,,,,,,,26,,,,,29,,,,686,29,29,686,686,29,686,,,,686', '686,686,,13,,,13,,,,,,,,,,,,,,,,,,,,683,13,,,,,,,26,,,,,,29,,,,26,29', '29,29,29,29,,29,,,13,,,420,,26,,13,,,686,,,420,420,,,,420,420,,,,,683', ',,,,,,,683,683,,,,,,,686,,,,,,,,686,,,,26,,,26,,,,,,,26,,,,,,,,,,26', ',683,,26,683,,,29,29,29,29,29,29,29,,,,,29,29,29,,,,,,,,,,26,,29,26', '26,,,26,,,,,,26,26,,,,26,26,,,,,,,,,686,,,,,,,,,,29,29,13,,,,,13,,29', ',13,,,,,,,,,,13,,,,,,29,,,,29,,,,,29,,,420,,,686,,,,,,,,686,686,,,,', ',,,,,,,,29,,,,,,,,,,,,,,,,29,29,29,,,,13,,,,,,686,,,686,,13,,,,29,,', ',26,,,,,26,26,,,26,,,29,,,,,,,26,,,,,,,,,,,13,,,,,,13,26,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,29,26,,,,,,,,,,,26,,,13,,,,1066', ',13,13,,,,,,,,,,,,,,,,,,,,,,26,,,,,,26,,,,29,,26,,,,,,,,29,,,,,,,,,', ',,,,,29,,,,,,,,,,,,,,,,13,,,,,26,,,,,,,,,,,,,,13,,,,26,,,,,13,26,26', '29,,,29,,,,,,,29,,,,,,,,,,29,,,,29,,,,,,,,,,,,,13,,,,,,,,,,,,,,29,,', '29,29,,,29,,,,,,29,29,,,,29,29,,26,,233,,,,,,,,,282,282,282,,,,,,26', ',26,26,327,328,,330,331,26,333,,,,,,,,,,,,,,,282,282,,,,,,,,26,,,,,', ',,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,29', ',,,,29,29,,,29,,,,,,,,,,29,,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,282,427,,,433,282,,,,,433,,,29,,,,,,,,,,233,29,,,465,466', '467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483', '484,485,486,,,,,487,,,29,,,,282,282,29,,,,,,29,282,,,,,,,282,,282,,', '282,282,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,29,,,,,,,,,536,,537,,,,,,,29,,', ',,,29,29,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,282,,,,,29,,,,,,,,,,,,,,,,,,,29,,29,29,,,,,,29,,,,,,,,,,282', ',433,433,433,,,,,,,,,,,29,,,,,,,,,,,,,,,29,,,,,328,,,,,,,,,282,,282', ',282,,,,,,,,,,,,,,,,282,,,,,,,,,433,,,727,,,,,,,,,282,,,282,,,,,,,,', ',,,,,,,,,,,,,,,,,282,,,,,,,,,,,,,,,,,,,,,282,282,,,,,,,,,,282,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,282,433,282,,,,815,,,282,282,433,433,,,,433', '433,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,282,,,282,,', ',,,,,,,,,,,,,,,,282,,,,,,,,,,,,,,,,,,282,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,282,,,,,,,,433,,,,,,,,,,,,,433,433,433', '433,,,,,,,,,,,,,,,,,,,,,,961,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,282,,,,,,,,,,,,,,,,,,,,282,433,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,282' ] racc_goto_table = arr = ::Array.new(4088, 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 = [ '62,34,41,41,41,62,77,184,97,30,65,106,99,66,66,61,32,102,145,184,61', '9,11,103,32,58,21,84,38,38,34,68,68,62,62,62,16,16,23,23,220,211,107', '18,18,100,100,18,61,61,61,81,81,70,63,73,73,7,82,70,10,62,7,144,30,126', '126,126,101,36,212,62,62,62,62,206,61,44,106,66,8,12,220,46,46,46,61', '61,61,61,60,71,73,73,73,85,177,85,18,18,18,18,4,80,80,80,59,45,45,25', '25,216,6,25,132,12,62,121,7,162,162,47,162,55,48,62,138,62,120,79,79', '61,27,79,54,136,80,80,27,139,61,178,61,2,5,217,196,196,78,78,78,134', '133,189,133,64,64,45,118,53,53,53,13,148,25,25,25,25,15,4,17,20,24,7', '148,26,31,37,39,84,50,78,7,220,7,69,74,177,76,41,83,95,197,197,197,197', '96,104,105,108,109,178,178,119,110,186,186,164,164,111,62,112,164,113', '114,184,115,21,21,116,117,21,122,66,123,61,32,21,130,137,140,185,141', '217,143,62,146,10,147,85,85,149,81,178,41,41,211,177,177,151,61,152', '30,41,102,5,25,25,138,155,156,136,10,157,158,25,25,159,144,160,2,139', '133,161,163,166,168,169,170,164,206,173,174,175,180,181,182,188,60,177', '63,1,177,121,192,9,60,34,62,70,132,70,62,193,106,134,62,62,120,194,32', '195,198,61,58,199,30,61,200,34,201,61,61,62,48,212,32,73,18,10,78,78', '185,185,10,62,118,185,61,202,19,81,205,19,73,81,80,45,45,19,61,210,62', '62,80,7,214,215,216,32,,,106,,162,12,,61,61,71,70,,136,8,186,186,212', '59,63,10,10,,,119,33,,32,119,30,33,,78,55,,25,4,126,55,30,78,,133,53', '54,185,6,31,,54,,53,,66,31,45,25,34,33,33,33,,,32,45,197,,197,,,,68', '25,41,30,101,16,211,,211,44,,,,36,36,33,36,84,,,36,,127,4,107,33,33', '33,133,31,133,,,66,62,81,220,,34,100,9,81,212,,9,126,126,126,,,,60,81', '211,211,,45,70,70,,,,70,70,45,,41,46,,,33,,47,46,,144,144,47,,33,12', '33,58,62,81,36,31,206,206,,58,62,,85,79,31,185,63,61,62,66,45,45,119', '119,,61,,185,66,,,73,,61,,46,,133,81,73,31,,36,,,211,23,81,38,84,,,', ',,27,27,41,,,27,27,,,,82,80,41,31,,25,,,,62,,,62,103,,,,,33,11,33,106', ',33,61,,66,61,9,33,,,66,62,126,,10,41,,10,106,,80,33,,81,213,,61,,,', ',81,,,,,,99,62,,127,66,127,97,127,62,,21,34,66,9,,,61,,34,70,21,21,68', '61,,21,21,16,,,,81,70,70,70,70,,,9,77,102,,62,62,100,,,33,,,211,33,', '36,,33,33,145,7,31,31,,31,,34,7,100,,100,,58,,33,,,119,119,,78,62,,58', ',34,33,,80,,,,62,,65,127,61,127,,127,27,127,73,33,33,,,61,,211,,211', '81,73,,81,,,,,,,,34,,,,,127,18,,,34,,19,,,70,,,,9,,,19,19,62,,,19,19', '62,,,,62,,,34,,,61,,66,,62,61,,,,61,213,,10,,213,,213,,213,61,,,77,75', ',34,77,,21,,,10,,,25,,,,211,,,62,,,62,62,,62,,125,34,62,62,62,,78,,', ',,,,,,,,,,,62,,,,,,,,,,,62,184,,,61,209,209,209,184,18,,,,,,61,10,87', '31,131,,131,,33,213,,213,10,213,56,213,33,30,,,,62,,62,33,,,,,62,,,', ',,,106,,61,,,,213,106,61,34,34,,34,,10,62,,,,19,,,,62,25,,,,,,34,,,', ',56,,62,,,75,75,,125,33,,,33,,,62,,61,,,62,,,56,62,,62,62,,,61,,,33', ',61,73,,,61,33,61,61,,45,73,,10,,,,131,,10,,,,,,,33,,,33,,,,33,,,,62', ',33,33,,,,33,33,,75,,75,,,75,75,,,,34,,,,,62,,18,18,62,,,32,,,,,,,,61', ',,,61,,73,,62,,,,62,,,41,10,62,,,62,62,,61,,,,33,,,,,61,87,87,10,,128', '33,,128,88,,,66,,,29,,66,,,29,25,25,,,62,,,,34,62,56,,62,,29,81,131', ',131,61,131,,,29,29,29,125,29,29,29,125,10,125,,125,,,,,33,,,89,,33', ',75,,33,,,56,56,,,29,56,,33,,29,29,,,29,29,29,29,,,,,56,,,131,33,131', '56,,,,,,,,,209,209,,209,209,,209,,,,56,28,,,,,28,,,,,92,128,29,,,,,29', '29,29,29,29,125,29,125,33,125,,125,,,,,28,,75,33,75,,75,87,,,87,87,', '87,,131,,87,87,87,,,125,,,,,,28,,,93,131,,131,,131,56,,,,33,,75,,,75', '33,,,,,,,,,,,,,,,,,90,131,,,,,88,88,75,29,29,29,29,29,29,29,,,87,28', '29,29,29,,,,,33,28,75,28,,,,29,,,,,,33,,,,,33,,,87,33,,33,33,,,,87,', ',,89,89,,,,,,,,,29,29,,75,,209,209,209,209,29,,,75,75,,,,,,56,,,,,,', '128,29,,,128,29,128,,128,29,29,,,,,,,28,,28,56,,28,,,33,29,,28,33,92', '92,,,,,,,29,,,,28,87,,,,75,33,,75,,,,29,29,29,33,,,,,209,,,,,,88,75', ',88,88,,88,29,,,88,88,88,,,,93,93,,75,,,,29,,,128,87,128,33,128,,128', '56,,87,87,28,,,,28,,,,,28,,,90,90,,,,89,,,89,89,128,89,,,,89,89,89,', ',129,129,129,,,28,88,,87,,75,87,,,,,,,,,,,28,28,,29,,56,,,,,,,,,88,', ',,,,,,88,,,,,56,56,92,,,92,92,,92,,,89,92,92,92,,,56,56,,,,,,,,,,,,29', ',,,,,,56,29,,29,89,,,,,29,,,89,,,,,,29,93,,,93,93,,93,,75,,93,93,93', ',,,,,,,,92,88,,,,,,75,129,129,129,129,90,129,,90,90,,90,,,,90,90,90', '29,,,29,,92,,,,,29,,,92,,,,,,,29,,,,29,,,,88,93,89,,28,,,,88,88,,,,', ',129,129,129,129,,,,,29,,,29,29,,129,29,93,,,90,,29,29,,93,,29,29,,', ',,,,,88,,,88,89,,,,,,,,89,89,90,,,,92,,,,90,,,,28,,,28,,,,,,,,,,,,,', ',,,,,22,,28,29,,22,89,,,89,,,,,29,,,,,,,,92,,93,,,,,28,92,92,28,22,', ',28,,,,,91,28,28,,,,28,28,,,,,,,,,90,,,,22,,,,,,,29,,,22,92,29,29,92', '93,29,,,,,,,93,93,,29,,,,,,,,,,,,,,,,49,,29,,,49,90,,,,,,,22,90,90,', ',,,49,,22,93,22,,93,,,49,49,49,,49,,,,,,,,,,,,,,,,29,,,,,,,90,,,90,29', '49,,,,,49,49,,28,49,,,,28,,,,28,,,,,,,,,,28,,,,29,,,,,94,29,,,,,,29', ',28,22,,22,,,22,,,,49,,22,,,49,49,49,49,49,,49,,,,,22,,,,,,,,,,,,,,', ',29,,,91,91,28,,,,,,,,29,,,28,,29,,,,29,,29,29,,,,,,,,,,,,,,,,,,,,,', '22,,,,22,,,28,,22,,,,28,,49,49,49,49,49,49,49,,,,,49,49,49,,,,,,,,,22', ',,49,,,,,,,29,,,,29,,,22,22,,28,,,,,,,,,,,,,29,,29,29,,28,49,49,,29', ',28,28,,,49,,,,,,,,,,,,,,,,,,49,29,,,49,,,,,49,,91,94,94,91,91,29,91', ',,,91,91,91,,,,,,,,,,,,,,49,,,,,,,,,,,,,,,28,49,49,49,,,,,,,,,,,,,,', ',28,,,49,,,,,,28,,,,,,91,,,,49,,,,,,,,,,,,,,,52,,,,,52,,22,,,,91,,,', '28,,,,91,52,,,,,,,,,52,52,52,,52,,,,,,,,,,,,,,,,,,,,,,,49,,,,,52,,,', '94,52,52,94,94,52,94,,,,94,94,94,,22,,,22,,,,,,,,,,,,,,,,,,,,91,22,', ',,,,,49,,,,,,52,,,,49,52,52,52,52,52,,52,,,22,,,22,,49,,22,,,94,,,22', '22,,,,22,22,,,,,91,,,,,,,,91,91,,,,,,,94,,,,,,,,94,,,,49,,,49,,,,,,', '49,,,,,,,,,,49,,91,,49,91,,,52,52,52,52,52,52,52,,,,,52,52,52,,,,,,', ',,,49,,52,49,49,,,49,,,,,,49,49,,,,49,49,,,,,,,,,94,,,,,,,,,,52,52,22', ',,,,22,,52,,22,,,,,,,,,,22,,,,,,52,,,,52,,,,,52,,,22,,,94,,,,,,,,94', '94,,,,,,,,,,,,,52,,,,,,,,,,,,,,,,52,52,52,,,,22,,,,,,94,,,94,,22,,,', '52,,,,49,,,,,49,49,,,49,,,52,,,,,,,49,,,,,,,,,,,22,,,,,,22,49,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22,,,52,49,,,,,,,,,,,49,,,22,,,', '22,,22,22,,,,,,,,,,,,,,,,,,,,,,49,,,,,,49,,,,52,,49,,,,,,,,52,,,,,,', ',,,,,,,,52,,,,,,,,,,,,,,,,22,,,,,49,,,,,,,,,,,,,,22,,,,49,,,,,22,49', '49,52,,,52,,,,,,,52,,,,,,,,,,52,,,,52,,,,,,,,,,,,,22,,,,,,,,,,,,,,52', ',,52,52,,,52,,,,,,52,52,,,,52,52,,49,,35,,,,,,,,,35,35,35,,,,,,49,,49', '49,35,35,,35,35,49,35,,,,,,,,,,,,,,,35,35,,,,,,,,49,,,,,,,,,,,,,,,49', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,52,,,,,52,52,,', '52,,,,,,,,,,52,,,,,,,,,,,,,,,,,,52,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '35,35,,,35,35,,,,,35,,,52,,,,,,,,,,35,52,,,35,35,35,35,35,35,35,35,35', '35,35,35,35,35,35,35,35,35,35,35,35,35,,,,,35,,,52,,,,35,35,52,,,,,', '52,35,,,,,,,35,,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,52,,,,,,,,,35', ',35,,,,,,,52,,,,,,52,52,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,35,,,,,52,,,,,,,,,,,,,,,,,,,52,,52,52,,,,,,52', ',,,,,,,,,35,,35,35,35,,,,,,,,,,,52,,,,,,,,,,,,,,,52,,,,,35,,,,,,,,,35', ',35,,35,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,35,,,,,,,,,35,,,35,,,,,,,,,,', ',,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35,35,,,,,,,,,,35,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,35,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(4088, 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, 291, 143, nil, 99, 139, 109, 57, 73, -314, 27, -517, -648, -710, nil, -345, 28, 161, -23, 128, 100, 6, 1829, -173, -39, 43, 47, -83, 1222, 1118, -207, -258, 0, 384, -18, 2974, -395, -60, -40, -411, nil, -27, nil, nil, 53, -110, 57, -149, -374, 1932, -312, nil, 2335, 130, 101, 90, 680, nil, -9, 71, -233, 15, 0, -313, 83, -64, 5, nil, 23, -226, -162, 48, nil, 21, 140, 754, 126, -56, 119, -210, 74, 25, -213, -299, -258, -408, nil, 427, 648, 702, 855, 1406, 768, 822, 1565, 117, 133, -56, nil, -53, -304, -693, -338, -569, 126, -173, 8, -568, 125, 140, -132, 148, -395, -573, -161, -169, -392, -705, -742, -367, -442, -784, -678, -638, nil, 106, -489, -410, 371, 584, -634, 149, -748, -590, -551, nil, -601, -759, -862, -849, -117, -503, nil, -317, -284, -4, -645, -644, -325, -24, nil, -26, -25, nil, nil, -436, -753, -647, -894, -504, -811, -637, -719, -636, -631, nil, -559, nil, -559, -393, -392, nil, nil, -390, -390, -390, nil, -844, -890, nil, -748, -747, -746, nil, -75, -506, -472, nil, -443, -723, nil, nil, 214, 218, 223, 224, -247, -199, 224, 226, 228, -296, -278, nil, nil, -265, -272, nil, nil, 321, -391, -306, -672, -240, -381, -687, -633, -905, nil, nil, -465 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 356, 299, nil, nil, 539, nil, 905, nil, 296, 297, nil, nil, nil, 11, 12, 18, 231, nil, nil, 14, nil, 421, 232, 326, nil, nil, 604, 230, 456, 21, 1026, nil, nil, nil, 351, 22, 23, 24, nil, 723, nil, nil, nil, 316, nil, 25, 313, 435, 32, nil, nil, 34, 37, 36, nil, 227, 228, 368, nil, 135, 443, 134, 79, nil, 426, 95, 46, 49, 264, 288, nil, 873, 436, nil, 437, 448, nil, 653, 502, 286, 272, 50, 51, 52, 53, 54, 55, 56, 57, 58, nil, 273, 64, nil, nil, nil, nil, nil, nil, nil, 586, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 751, 568, nil, 752, 753, 1101, 964, 555, nil, 556, 557, nil, nil, 558, nil, 560, nil, 861, nil, nil, nil, 566, nil, nil, 347, nil, nil, nil, nil, nil, nil, nil, 447, nil, nil, 702, 695, nil, nil, nil, nil, nil, nil, nil, nil, 941, nil, 666, 675, 667, 668, nil, nil, 669, 670, nil, nil, nil, 940, 942, nil, 944, 945, 946, 947, 948, nil, 577, 674, 676, nil, nil, 78, 80, 81, nil, nil, nil, nil, 614, nil, nil, nil, nil, nil, 91, 92, nil, 889, 790, 554, nil, 559, 897, 571, 573, 574, 976, 578, 977, 581, 584, 291 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 148, :_reduce_none, 2, 149, :_reduce_2, 0, 150, :_reduce_3, 1, 150, :_reduce_4, 3, 150, :_reduce_5, 2, 150, :_reduce_6, 1, 152, :_reduce_none, 2, 152, :_reduce_8, 3, 155, :_reduce_9, 4, 156, :_reduce_10, 2, 157, :_reduce_11, 0, 161, :_reduce_12, 1, 161, :_reduce_13, 3, 161, :_reduce_14, 2, 161, :_reduce_15, 1, 162, :_reduce_none, 2, 162, :_reduce_17, 0, 173, :_reduce_18, 4, 154, :_reduce_19, 3, 154, :_reduce_20, 3, 154, :_reduce_21, 3, 154, :_reduce_22, 2, 154, :_reduce_23, 3, 154, :_reduce_24, 3, 154, :_reduce_25, 3, 154, :_reduce_26, 3, 154, :_reduce_27, 3, 154, :_reduce_28, 4, 154, :_reduce_29, 1, 154, :_reduce_none, 3, 154, :_reduce_31, 3, 154, :_reduce_32, 5, 154, :_reduce_33, 3, 154, :_reduce_34, 1, 154, :_reduce_none, 3, 166, :_reduce_36, 3, 166, :_reduce_37, 6, 166, :_reduce_38, 5, 166, :_reduce_39, 5, 166, :_reduce_40, 5, 166, :_reduce_41, 5, 166, :_reduce_42, 3, 166, :_reduce_43, 1, 174, :_reduce_none, 3, 174, :_reduce_45, 1, 174, :_reduce_none, 1, 172, :_reduce_none, 3, 172, :_reduce_48, 3, 172, :_reduce_49, 3, 172, :_reduce_50, 2, 172, :_reduce_51, 0, 184, :_reduce_52, 4, 172, :_reduce_53, 1, 172, :_reduce_none, 1, 165, :_reduce_none, 0, 187, :_reduce_56, 3, 185, :_reduce_57, 1, 168, :_reduce_none, 1, 168, :_reduce_none, 1, 189, :_reduce_none, 4, 189, :_reduce_61, 0, 197, :_reduce_62, 4, 194, :_reduce_63, 1, 196, :_reduce_none, 2, 188, :_reduce_65, 3, 188, :_reduce_66, 4, 188, :_reduce_67, 5, 188, :_reduce_68, 4, 188, :_reduce_69, 5, 188, :_reduce_70, 2, 188, :_reduce_71, 2, 188, :_reduce_72, 2, 188, :_reduce_73, 2, 188, :_reduce_74, 2, 188, :_reduce_75, 1, 167, :_reduce_76, 3, 167, :_reduce_77, 1, 202, :_reduce_78, 3, 202, :_reduce_79, 1, 201, :_reduce_none, 2, 201, :_reduce_81, 3, 201, :_reduce_82, 5, 201, :_reduce_83, 2, 201, :_reduce_84, 4, 201, :_reduce_85, 2, 201, :_reduce_86, 4, 201, :_reduce_87, 1, 201, :_reduce_88, 3, 201, :_reduce_89, 1, 205, :_reduce_none, 3, 205, :_reduce_91, 2, 204, :_reduce_92, 3, 204, :_reduce_93, 1, 207, :_reduce_94, 3, 207, :_reduce_95, 1, 206, :_reduce_96, 1, 206, :_reduce_97, 4, 206, :_reduce_98, 3, 206, :_reduce_99, 3, 206, :_reduce_100, 3, 206, :_reduce_101, 3, 206, :_reduce_102, 2, 206, :_reduce_103, 1, 206, :_reduce_104, 1, 169, :_reduce_105, 1, 169, :_reduce_106, 4, 169, :_reduce_107, 3, 169, :_reduce_108, 3, 169, :_reduce_109, 3, 169, :_reduce_110, 3, 169, :_reduce_111, 2, 169, :_reduce_112, 1, 169, :_reduce_113, 1, 210, :_reduce_114, 1, 210, :_reduce_none, 2, 211, :_reduce_116, 1, 211, :_reduce_117, 3, 211, :_reduce_118, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 163, :_reduce_124, 1, 163, :_reduce_none, 1, 164, :_reduce_126, 0, 216, :_reduce_127, 4, 164, :_reduce_128, 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_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_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, 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_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_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_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_none, 3, 182, :_reduce_200, 3, 182, :_reduce_201, 6, 182, :_reduce_202, 5, 182, :_reduce_203, 5, 182, :_reduce_204, 5, 182, :_reduce_205, 5, 182, :_reduce_206, 4, 182, :_reduce_207, 3, 182, :_reduce_208, 3, 182, :_reduce_209, 3, 182, :_reduce_210, 2, 182, :_reduce_211, 2, 182, :_reduce_212, 2, 182, :_reduce_213, 2, 182, :_reduce_214, 3, 182, :_reduce_215, 3, 182, :_reduce_216, 3, 182, :_reduce_217, 3, 182, :_reduce_218, 3, 182, :_reduce_219, 3, 182, :_reduce_220, 4, 182, :_reduce_221, 2, 182, :_reduce_222, 2, 182, :_reduce_223, 3, 182, :_reduce_224, 3, 182, :_reduce_225, 3, 182, :_reduce_226, 3, 182, :_reduce_227, 1, 182, :_reduce_none, 3, 182, :_reduce_229, 3, 182, :_reduce_230, 3, 182, :_reduce_231, 3, 182, :_reduce_232, 3, 182, :_reduce_233, 2, 182, :_reduce_234, 2, 182, :_reduce_235, 3, 182, :_reduce_236, 3, 182, :_reduce_237, 3, 182, :_reduce_238, 3, 182, :_reduce_239, 3, 182, :_reduce_240, 6, 182, :_reduce_241, 1, 182, :_reduce_none, 1, 221, :_reduce_none, 1, 221, :_reduce_none, 1, 221, :_reduce_none, 1, 221, :_reduce_none, 3, 219, :_reduce_247, 3, 219, :_reduce_248, 1, 222, :_reduce_none, 1, 223, :_reduce_none, 2, 223, :_reduce_none, 4, 223, :_reduce_252, 2, 223, :_reduce_253, 1, 217, :_reduce_none, 3, 217, :_reduce_255, 3, 228, :_reduce_256, 3, 228, :_reduce_257, 0, 230, :_reduce_258, 1, 230, :_reduce_none, 0, 177, :_reduce_260, 1, 177, :_reduce_none, 2, 177, :_reduce_none, 4, 177, :_reduce_263, 2, 177, :_reduce_264, 1, 200, :_reduce_265, 2, 200, :_reduce_266, 2, 200, :_reduce_267, 4, 200, :_reduce_268, 1, 200, :_reduce_269, 0, 233, :_reduce_270, 2, 193, :_reduce_271, 2, 232, :_reduce_272, 2, 231, :_reduce_273, 0, 231, :_reduce_274, 1, 225, :_reduce_275, 2, 225, :_reduce_276, 3, 225, :_reduce_277, 4, 225, :_reduce_278, 1, 171, :_reduce_279, 1, 171, :_reduce_none, 3, 170, :_reduce_281, 4, 170, :_reduce_282, 2, 170, :_reduce_283, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_294, 0, 256, :_reduce_295, 4, 220, :_reduce_296, 0, 257, :_reduce_297, 4, 220, :_reduce_298, 0, 258, :_reduce_299, 4, 220, :_reduce_300, 3, 220, :_reduce_301, 3, 220, :_reduce_302, 2, 220, :_reduce_303, 3, 220, :_reduce_304, 3, 220, :_reduce_305, 1, 220, :_reduce_306, 4, 220, :_reduce_307, 3, 220, :_reduce_308, 1, 220, :_reduce_309, 5, 220, :_reduce_310, 4, 220, :_reduce_311, 3, 220, :_reduce_312, 2, 220, :_reduce_313, 1, 220, :_reduce_none, 2, 220, :_reduce_315, 2, 220, :_reduce_316, 6, 220, :_reduce_317, 6, 220, :_reduce_318, 4, 220, :_reduce_319, 4, 220, :_reduce_320, 5, 220, :_reduce_321, 4, 220, :_reduce_322, 5, 220, :_reduce_323, 6, 220, :_reduce_324, 0, 259, :_reduce_325, 6, 220, :_reduce_326, 0, 260, :_reduce_327, 7, 220, :_reduce_328, 0, 261, :_reduce_329, 5, 220, :_reduce_330, 0, 262, :_reduce_331, 6, 220, :_reduce_332, 0, 263, :_reduce_333, 0, 264, :_reduce_334, 9, 220, :_reduce_335, 1, 220, :_reduce_336, 1, 220, :_reduce_337, 1, 220, :_reduce_338, 1, 220, :_reduce_339, 1, 176, :_reduce_none, 1, 199, :_reduce_341, 1, 247, :_reduce_none, 1, 247, :_reduce_none, 2, 247, :_reduce_344, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 248, :_reduce_none, 5, 248, :_reduce_348, 1, 159, :_reduce_none, 2, 159, :_reduce_350, 1, 251, :_reduce_none, 1, 251, :_reduce_none, 1, 265, :_reduce_353, 3, 265, :_reduce_354, 1, 268, :_reduce_355, 3, 268, :_reduce_356, 1, 267, :_reduce_none, 3, 267, :_reduce_358, 5, 267, :_reduce_359, 1, 267, :_reduce_360, 3, 267, :_reduce_361, 2, 269, :_reduce_362, 1, 269, :_reduce_363, 4, 270, :_reduce_364, 2, 270, :_reduce_365, 2, 270, :_reduce_366, 2, 270, :_reduce_367, 1, 270, :_reduce_368, 2, 276, :_reduce_369, 0, 276, :_reduce_370, 6, 277, :_reduce_371, 8, 277, :_reduce_372, 4, 277, :_reduce_373, 6, 277, :_reduce_374, 4, 277, :_reduce_375, 2, 277, :_reduce_none, 6, 277, :_reduce_377, 2, 277, :_reduce_378, 4, 277, :_reduce_379, 6, 277, :_reduce_380, 2, 277, :_reduce_381, 4, 277, :_reduce_382, 2, 277, :_reduce_383, 4, 277, :_reduce_384, 1, 277, :_reduce_none, 0, 281, :_reduce_386, 1, 281, :_reduce_387, 3, 282, :_reduce_388, 4, 282, :_reduce_389, 1, 283, :_reduce_390, 4, 283, :_reduce_391, 1, 284, :_reduce_392, 3, 284, :_reduce_393, 1, 285, :_reduce_394, 1, 285, :_reduce_none, 0, 289, :_reduce_396, 0, 290, :_reduce_397, 4, 246, :_reduce_398, 4, 287, :_reduce_399, 1, 287, :_reduce_400, 0, 293, :_reduce_401, 4, 288, :_reduce_402, 0, 294, :_reduce_403, 4, 288, :_reduce_404, 0, 296, :_reduce_405, 4, 292, :_reduce_406, 2, 190, :_reduce_407, 4, 190, :_reduce_408, 5, 190, :_reduce_409, 5, 190, :_reduce_410, 2, 245, :_reduce_411, 4, 245, :_reduce_412, 4, 245, :_reduce_413, 3, 245, :_reduce_414, 3, 245, :_reduce_415, 3, 245, :_reduce_416, 2, 245, :_reduce_417, 1, 245, :_reduce_418, 4, 245, :_reduce_419, 0, 298, :_reduce_420, 4, 244, :_reduce_421, 0, 299, :_reduce_422, 4, 244, :_reduce_423, 0, 300, :_reduce_424, 3, 195, :_reduce_425, 0, 301, :_reduce_426, 0, 302, :_reduce_427, 4, 295, :_reduce_428, 5, 249, :_reduce_429, 1, 303, :_reduce_430, 1, 303, :_reduce_none, 0, 306, :_reduce_432, 0, 307, :_reduce_433, 7, 250, :_reduce_434, 1, 305, :_reduce_435, 1, 305, :_reduce_none, 1, 304, :_reduce_437, 3, 304, :_reduce_438, 3, 304, :_reduce_439, 1, 308, :_reduce_none, 2, 308, :_reduce_441, 3, 308, :_reduce_442, 1, 308, :_reduce_443, 1, 308, :_reduce_444, 1, 183, :_reduce_none, 3, 312, :_reduce_446, 1, 312, :_reduce_none, 3, 314, :_reduce_448, 1, 314, :_reduce_none, 1, 316, :_reduce_450, 1, 317, :_reduce_451, 1, 315, :_reduce_none, 4, 315, :_reduce_453, 4, 315, :_reduce_454, 3, 315, :_reduce_455, 4, 315, :_reduce_456, 4, 315, :_reduce_457, 3, 315, :_reduce_458, 0, 320, :_reduce_459, 4, 315, :_reduce_460, 2, 315, :_reduce_461, 0, 321, :_reduce_462, 4, 315, :_reduce_463, 2, 315, :_reduce_464, 0, 322, :_reduce_465, 4, 315, :_reduce_466, 1, 309, :_reduce_467, 1, 309, :_reduce_468, 2, 309, :_reduce_469, 3, 309, :_reduce_470, 5, 309, :_reduce_471, 2, 309, :_reduce_472, 4, 309, :_reduce_473, 1, 309, :_reduce_none, 2, 323, :_reduce_475, 3, 323, :_reduce_476, 2, 310, :_reduce_477, 4, 310, :_reduce_478, 1, 310, :_reduce_479, 3, 310, :_reduce_480, 1, 325, :_reduce_481, 3, 325, :_reduce_482, 1, 324, :_reduce_none, 3, 311, :_reduce_484, 1, 311, :_reduce_485, 1, 311, :_reduce_486, 3, 311, :_reduce_487, 1, 311, :_reduce_488, 1, 326, :_reduce_489, 3, 326, :_reduce_490, 2, 329, :_reduce_491, 1, 329, :_reduce_492, 1, 330, :_reduce_493, 3, 330, :_reduce_494, 2, 327, :_reduce_495, 1, 327, :_reduce_496, 2, 328, :_reduce_497, 1, 318, :_reduce_none, 3, 318, :_reduce_499, 3, 318, :_reduce_500, 2, 318, :_reduce_501, 2, 318, :_reduce_502, 1, 318, :_reduce_none, 1, 318, :_reduce_none, 1, 318, :_reduce_none, 2, 318, :_reduce_506, 2, 318, :_reduce_507, 1, 333, :_reduce_none, 1, 333, :_reduce_none, 1, 333, :_reduce_none, 1, 333, :_reduce_none, 1, 333, :_reduce_none, 1, 333, :_reduce_none, 1, 333, :_reduce_none, 1, 333, :_reduce_none, 1, 333, :_reduce_516, 2, 333, :_reduce_517, 1, 313, :_reduce_518, 2, 334, :_reduce_519, 2, 319, :_reduce_520, 3, 319, :_reduce_521, 1, 319, :_reduce_522, 6, 158, :_reduce_523, 0, 158, :_reduce_524, 1, 335, :_reduce_525, 1, 335, :_reduce_none, 1, 335, :_reduce_none, 2, 336, :_reduce_528, 1, 336, :_reduce_none, 2, 160, :_reduce_530, 1, 160, :_reduce_none, 1, 234, :_reduce_none, 1, 234, :_reduce_none, 1, 235, :_reduce_534, 1, 338, :_reduce_535, 2, 338, :_reduce_536, 3, 339, :_reduce_537, 1, 339, :_reduce_538, 1, 339, :_reduce_539, 3, 236, :_reduce_540, 4, 237, :_reduce_541, 3, 238, :_reduce_542, 0, 342, :_reduce_543, 3, 342, :_reduce_544, 1, 343, :_reduce_545, 2, 343, :_reduce_546, 3, 240, :_reduce_547, 0, 345, :_reduce_548, 3, 345, :_reduce_549, 3, 239, :_reduce_550, 3, 241, :_reduce_551, 0, 346, :_reduce_552, 3, 346, :_reduce_553, 0, 347, :_reduce_554, 3, 347, :_reduce_555, 0, 331, :_reduce_556, 2, 331, :_reduce_557, 0, 340, :_reduce_558, 2, 340, :_reduce_559, 0, 341, :_reduce_560, 2, 341, :_reduce_561, 1, 344, :_reduce_562, 2, 344, :_reduce_563, 0, 349, :_reduce_564, 4, 344, :_reduce_565, 1, 348, :_reduce_566, 1, 348, :_reduce_567, 1, 348, :_reduce_568, 1, 348, :_reduce_none, 1, 215, :_reduce_none, 1, 215, :_reduce_none, 1, 350, :_reduce_572, 3, 351, :_reduce_573, 1, 337, :_reduce_574, 2, 337, :_reduce_575, 1, 218, :_reduce_576, 1, 218, :_reduce_577, 1, 218, :_reduce_578, 1, 218, :_reduce_579, 1, 208, :_reduce_580, 1, 208, :_reduce_581, 1, 208, :_reduce_582, 1, 208, :_reduce_583, 1, 208, :_reduce_584, 1, 209, :_reduce_585, 1, 209, :_reduce_586, 1, 209, :_reduce_587, 1, 209, :_reduce_588, 1, 209, :_reduce_589, 1, 209, :_reduce_590, 1, 209, :_reduce_591, 1, 242, :_reduce_592, 1, 242, :_reduce_593, 1, 175, :_reduce_594, 1, 175, :_reduce_595, 1, 180, :_reduce_596, 1, 180, :_reduce_597, 0, 352, :_reduce_598, 4, 252, :_reduce_599, 0, 252, :_reduce_600, 3, 254, :_reduce_601, 3, 254, :_reduce_602, 0, 354, :_reduce_603, 3, 254, :_reduce_604, 4, 353, :_reduce_605, 2, 353, :_reduce_606, 2, 353, :_reduce_607, 2, 353, :_reduce_608, 1, 353, :_reduce_609, 2, 356, :_reduce_610, 0, 356, :_reduce_611, 6, 291, :_reduce_612, 8, 291, :_reduce_613, 4, 291, :_reduce_614, 6, 291, :_reduce_615, 4, 291, :_reduce_616, 6, 291, :_reduce_617, 2, 291, :_reduce_618, 4, 291, :_reduce_619, 6, 291, :_reduce_620, 2, 291, :_reduce_621, 4, 291, :_reduce_622, 2, 291, :_reduce_623, 4, 291, :_reduce_624, 1, 291, :_reduce_625, 0, 291, :_reduce_626, 1, 229, :_reduce_627, 1, 286, :_reduce_628, 1, 286, :_reduce_629, 1, 286, :_reduce_630, 1, 286, :_reduce_631, 1, 266, :_reduce_none, 1, 266, :_reduce_633, 1, 358, :_reduce_634, 1, 359, :_reduce_635, 3, 359, :_reduce_636, 1, 278, :_reduce_637, 3, 278, :_reduce_638, 1, 360, :_reduce_639, 2, 361, :_reduce_640, 1, 361, :_reduce_641, 2, 362, :_reduce_642, 1, 362, :_reduce_643, 1, 271, :_reduce_644, 3, 271, :_reduce_645, 1, 355, :_reduce_646, 3, 355, :_reduce_647, 1, 332, :_reduce_none, 1, 332, :_reduce_none, 2, 274, :_reduce_650, 2, 272, :_reduce_651, 1, 272, :_reduce_652, 3, 363, :_reduce_653, 3, 364, :_reduce_654, 1, 279, :_reduce_655, 3, 279, :_reduce_656, 1, 357, :_reduce_657, 3, 357, :_reduce_658, 1, 365, :_reduce_none, 1, 365, :_reduce_none, 2, 280, :_reduce_661, 1, 280, :_reduce_662, 1, 366, :_reduce_none, 1, 366, :_reduce_none, 2, 275, :_reduce_665, 2, 273, :_reduce_666, 0, 273, :_reduce_667, 1, 255, :_reduce_none, 3, 255, :_reduce_669, 0, 243, :_reduce_670, 2, 243, :_reduce_none, 1, 227, :_reduce_672, 3, 227, :_reduce_673, 3, 367, :_reduce_674, 2, 367, :_reduce_675, 4, 367, :_reduce_676, 2, 367, :_reduce_677, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 297, :_reduce_none, 1, 297, :_reduce_none, 1, 297, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 179, :_reduce_690, 1, 179, :_reduce_691, 0, 151, :_reduce_none, 1, 151, :_reduce_none, 0, 181, :_reduce_none, 1, 181, :_reduce_none, 2, 203, :_reduce_696, 2, 178, :_reduce_697, 0, 226, :_reduce_none, 1, 226, :_reduce_none, 1, 226, :_reduce_none, 1, 253, :_reduce_701, 1, 253, :_reduce_none, 1, 153, :_reduce_none, 2, 153, :_reduce_none, 0, 224, :_reduce_705 ] racc_reduce_n = 706 racc_shift_n = 1178 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tDSTAR => 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, :tREGEXP_OPT => 119, :tWORDS_BEG => 120, :tQWORDS_BEG => 121, :tSYMBOLS_BEG => 122, :tQSYMBOLS_BEG => 123, :tSTRING_DBEG => 124, :tSTRING_DVAR => 125, :tSTRING_END => 126, :tSTRING_DEND => 127, :tSTRING => 128, :tSYMBOL => 129, :tNL => 130, :tEH => 131, :tCOLON => 132, :tCOMMA => 133, :tSPACE => 134, :tSEMI => 135, :tLAMBDA => 136, :tLAMBEG => 137, :tCHARACTER => 138, :tRATIONAL => 139, :tIMAGINARY => 140, :tLABEL_END => 141, :tANDDOT => 142, :tBDOT2 => 143, :tBDOT3 => 144, :tEQL => 145, :tLOWEST => 146 } racc_nt_base = 147 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tDSTAR", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING_DEND", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tANDDOT", "tBDOT2", "tBDOT3", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "begin_block", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "lhs", "mrhs", "mrhs_arg", "expr", "@1", "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "opt_nl", "arg", "p_expr", "@2", "expr_value_do", "do", "@3", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "brace_body", "fcall", "@4", "operation", "k_return", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "user_variable", "keyword_variable", "cname", "cpath", "fname", "op", "reswords", "symbol", "@5", "arg_rhs", "simple_numeric", "rel_expr", "primary", "relop", "arg_value", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "args_forward", "opt_paren_args", "opt_block_arg", "block_arg", "@6", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "case_body", "p_case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "f_marg", "f_norm_arg", "f_margs", "f_marg_list", "f_rest_marg", "block_args_tail", "f_block_kwarg", "f_kwrest", "opt_f_block_arg", "f_no_kwarg", "f_block_arg", "opt_block_args_tail", "block_param", "f_arg", "f_block_optarg", "f_rest_arg", "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@16", "@17", "f_args", "do_block", "@18", "@19", "do_body", "@20", "operation3", "@21", "@22", "@23", "@24", "@25", "cases", "p_top_expr", "p_cases", "@26", "@27", "p_top_expr_body", "p_args", "p_args_tail", "p_kwargs", "p_as", "p_variable", "p_alt", "p_expr_basic", "p_lparen", "p_lbracket", "p_value", "p_const", "@28", "@29", "@30", "p_args_head", "p_arg", "p_args_post", "p_kwarg", "p_kwrest", "p_kwnorest", "p_kw", "p_kw_label", "string_contents", "kwrest_mark", "p_primitive", "p_var_ref", "exc_list", "exc_var", "numeric", "string", "string1", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "symbol_list", "qword_list", "qsym_list", "string_dvar", "@31", "ssym", "dsym", "@32", "args_tail", "@33", "f_kwarg", "opt_args_tail", "f_optarg", "f_arg_asgn", "f_arg_item", "f_label", "f_kw", "f_block_kw", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], *val[1]) result end def _reduce_9(val, _values, result) result = val result end def _reduce_10(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :error, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_11(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_12(val, _values, result) result = [] result end def _reduce_13(val, _values, result) result = [ val[0] ] result end def _reduce_14(val, _values, result) result = val[0] << val[2] result end def _reduce_15(val, _values, result) result = [ val[1] ] result end # reduce 16 omitted def _reduce_17(val, _values, result) diagnostic :error, :begin_in_method, nil, val[0] result end def _reduce_18(val, _values, result) @lexer.state = :expr_fname result end def _reduce_19(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_20(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_21(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_22(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_23(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_24(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_25(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_26(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_27(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_28(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_29(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 30 omitted def _reduce_31(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_32(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_33(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) begin_body = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.multi_assign(val[0], val[1], begin_body) result end def _reduce_34(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end # reduce 35 omitted def _reduce_36(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_37(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_38(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_39(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_40(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_41(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_42(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_43(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end # reduce 44 omitted def _reduce_45(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end # reduce 46 omitted # reduce 47 omitted def _reduce_48(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_49(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_50(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_51(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_52(val, _values, result) @lexer.state = :expr_beg @lexer.command_start = false pattern_variables.push result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_53(val, _values, result) @lexer.in_kwarg = val[2] result = @builder.in_match(val[0], val[1], val[3]) result end # reduce 54 omitted # reduce 55 omitted def _reduce_56(val, _values, result) @lexer.cond.push(true) result end def _reduce_57(val, _values, result) @lexer.cond.pop result = [ val[1], val[2] ] result end # reduce 58 omitted # reduce 59 omitted # reduce 60 omitted def _reduce_61(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_62(val, _values, result) @context.push(:block) result end def _reduce_63(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end # reduce 64 omitted def _reduce_65(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_66(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_67(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_68(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_69(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_70(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_71(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_72(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_73(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_74(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_75(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_76(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_77(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_78(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_79(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 80 omitted def _reduce_81(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_82(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_83(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_84(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_85(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_86(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_87(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_88(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_89(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 90 omitted def _reduce_91(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_92(val, _values, result) result = [ val[0] ] result end def _reduce_93(val, _values, result) result = val[0] << val[1] result end def _reduce_94(val, _values, result) result = [ val[0] ] result end def _reduce_95(val, _values, result) result = val[0] << val[2] result end def _reduce_96(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_97(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_98(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_99(val, _values, result) if (val[1][0] == :anddot) diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] end result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_100(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_101(val, _values, result) if (val[1][0] == :anddot) diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] end result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_102(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_103(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_104(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_105(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_106(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_107(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_108(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_109(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_110(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_111(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_112(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_113(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_114(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 115 omitted def _reduce_116(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_117(val, _values, result) result = @builder.const(val[0]) result end def _reduce_118(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 119 omitted # reduce 120 omitted # reduce 121 omitted # reduce 122 omitted # reduce 123 omitted def _reduce_124(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 125 omitted def _reduce_126(val, _values, result) result = [ val[0] ] result end def _reduce_127(val, _values, result) @lexer.state = :expr_fname result end def _reduce_128(val, _values, result) result = val[0] << val[3] result end # 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 # reduce 197 omitted # reduce 198 omitted # reduce 199 omitted def _reduce_200(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_201(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_202(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_203(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_204(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_205(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_206(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_207(val, _values, result) const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) result end def _reduce_208(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.range_inclusive(val[0], val[1], nil) result end def _reduce_212(val, _values, result) result = @builder.range_exclusive(val[0], val[1], nil) result end def _reduce_213(val, _values, result) result = @builder.range_inclusive(nil, val[0], val[1]) result end def _reduce_214(val, _values, result) result = @builder.range_exclusive(nil, val[0], val[1]) result end def _reduce_215(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_218(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) result end def _reduce_222(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_223(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_225(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end # reduce 228 omitted def _reduce_229(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_230(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_231(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_232(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_233(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_235(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_236(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_237(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_238(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_239(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_240(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_241(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 242 omitted # reduce 243 omitted # reduce 244 omitted # reduce 245 omitted # reduce 246 omitted def _reduce_247(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_248(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end # reduce 249 omitted # reduce 250 omitted # reduce 251 omitted def _reduce_252(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_253(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end # reduce 254 omitted def _reduce_255(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_256(val, _values, result) result = val result end def _reduce_257(val, _values, result) unless @static_env.declared_forward_args? diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] end result = [val[0], [@builder.forwarded_args(val[1])], val[2]] result end def _reduce_258(val, _values, result) result = [ nil, [], nil ] result end # reduce 259 omitted def _reduce_260(val, _values, result) result = [] result end # reduce 261 omitted # reduce 262 omitted def _reduce_263(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_264(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_265(val, _values, result) result = [ val[0] ] result end def _reduce_266(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_267(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_268(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_269(val, _values, result) result = [ val[0] ] result end def _reduce_270(val, _values, result) # When branch gets invoked by RACC's lookahead # and command args start with '[' or '(' # we need to put `true` to the cmdarg stack # **before** `false` pushed by lexer # m [], n # ^ # Right here we have cmdarg [...0] because # lexer pushed it on '[' # We need to modify cmdarg stack to [...10] # # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack # and later lexer pushes corresponding bits on top of it. last_token = @last_token[0] lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.push(true) @lexer.cmdarg.push(top) else @lexer.cmdarg.push(true) end result end def _reduce_271(val, _values, result) # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) # but the push must be done after cmdarg.pop() in the parser. # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, # cmdarg.pop() to pop 1 pushed by command_args, # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. last_token = @last_token[0] lookahead = last_token == :tLBRACE_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.pop @lexer.cmdarg.push(top) else @lexer.cmdarg.pop end result = val[1] result end def _reduce_272(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_273(val, _values, result) result = [ val[1] ] result end def _reduce_274(val, _values, result) result = [] result end def _reduce_275(val, _values, result) result = [ val[0] ] result end def _reduce_276(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_277(val, _values, result) result = val[0] << val[2] result end def _reduce_278(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_279(val, _values, result) result = @builder.array(nil, val[0], nil) result end # reduce 280 omitted def _reduce_281(val, _values, result) result = val[0] << val[2] result end def _reduce_282(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_283(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end # reduce 284 omitted # reduce 285 omitted # reduce 286 omitted # reduce 287 omitted # reduce 288 omitted # reduce 289 omitted # reduce 290 omitted # reduce 291 omitted # reduce 292 omitted # reduce 293 omitted def _reduce_294(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_295(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_296(val, _values, result) @lexer.cmdarg.pop result = @builder.begin_keyword(val[0], val[2], val[3]) result end def _reduce_297(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_298(val, _values, result) result = @builder.begin(val[0], val[1], val[3]) result end def _reduce_299(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_300(val, _values, result) result = @builder.begin(val[0], nil, val[3]) result end def _reduce_301(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_302(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_303(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_304(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_305(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_306(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_307(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_308(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_309(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_310(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_311(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_312(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_313(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 314 omitted def _reduce_315(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_316(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_317(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_318(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) result end def _reduce_319(val, _values, result) result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) result end def _reduce_320(val, _values, result) result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) result end def _reduce_321(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_322(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_323(val, _values, result) *in_bodies, (else_t, else_body) = *val[3] result = @builder.case_match(val[0], val[1], in_bodies, else_t, else_body, val[4]) result end def _reduce_324(val, _values, result) result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) result end def _reduce_325(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:class) result end def _reduce_326(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_327(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:sclass) result end def _reduce_328(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_329(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) result end def _reduce_330(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.cmdarg.pop @static_env.unextend result end def _reduce_331(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:def) @current_arg_stack.push(nil) result end def _reduce_332(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop @current_arg_stack.pop result end def _reduce_333(val, _values, result) @lexer.state = :expr_fname result end def _reduce_334(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:defs) @current_arg_stack.push(nil) result end def _reduce_335(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop @current_arg_stack.pop result end def _reduce_336(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_337(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_338(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_339(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 340 omitted def _reduce_341(val, _values, result) if @context.in_class? diagnostic :error, :invalid_return, nil, val[0] end result end # reduce 342 omitted # reduce 343 omitted def _reduce_344(val, _values, result) result = val[1] result end # reduce 345 omitted # reduce 346 omitted # reduce 347 omitted def _reduce_348(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 349 omitted def _reduce_350(val, _values, result) result = val result end # reduce 351 omitted # reduce 352 omitted def _reduce_353(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_354(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_355(val, _values, result) result = [ val[0] ] result end def _reduce_356(val, _values, result) result = val[0] << val[2] result end # reduce 357 omitted def _reduce_358(val, _values, result) result = val[0]. push(val[2]) result end def _reduce_359(val, _values, result) result = val[0]. push(val[2]). concat(val[4]) result end def _reduce_360(val, _values, result) result = [ val[0] ] result end def _reduce_361(val, _values, result) result = [ val[0], *val[2] ] result end def _reduce_362(val, _values, result) result = @builder.restarg(val[0], val[1]) result end def _reduce_363(val, _values, result) result = @builder.restarg(val[0]) result end def _reduce_364(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_365(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_366(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_367(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_368(val, _values, result) result = [ val[0] ] result end def _reduce_369(val, _values, result) result = val[1] result end def _reduce_370(val, _values, result) result = [] result end def _reduce_371(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_372(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_373(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_374(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_375(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 376 omitted def _reduce_377(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_378(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_379(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_380(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_381(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_382(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_383(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_384(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 385 omitted def _reduce_386(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_387(val, _values, result) @lexer.state = :expr_value result end def _reduce_388(val, _values, result) @max_numparam_stack.has_ordinary_params! @current_arg_stack.set(nil) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_389(val, _values, result) @max_numparam_stack.has_ordinary_params! @current_arg_stack.set(nil) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_390(val, _values, result) result = [] result end def _reduce_391(val, _values, result) result = val[2] result end def _reduce_392(val, _values, result) result = [ val[0] ] result end def _reduce_393(val, _values, result) result = val[0] << val[2] result end def _reduce_394(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 395 omitted def _reduce_396(val, _values, result) @static_env.extend_dynamic @max_numparam_stack.push @context.push(:lambda) result end def _reduce_397(val, _values, result) @context.pop @lexer.cmdarg.push(false) result end def _reduce_398(val, _values, result) args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] result = [ args, val[3] ] @max_numparam_stack.pop @static_env.unextend @lexer.cmdarg.pop result end def _reduce_399(val, _values, result) @max_numparam_stack.has_ordinary_params! result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_400(val, _values, result) if val[0].any? @max_numparam_stack.has_ordinary_params! end result = @builder.args(nil, val[0], nil) result end def _reduce_401(val, _values, result) @context.push(:lambda) result end def _reduce_402(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_403(val, _values, result) @context.push(:lambda) result end def _reduce_404(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_405(val, _values, result) @context.push(:block) result end def _reduce_406(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_407(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_408(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_409(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_410(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_411(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_412(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_413(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_414(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_415(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_416(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_417(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_418(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_419(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_420(val, _values, result) @context.push(:block) result end def _reduce_421(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_422(val, _values, result) @context.push(:block) result end def _reduce_423(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_424(val, _values, result) @static_env.extend_dynamic @max_numparam_stack.push result end def _reduce_425(val, _values, result) args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] result = [ args, val[2] ] @max_numparam_stack.pop @static_env.unextend result end def _reduce_426(val, _values, result) @static_env.extend_dynamic @max_numparam_stack.push result end def _reduce_427(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_428(val, _values, result) args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] result = [ args, val[3] ] @max_numparam_stack.pop @static_env.unextend @lexer.cmdarg.pop result end def _reduce_429(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_430(val, _values, result) result = [ val[0] ] result end # reduce 431 omitted def _reduce_432(val, _values, result) @lexer.state = :expr_beg @lexer.command_start = false @pattern_variables.push @pattern_hash_keys.push result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_433(val, _values, result) @lexer.in_kwarg = val[1] result end def _reduce_434(val, _values, result) result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]), *val[6] ] result end def _reduce_435(val, _values, result) result = [ val[0] ] result end # reduce 436 omitted def _reduce_437(val, _values, result) result = [ val[0], nil ] result end def _reduce_438(val, _values, result) result = [ val[0], @builder.if_guard(val[1], val[2]) ] result end def _reduce_439(val, _values, result) result = [ val[0], @builder.unless_guard(val[1], val[2]) ] result end # reduce 440 omitted def _reduce_441(val, _values, result) # array patterns that end with comma # like 1, 2, # must be emitted as `array_pattern_with_tail` item = @builder.match_with_trailing_comma(val[0]) result = @builder.array_pattern(nil, [ item ], nil) result end def _reduce_442(val, _values, result) result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) result end def _reduce_443(val, _values, result) result = @builder.array_pattern(nil, val[0], nil) result end def _reduce_444(val, _values, result) result = @builder.hash_pattern(nil, val[0], nil) result end # reduce 445 omitted def _reduce_446(val, _values, result) result = @builder.match_as(val[0], val[1], val[2]) result end # reduce 447 omitted def _reduce_448(val, _values, result) result = @builder.match_alt(val[0], val[1], val[2]) result end # reduce 449 omitted def _reduce_450(val, _values, result) result = val[0] @pattern_hash_keys.push result end def _reduce_451(val, _values, result) result = val[0] @pattern_hash_keys.push result end # reduce 452 omitted def _reduce_453(val, _values, result) @pattern_hash_keys.pop pattern = @builder.array_pattern(nil, val[2], nil) result = @builder.const_pattern(val[0], val[1], pattern, val[3]) result end def _reduce_454(val, _values, result) @pattern_hash_keys.pop pattern = @builder.hash_pattern(nil, val[2], nil) result = @builder.const_pattern(val[0], val[1], pattern, val[3]) result end def _reduce_455(val, _values, result) result = @builder.const_pattern(val[0], val[1], nil, val[2]) result end def _reduce_456(val, _values, result) @pattern_hash_keys.pop pattern = @builder.array_pattern(nil, val[2], nil) result = @builder.const_pattern(val[0], val[1], pattern, val[3]) result end def _reduce_457(val, _values, result) @pattern_hash_keys.pop pattern = @builder.hash_pattern(nil, val[2], nil) result = @builder.const_pattern(val[0], val[1], pattern, val[3]) result end def _reduce_458(val, _values, result) result = @builder.const_pattern(val[0], val[1], nil, val[2]) result end def _reduce_459(val, _values, result) @pattern_hash_keys.push result end def _reduce_460(val, _values, result) @pattern_hash_keys.pop result = @builder.array_pattern(val[0], val[2], val[3]) result end def _reduce_461(val, _values, result) result = @builder.array_pattern(val[0], [], val[1]) result end def _reduce_462(val, _values, result) @pattern_hash_keys.push result end def _reduce_463(val, _values, result) @pattern_hash_keys.pop result = @builder.hash_pattern(val[0], val[2], val[3]) result end def _reduce_464(val, _values, result) result = @builder.hash_pattern(val[0], [], val[1]) result end def _reduce_465(val, _values, result) @pattern_hash_keys.push result end def _reduce_466(val, _values, result) @pattern_hash_keys.pop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_467(val, _values, result) result = [ val[0] ] result end def _reduce_468(val, _values, result) result = val[0] result end def _reduce_469(val, _values, result) result = [ *val[0], val[1] ] result end def _reduce_470(val, _values, result) match_rest = @builder.match_rest(val[1], val[2]) result = [ *val[0], match_rest ] result end def _reduce_471(val, _values, result) match_rest = @builder.match_rest(val[1], val[2]) result = [ *val[0], match_rest, *val[4] ] result end def _reduce_472(val, _values, result) result = [ *val[0], @builder.match_rest(val[1]) ] result end def _reduce_473(val, _values, result) result = [ *val[0], @builder.match_rest(val[1]), *val[3] ] result end # reduce 474 omitted def _reduce_475(val, _values, result) # array patterns that end with comma # like [1, 2,] # must be emitted as `array_pattern_with_tail` item = @builder.match_with_trailing_comma(val[0]) result = [ item ] result end def _reduce_476(val, _values, result) # array patterns that end with comma # like [1, 2,] # must be emitted as `array_pattern_with_tail` last_item = @builder.match_with_trailing_comma(val[1]) result = [ *val[0], last_item ] result end def _reduce_477(val, _values, result) match_rest = @builder.match_rest(val[0], val[1]) result = [ match_rest ] result end def _reduce_478(val, _values, result) match_rest = @builder.match_rest(val[0], val[1]) result = [ match_rest, *val[3] ] result end def _reduce_479(val, _values, result) match_rest = @builder.match_rest(val[0]) result = [ match_rest ] result end def _reduce_480(val, _values, result) match_rest = @builder.match_rest(val[0]) result = [ match_rest, *val[2] ] result end def _reduce_481(val, _values, result) result = [ val[0] ] result end def _reduce_482(val, _values, result) result = [ *val[0], val[2] ] result end # reduce 483 omitted def _reduce_484(val, _values, result) result = [ *val[0], *val[2] ] result end def _reduce_485(val, _values, result) result = val[0] result end def _reduce_486(val, _values, result) result = val[0] result end def _reduce_487(val, _values, result) result = [ *val[0], *val[2] ] result end def _reduce_488(val, _values, result) result = [ *val[0], *val[2] ] result end def _reduce_489(val, _values, result) result = [ val[0] ] result end def _reduce_490(val, _values, result) result = [ *val[0], val[2] ] result end def _reduce_491(val, _values, result) result = @builder.match_pair(*val[0], val[1]) result end def _reduce_492(val, _values, result) result = @builder.match_label(*val[0]) result end def _reduce_493(val, _values, result) check_kwarg_name(val[0]) result = [:label, val[0]] result end def _reduce_494(val, _values, result) result = [:quoted, [val[0], val[1], val[2]]] result end def _reduce_495(val, _values, result) result = [ @builder.match_rest(val[0], val[1]) ] result end def _reduce_496(val, _values, result) result = [ @builder.match_rest(val[0], nil) ] result end def _reduce_497(val, _values, result) result = [ @builder.match_nil_pattern(val[0], val[1]) ] result end # reduce 498 omitted def _reduce_499(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_500(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_501(val, _values, result) result = @builder.range_inclusive(val[0], val[1], nil) result end def _reduce_502(val, _values, result) result = @builder.range_exclusive(val[0], val[1], nil) result end # reduce 503 omitted # reduce 504 omitted # reduce 505 omitted def _reduce_506(val, _values, result) result = @builder.range_inclusive(nil, val[0], val[1]) result end def _reduce_507(val, _values, result) result = @builder.range_exclusive(nil, val[0], val[1]) result end # 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) result = @builder.accessible(val[0]) result end def _reduce_517(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_518(val, _values, result) result = @builder.match_var(val[0]) result end def _reduce_519(val, _values, result) lvar = @builder.accessible(@builder.ident(val[1])) result = @builder.pin(val[0], lvar) result end def _reduce_520(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_521(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_522(val, _values, result) result = @builder.const(val[0]) result end def _reduce_523(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_524(val, _values, result) result = [] result end def _reduce_525(val, _values, result) result = [ val[0] ] result end # reduce 526 omitted # reduce 527 omitted def _reduce_528(val, _values, result) result = [ val[0], val[1] ] result end # reduce 529 omitted def _reduce_530(val, _values, result) result = [ val[0], val[1] ] result end # reduce 531 omitted # reduce 532 omitted # reduce 533 omitted def _reduce_534(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_535(val, _values, result) result = [ val[0] ] result end def _reduce_536(val, _values, result) result = val[0] << val[1] result end def _reduce_537(val, _values, result) string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_538(val, _values, result) string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_539(val, _values, result) result = @builder.character(val[0]) result end def _reduce_540(val, _values, result) string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_541(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_542(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_543(val, _values, result) result = [] result end def _reduce_544(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_545(val, _values, result) result = [ val[0] ] result end def _reduce_546(val, _values, result) result = val[0] << val[1] result end def _reduce_547(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_548(val, _values, result) result = [] result end def _reduce_549(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_550(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_551(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_552(val, _values, result) result = [] result end def _reduce_553(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_554(val, _values, result) result = [] result end def _reduce_555(val, _values, result) result = val[0] << @builder.symbol_internal(val[1]) result end def _reduce_556(val, _values, result) result = [] result end def _reduce_557(val, _values, result) result = val[0] << val[1] result end def _reduce_558(val, _values, result) result = [] result end def _reduce_559(val, _values, result) result = val[0] << val[1] result end def _reduce_560(val, _values, result) result = [] result end def _reduce_561(val, _values, result) result = val[0] << val[1] result end def _reduce_562(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_563(val, _values, result) result = val[1] result end def _reduce_564(val, _values, result) @lexer.cmdarg.push(false) @lexer.cond.push(false) result end def _reduce_565(val, _values, result) @lexer.cmdarg.pop @lexer.cond.pop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_566(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_567(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_568(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 569 omitted # reduce 570 omitted # reduce 571 omitted def _reduce_572(val, _values, result) @lexer.state = :expr_end result = @builder.symbol(val[0]) result end def _reduce_573(val, _values, result) @lexer.state = :expr_end result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_574(val, _values, result) result = val[0] result end def _reduce_575(val, _values, result) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end result end def _reduce_576(val, _values, result) @lexer.state = :expr_end result = @builder.integer(val[0]) result end def _reduce_577(val, _values, result) @lexer.state = :expr_end result = @builder.float(val[0]) result end def _reduce_578(val, _values, result) @lexer.state = :expr_end result = @builder.rational(val[0]) result end def _reduce_579(val, _values, result) @lexer.state = :expr_end result = @builder.complex(val[0]) result end def _reduce_580(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_581(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_582(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_583(val, _values, result) result = @builder.const(val[0]) result end def _reduce_584(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_585(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_586(val, _values, result) result = @builder.self(val[0]) result end def _reduce_587(val, _values, result) result = @builder.true(val[0]) result end def _reduce_588(val, _values, result) result = @builder.false(val[0]) result end def _reduce_589(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_590(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_591(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_592(val, _values, result) if (node = val[0]) && node.type == :ident name = node.children[0] if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && context.in_dynamic_block? # definitely an implicit param location = node.loc.expression if max_numparam_stack.has_ordinary_params? diagnostic :error, :ordinary_param_defined, nil, [nil, location] end raw_context = context.stack.dup raw_max_numparam_stack = max_numparam_stack.stack.dup # ignore current block scope raw_context.pop raw_max_numparam_stack.pop raw_context.reverse_each do |outer_scope| if outer_scope == :block || outer_scope == :lambda outer_scope_has_numparams = raw_max_numparam_stack.pop > 0 if outer_scope_has_numparams diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] else # for now it's ok, but an outer scope can also be a block # with numparams, so we need to continue end else # found an outer scope that can't have numparams # like def/class/etc break end end static_env.declare(name) max_numparam_stack.register(name[1].to_i) end end result = @builder.accessible(val[0]) result end def _reduce_593(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_594(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_595(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_596(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_597(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_598(val, _values, result) @lexer.state = :expr_value result end def _reduce_599(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_600(val, _values, result) result = nil result end def _reduce_601(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_602(val, _values, result) result = @builder.forward_args(val[0], val[1], val[2]) @static_env.declare_forward_args @lexer.state = :expr_value result end def _reduce_603(val, _values, result) result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_604(val, _values, result) @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) result end def _reduce_605(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_606(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_607(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_608(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_609(val, _values, result) result = [ val[0] ] result end def _reduce_610(val, _values, result) result = val[1] result end def _reduce_611(val, _values, result) result = [] result end def _reduce_612(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_613(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_614(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_615(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_616(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_617(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_618(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_619(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_620(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_621(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_622(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_623(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_624(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_625(val, _values, result) result = val[0] result end def _reduce_626(val, _values, result) result = [] result end def _reduce_627(val, _values, result) result = val[0] result end def _reduce_628(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_629(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_630(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_631(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 632 omitted def _reduce_633(val, _values, result) @static_env.declare val[0][0] @max_numparam_stack.has_ordinary_params! result = val[0] result end def _reduce_634(val, _values, result) @current_arg_stack.set(val[0][0]) result = val[0] result end def _reduce_635(val, _values, result) @current_arg_stack.set(0) result = @builder.arg(val[0]) result end def _reduce_636(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_637(val, _values, result) result = [ val[0] ] result end def _reduce_638(val, _values, result) result = val[0] << val[2] result end def _reduce_639(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] @max_numparam_stack.has_ordinary_params! @current_arg_stack.set(val[0][0]) result = val[0] result end def _reduce_640(val, _values, result) @current_arg_stack.set(nil) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_641(val, _values, result) @current_arg_stack.set(nil) result = @builder.kwarg(val[0]) result end def _reduce_642(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_643(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_644(val, _values, result) result = [ val[0] ] result end def _reduce_645(val, _values, result) result = val[0] << val[2] result end def _reduce_646(val, _values, result) result = [ val[0] ] result end def _reduce_647(val, _values, result) result = val[0] << val[2] result end # reduce 648 omitted # reduce 649 omitted def _reduce_650(val, _values, result) result = [ @builder.kwnilarg(val[0], val[1]) ] result end def _reduce_651(val, _values, result) @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] result end def _reduce_652(val, _values, result) result = [ @builder.kwrestarg(val[0]) ] result end def _reduce_653(val, _values, result) @current_arg_stack.set(0) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_654(val, _values, result) @current_arg_stack.set(0) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_655(val, _values, result) result = [ val[0] ] result end def _reduce_656(val, _values, result) result = val[0] << val[2] result end def _reduce_657(val, _values, result) result = [ val[0] ] result end def _reduce_658(val, _values, result) result = val[0] << val[2] result end # reduce 659 omitted # reduce 660 omitted def _reduce_661(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_662(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 663 omitted # reduce 664 omitted def _reduce_665(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_666(val, _values, result) result = [ val[1] ] result end def _reduce_667(val, _values, result) result = [] result end # reduce 668 omitted def _reduce_669(val, _values, result) result = val[1] result end def _reduce_670(val, _values, result) result = [] result end # reduce 671 omitted def _reduce_672(val, _values, result) result = [ val[0] ] result end def _reduce_673(val, _values, result) result = val[0] << val[2] result end def _reduce_674(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_675(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end def _reduce_676(val, _values, result) result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) result end def _reduce_677(val, _values, result) result = @builder.kwsplat(val[0], val[1]) result end # reduce 678 omitted # reduce 679 omitted # reduce 680 omitted # reduce 681 omitted # reduce 682 omitted # reduce 683 omitted # reduce 684 omitted # reduce 685 omitted # reduce 686 omitted # reduce 687 omitted # reduce 688 omitted # reduce 689 omitted def _reduce_690(val, _values, result) result = [:dot, val[0][1]] result end def _reduce_691(val, _values, result) result = [:anddot, val[0][1]] result end # reduce 692 omitted # reduce 693 omitted # reduce 694 omitted # reduce 695 omitted def _reduce_696(val, _values, result) result = val[1] result end def _reduce_697(val, _values, result) result = val[1] result end # reduce 698 omitted # reduce 699 omitted # reduce 700 omitted def _reduce_701(val, _values, result) yyerrok result end # reduce 702 omitted # reduce 703 omitted # reduce 704 omitted def _reduce_705(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby27 end # module Parser parser-2.7.0.2/lib/parser/base.rb0000644000004100000410000001741213617025313016513 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # Base class for version-specific parsers. # # @api public # # @!attribute [r] diagnostics # @return [Parser::Diagnostic::Engine] # # @!attribute [r] static_env # @return [Parser::StaticEnvironment] # class Base < Racc::Parser ## # Parses a string of Ruby code and returns the AST. If the source # cannot be parsed, {SyntaxError} is raised and a diagnostic is # printed to `stderr`. # # @example # Parser::Base.parse('puts "hello"') # # @param [String] string The block of code to parse. # @param [String] file The name of the file the code originated from. # @param [Numeric] line The initial line number. # @return [Parser::AST::Node] # def self.parse(string, file='(string)', line=1) parser = default_parser source_buffer = setup_source_buffer(file, line, string, parser.default_encoding) parser.parse(source_buffer) end ## # Parses a string of Ruby code and returns the AST and comments. If the # source cannot be parsed, {SyntaxError} is raised and a diagnostic is # printed to `stderr`. # # @example # Parser::Base.parse_with_comments('puts "hello"') # # @param [String] string The block of code to parse. # @param [String] file The name of the file the code originated from. # @param [Numeric] line The initial line number. # @return [Array] # def self.parse_with_comments(string, file='(string)', line=1) parser = default_parser source_buffer = setup_source_buffer(file, line, string, parser.default_encoding) parser.parse_with_comments(source_buffer) end ## # Parses Ruby source code by reading it from a file. If the source # cannot be parsed, {SyntaxError} is raised and a diagnostic is # printed to `stderr`. # # @param [String] filename Path to the file to parse. # @return [Parser::AST::Node] # @see #parse # def self.parse_file(filename) parse(File.read(filename), filename) end ## # Parses Ruby source code by reading it from a file and returns the AST and # comments. If the source cannot be parsed, {SyntaxError} is raised and a # diagnostic is printed to `stderr`. # # @param [String] filename Path to the file to parse. # @return [Array] # @see #parse # def self.parse_file_with_comments(filename) parse_with_comments(File.read(filename), filename) end ## # @return [Parser::Base] parser with the default options set. # def self.default_parser parser = new parser.diagnostics.all_errors_are_fatal = true parser.diagnostics.ignore_warnings = true parser.diagnostics.consumer = lambda do |diagnostic| $stderr.puts(diagnostic.render) end parser end def self.setup_source_buffer(file, line, string, encoding) string = string.dup.force_encoding(encoding) source_buffer = Source::Buffer.new(file, line) if name == 'Parser::Ruby18' source_buffer.raw_source = string else source_buffer.source = string end source_buffer end private_class_method :setup_source_buffer attr_reader :diagnostics attr_reader :builder attr_reader :static_env attr_reader :source_buffer attr_reader :context attr_reader :max_numparam_stack attr_reader :current_arg_stack attr_reader :pattern_variables attr_reader :pattern_hash_keys ## # @param [Parser::Builders::Default] builder The AST builder to use. # def initialize(builder=Parser::Builders::Default.new) @diagnostics = Diagnostic::Engine.new @static_env = StaticEnvironment.new # Stack that holds current parsing context @context = Context.new # Maximum numbered parameters stack @max_numparam_stack = MaxNumparamStack.new # Current argument names stack @current_arg_stack = CurrentArgStack.new # Stack of set of variables used in the current pattern @pattern_variables = VariablesStack.new # Stack of set of keys used in the current hash in pattern matchinig @pattern_hash_keys = VariablesStack.new @lexer = Lexer.new(version) @lexer.diagnostics = @diagnostics @lexer.static_env = @static_env @lexer.context = @context @builder = builder @builder.parser = self # Last emitted token @last_token = nil if self.class::Racc_debug_parser && ENV['RACC_DEBUG'] @yydebug = true end reset end ## # Resets the state of the parser. # def reset @source_buffer = nil @lexer.reset @static_env.reset @context.reset @current_arg_stack.reset @pattern_variables.reset @pattern_hash_keys.reset self end ## # Parses a source buffer and returns the AST. # # @param [Parser::Source::Buffer] source_buffer The source buffer to parse. # @return [Parser::AST::Node] # def parse(source_buffer) @lexer.source_buffer = source_buffer @source_buffer = source_buffer do_parse ensure # Don't keep references to the source file. @source_buffer = nil @lexer.source_buffer = nil end ## # Parses a source buffer and returns the AST and the source code comments. # # @see #parse # @see Parser::Source::Comment#associate # @return [Array] # def parse_with_comments(source_buffer) @lexer.comments = [] [ parse(source_buffer), @lexer.comments ] ensure @lexer.comments = nil end ## # Parses a source buffer and returns the AST, the source code comments, # and the tokens emitted by the lexer. If `recover` is true and a fatal # {SyntaxError} is encountered, `nil` is returned instead of the AST, and # comments as well as tokens are only returned up to the location of # the error. # # Currently, token stream format returned by #tokenize is not documented, # but is considered part of a public API and only changed according # to Semantic Versioning. # # However, note that the exact token composition of various constructs # might vary. For example, a string `"foo"` is represented equally well # by `:tSTRING_BEG " :tSTRING_CONTENT foo :tSTRING_END "` and # `:tSTRING "foo"`; such details must not be relied upon. # # @param [Parser::Source::Buffer] source_buffer # @param [Boolean] recover If true, recover from syntax errors. False by default. # @return [Array] # def tokenize(source_buffer, recover=false) @lexer.tokens = [] @lexer.comments = [] begin ast = parse(source_buffer) rescue Parser::SyntaxError raise if !recover end [ ast, @lexer.comments, @lexer.tokens ] ensure @lexer.tokens = nil @lexer.comments = nil end private def next_token token = @lexer.advance @last_token = token token end def check_kwarg_name(name_t) case name_t[0] when /^[a-z_]/ # OK when /^[A-Z]/ diagnostic :error, :argument_const, nil, name_t end end def diagnostic(level, reason, arguments, location_t, highlights_ts=[]) _, location = location_t highlights = highlights_ts.map do |token| _, range = token range end @diagnostics.process( Diagnostic.new(level, reason, arguments, location, highlights)) if level == :error yyerror end end def on_error(error_token_id, error_value, value_stack) token_name = token_to_str(error_token_id) _, location = error_value @diagnostics.process(Diagnostic.new( :error, :unexpected_token, { :token => token_name }, location)) end end end parser-2.7.0.2/lib/parser/color.rb0000644000004100000410000000116313617025313016713 0ustar www-datawww-data# frozen_string_literal: true module Parser module Color def self.color(str, code, bold: false) return str unless STDOUT.tty? code = Array(code) code.unshift(1) if bold "\e[#{code.join(';')}m#{str}\e[0m" end def self.red(str, bold: false) color(str, 31, bold: bold) end def self.green(str, bold: false) color(str, 32, bold: bold) end def self.yellow(str, bold: false) color(str, 33, bold: bold) end def self.magenta(str, bold: false) color(str, 35, bold: bold) end def self.underline(str) color(str, 4) end end end parser-2.7.0.2/lib/parser/ast/0000755000004100000410000000000013617025313016036 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/ast/processor.rb0000644000004100000410000002032713617025313020406 0ustar www-datawww-data# frozen_string_literal: true module Parser module AST ## # @api public # class Processor < ::AST::Processor def process_regular_node(node) node.updated(nil, process_all(node)) end alias on_dstr process_regular_node alias on_dsym process_regular_node alias on_regexp process_regular_node alias on_xstr process_regular_node alias on_splat process_regular_node alias on_kwsplat process_regular_node alias on_array process_regular_node alias on_pair process_regular_node alias on_hash process_regular_node alias on_irange process_regular_node alias on_erange process_regular_node def on_var(node) node end # @private def process_variable_node(node) on_var(node) end alias on_lvar process_variable_node alias on_ivar process_variable_node alias on_gvar process_variable_node alias on_cvar process_variable_node alias on_back_ref process_variable_node alias on_nth_ref process_variable_node def on_vasgn(node) name, value_node = *node if !value_node.nil? node.updated(nil, [ name, process(value_node) ]) else node end end # @private def process_var_asgn_node(node) on_vasgn(node) end alias on_lvasgn process_var_asgn_node alias on_ivasgn process_var_asgn_node alias on_gvasgn process_var_asgn_node alias on_cvasgn process_var_asgn_node alias on_and_asgn process_regular_node alias on_or_asgn process_regular_node def on_op_asgn(node) var_node, method_name, value_node = *node node.updated(nil, [ process(var_node), method_name, process(value_node) ]) end alias on_mlhs process_regular_node alias on_masgn process_regular_node def on_const(node) scope_node, name = *node node.updated(nil, [ process(scope_node), name ]) end def on_casgn(node) scope_node, name, value_node = *node if !value_node.nil? node.updated(nil, [ process(scope_node), name, process(value_node) ]) else node.updated(nil, [ process(scope_node), name ]) end end alias on_args process_regular_node def on_argument(node) arg_name, value_node = *node if !value_node.nil? node.updated(nil, [ arg_name, process(value_node) ]) else node end end # @private def process_argument_node(node) on_argument(node) end alias on_arg process_argument_node alias on_optarg process_argument_node alias on_restarg process_argument_node alias on_blockarg process_argument_node alias on_shadowarg process_argument_node alias on_kwarg process_argument_node alias on_kwoptarg process_argument_node alias on_kwrestarg process_argument_node def on_procarg0(node) if node.children[0].is_a?(Symbol) # This branch gets executed when the builder # is not configured to emit and 'arg' inside 'procarg0', i.e. when # Parser::Builders::Default.emit_arg_inside_procarg0 # is set to false. # # If this flag is set to true this branch is unreachable. # s(:procarg0, :a) on_argument(node) else # s(:procarg0, s(:arg, :a), s(:arg, :b)) process_regular_node(node) end end alias on_arg_expr process_regular_node alias on_restarg_expr process_regular_node alias on_blockarg_expr process_regular_node alias on_block_pass process_regular_node alias on_module process_regular_node alias on_class process_regular_node alias on_sclass process_regular_node def on_def(node) name, args_node, body_node = *node node.updated(nil, [ name, process(args_node), process(body_node) ]) end def on_defs(node) definee_node, name, args_node, body_node = *node node.updated(nil, [ process(definee_node), name, process(args_node), process(body_node) ]) end alias on_undef process_regular_node alias on_alias process_regular_node def on_send(node) receiver_node, method_name, *arg_nodes = *node receiver_node = process(receiver_node) if receiver_node node.updated(nil, [ receiver_node, method_name, *process_all(arg_nodes) ]) end alias on_csend on_send alias on_index process_regular_node alias on_indexasgn process_regular_node alias on_block process_regular_node alias on_lambda process_regular_node def on_numblock(node) method_call, max_numparam, body = *node node.updated(nil, [ process(method_call), max_numparam, process(body) ]) end alias on_while process_regular_node alias on_while_post process_regular_node alias on_until process_regular_node alias on_until_post process_regular_node alias on_for process_regular_node alias on_return process_regular_node alias on_break process_regular_node alias on_next process_regular_node alias on_redo process_regular_node alias on_retry process_regular_node alias on_super process_regular_node alias on_yield process_regular_node alias on_defined? process_regular_node alias on_not process_regular_node alias on_and process_regular_node alias on_or process_regular_node alias on_if process_regular_node alias on_when process_regular_node alias on_case process_regular_node alias on_iflipflop process_regular_node alias on_eflipflop process_regular_node alias on_match_current_line process_regular_node alias on_match_with_lvasgn process_regular_node alias on_resbody process_regular_node alias on_rescue process_regular_node alias on_ensure process_regular_node alias on_begin process_regular_node alias on_kwbegin process_regular_node alias on_preexe process_regular_node alias on_postexe process_regular_node alias on_case_match process_regular_node alias on_in_match process_regular_node alias on_in_pattern process_regular_node alias on_if_guard process_regular_node alias on_unless_guard process_regular_node alias on_match_var process_variable_node alias on_match_rest process_regular_node alias on_pin process_regular_node alias on_match_alt process_regular_node alias on_match_as process_regular_node alias on_array_pattern process_regular_node alias on_array_pattern_with_tail process_regular_node alias on_hash_pattern process_regular_node alias on_const_pattern process_regular_node # @private def process_variable_node(node) warn 'Parser::AST::Processor#process_variable_node is deprecated as a' \ ' public API and will be removed. Please use ' \ 'Parser::AST::Processor#on_var instead.' on_var(node) end # @private def process_var_asgn_node(node) warn 'Parser::AST::Processor#process_var_asgn_node is deprecated as a' \ ' public API and will be removed. Please use ' \ 'Parser::AST::Processor#on_vasgn instead.' on_vasgn(node) end # @private def process_argument_node(node) warn 'Parser::AST::Processor#process_argument_node is deprecated as a' \ ' public API and will be removed. Please use ' \ 'Parser::AST::Processor#on_argument instead.' on_argument(node) end end end end parser-2.7.0.2/lib/parser/ast/node.rb0000644000004100000410000000177413617025313017321 0ustar www-datawww-data# frozen_string_literal: true module Parser module AST ## # {Parser::AST::Node} contains information about a single AST node and its # child nodes. It extends the basic [AST::Node](http://rdoc.info/gems/ast/AST/Node) # class provided by gem [ast](http://rdoc.info/gems/ast). # # @api public # # @!attribute [r] location # Source map for this Node. # @return [Parser::Source::Map] # class Node < ::AST::Node attr_reader :location alias loc location ## # Assigns various properties to this AST node. Currently only the # location can be set. # # @param [Hash] properties # @option properties [Parser::Source::Map] :location Location information # of the node. # def assign_properties(properties) if (location = properties[:location]) location = location.dup if location.frozen? location.node = self @location = location end end end end end parser-2.7.0.2/lib/parser/ruby24.y0000644000004100000410000025001713617025313016575 0ustar www-datawww-dataclass Parser::Ruby24 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 tUPLUS tUMINUS tUNARY_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 tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER tRATIONAL tIMAGINARY tLABEL_END tANDDOT prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { result = @builder.preexe(val[0], val[1], val[2], val[3]) } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt_or_begin { result = [ val[0] ] } | stmts terms stmt_or_begin { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt_or_begin: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { diagnostic :error, :begin_in_method, nil, val[0] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL mrhs_arg { result = @builder.multi_assign(val[0], val[1], val[2]) } | expr command_asgn: lhs tEQL command_rhs { result = @builder.assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_rhs { @builder.op_assign(val[0], val[1], val[2]) } command_rhs: command_call =tOP_ASGN | command_call kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | command_asgn expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @context.push(:block) } brace_body tRCURLY { result = [ val[0], *val[2], val[3] ] @context.pop } fcall: operation command: fcall command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | fcall command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value call_op operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value call_op operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 | tDSTAR | 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_rhs { result = @builder.assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | tCOLON3 tCONSTANT tOP_ASGN arg_rhs { const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) } | backref tOP_ASGN arg_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM simple_numeric tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } arg_rhs: arg =tOP_ASGN | arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { # When branch gets invoked by RACC's lookahead # and command args start with '[' or '(' # we need to put `true` to the cmdarg stack # **before** `false` pushed by lexer # m [], n # ^ # Right here we have cmdarg [...0] because # lexer pushed it on '[' # We need to modify cmdarg stack to [...10] # # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack # and later lexer pushes corresponding bits on top of it. last_token = @last_token[0] lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.push(true) @lexer.cmdarg.push(top) else @lexer.cmdarg.push(true) end } call_args { # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) # but the push must be done after cmdarg.pop() in the parser. # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, # cmdarg.pop() to pop 1 pushed by command_args, # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. last_token = @last_token[0] lookahead = last_token == :tLBRACE_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.pop @lexer.cmdarg.push(top) else @lexer.cmdarg.pop end result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs_arg: mrhs { result = @builder.array(nil, val[0], nil) } | arg_value mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN { @lexer.cmdarg.push(false) } bodystmt kEND { @lexer.cmdarg.pop result = @builder.begin_keyword(val[0], val[2], val[3]) } | tLPAREN_ARG stmt { @lexer.state = :expr_endarg } rparen { result = @builder.begin(val[0], val[1], val[3]) } | tLPAREN_ARG { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], nil, val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | fcall brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.cmdarg.push(false) @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.cmdarg.pop @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.cmdarg.push(false) @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.cmdarg.pop @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.cmdarg.push(false) } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.cmdarg.pop @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.cmdarg.push(false) @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.cmdarg.pop @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.cmdarg.push(false) @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.cmdarg.pop @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { result = val[0]. push(@builder.restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { result = [ @builder.restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { result = [ @builder.restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.restarg(val[0]), *val[2] ] } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_block_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_block_args_tail: tCOMMA block_args_tail { result = val[1] } | # nothing { result = [] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_block_args_tail { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | block_args_tail opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: opt_nl { result = [] } | opt_nl tSEMI bv_decls opt_nl { result = val[2] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist { @lexer.cmdarg.push(false) } lambda_body { @lexer.cmdarg.pop result = [ val[1], val[3] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @context.push(:block) } do_body kEND { result = [ val[0], *val[2], val[3] ] @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call dot_or_colon operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call dot_or_colon operation2 opt_paren_args brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | block_call dot_or_colon operation2 command_args do_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } method_call: fcall paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value call_op operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value call_op paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @context.push(:block) } brace_body tRCURLY { result = [ val[0], *val[2], val[3] ] @context.pop } | kDO { @context.push(:block) } do_body kEND { result = [ val[0], *val[2], val[3] ] @context.pop } brace_body: { @static_env.extend_dynamic } opt_block_param compstmt { result = [ val[1], val[2] ] @static_env.unextend } do_body: { @static_env.extend_dynamic } { @lexer.cmdarg.push(false) } opt_block_param compstmt { result = [ val[2], val[3] ] @static_env.unextend @lexer.cmdarg.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tSTRING { string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } symbols: tSYMBOLS_BEG symbol_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } symbol_list: # nothing { result = [] } | symbol_list word tSPACE { result = val[0] << @builder.word(val[1]) } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } qsym_list: # nothing { result = [] } | qsym_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.symbol_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cmdarg.push(false) @lexer.cond.push(false) } compstmt tSTRING_DEND { @lexer.cmdarg.pop @lexer.cond.pop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { @lexer.state = :expr_end result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { @lexer.state = :expr_end result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: simple_numeric { result = val[0] } | tUNARY_NUM simple_numeric =tLOWEST { if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end } simple_numeric: tINTEGER { @lexer.state = :expr_end result = @builder.integer(val[0]) } | tFLOAT { @lexer.state = :expr_end result = @builder.float(val[0]) } | tRATIONAL { @lexer.state = :expr_end result = @builder.rational(val[0]) } | tIMAGINARY { @lexer.state = :expr_end result = @builder.complex(val[0]) } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: tLT { @lexer.state = :expr_value } expr_value term { result = [ val[0], val[2] ] } | # nothing { result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | { result = @lexer.in_kwarg @lexer.in_kwarg = true } f_args term { @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_args_tail: tCOMMA args_tail { result = val[1] } | # nothing { result = [] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | args_tail { result = val[0] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] result = val[0] } f_arg_asgn: f_norm_arg { result = val[0] } f_arg_item: f_arg_asgn { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_label: tLABEL { check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] } f_kw: f_label arg_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kw: f_label primary_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kwarg: f_block_kw { result = [ val[0] ] } | f_block_kwarg tCOMMA f_block_kw { result = val[0] << val[2] } f_kwarg: f_kw { result = [ val[0] ] } | f_kwarg tCOMMA f_kw { result = val[0] << val[2] } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.kwrestarg(val[0]) ] } f_opt: f_arg_asgn tEQL arg_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: f_arg_asgn tEQL primary_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } | tSTRING_BEG string_contents tLABEL_END arg_value { result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) } | tDSTAR arg_value { result = @builder.kwsplat(val[0], val[1]) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: call_op | tCOLON2 call_op: tDOT { result = [:dot, val[0][1]] } | tANDDOT { result = [:anddot, val[0][1]] } opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 24 end def default_encoding Encoding::UTF_8 end parser-2.7.0.2/lib/parser/context.rb0000644000004100000410000000253013617025313017260 0ustar www-datawww-data# frozen_string_literal: true module Parser # Context of parsing that is represented by a stack of scopes. # # Supported states: # + :class - in the class body (class A; end) # + :sclass - in the singleton class body (class << obj; end) # + :def - in the method body (def m; end) # + :defs - in the singleton method body (def self.m; end) # + :block - in the block body (tap {}) # + :lambda - in the lambda body (-> {}) # class Context attr_reader :stack def initialize @stack = [] freeze end def push(state) @stack << state end def pop @stack.pop end def reset @stack.clear end def in_class? @stack.last == :class end def indirectly_in_def? @stack.include?(:def) || @stack.include?(:defs) end def class_definition_allowed? def_index = stack.rindex { |item| [:def, :defs].include?(item) } sclass_index = stack.rindex(:sclass) def_index.nil? || (!sclass_index.nil? && sclass_index > def_index) end alias module_definition_allowed? class_definition_allowed? alias dynamic_const_definition_allowed? class_definition_allowed? def in_block? @stack.last == :block end def in_lambda? @stack.last == :lambda end def in_dynamic_block? in_block? || in_lambda? end end end parser-2.7.0.2/lib/parser/all.rb0000644000004100000410000000041713617025313016346 0ustar www-datawww-data# frozen_string_literal: true require 'parser/ruby18' require 'parser/ruby19' require 'parser/ruby20' require 'parser/ruby21' require 'parser/ruby22' require 'parser/ruby23' require 'parser/ruby24' require 'parser/ruby25' require 'parser/ruby26' require 'parser/ruby27' parser-2.7.0.2/lib/parser/ruby18.y0000644000004100000410000021013313617025313016573 0ustar www-datawww-dataclass Parser::Ruby18 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 tUPLUS tUMINUS tUNARY_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 tREGEXP_OPT tNL tEH tCOLON tCOMMA tSPACE tSEMI prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: compstmt { result = val[0] } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt { result = [ val[0] ] } | error stmt { result = [ val[1] ] } | stmts terms stmt { result = val[0] << val[2] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klBEGIN tLCURLY compstmt tRCURLY { if @context.indirectly_in_def? diagnostic :error, :begin_in_method, nil, val[0] end result = @builder.preexe(val[0], val[1], val[2], val[3]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | lhs tEQL command_call { result = @builder.assign(val[0], val[1], val[2]) } | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_call { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN command_call { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_call { @builder.op_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL arg_value { result = @builder.multi_assign(val[0], val[1], val[2]) } | mlhs tEQL mrhs { result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | expr expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT expr { result = @builder.not_op(val[0], nil, val[1], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } block_command: block_call | block_call tDOT operation2 command_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call tCOLON2 operation2 command_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } cmd_brace_block: tLBRACE_ARG { @static_env.extend_dynamic @context.push(:block) } opt_block_var compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } command: operation command_args =tLOWEST { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | operation command_args cmd_brace_block { lparen_t, args, rparen_t = val[1] method_call = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) begin_t, block_args, body, end_t = val[2] result = @builder.block(method_call, begin_t, block_args, body, end_t) } | primary_value tDOT operation2 command_args =tLOWEST { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tDOT operation2 command_args cmd_brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, block_args, body, end_t = val[4] result = @builder.block(method_call, begin_t, block_args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, block_args, body, end_t = val[4] result = @builder.block(method_call, begin_t, block_args, body, end_t) } | kSUPER command_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kYIELD command_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:yield, val[0], lparen_t, args, rparen_t) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_entry tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } mlhs_entry: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_entry tRPAREN { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head { result = val[0] } | mlhs_head mlhs_item { result = val[0] << val[1] } | mlhs_head tSTAR mlhs_node { result = val[0] << @builder.splat(val[1], val[2]) } | mlhs_head tSTAR { result = val[0] << @builder.splat(val[1]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR { result = [ @builder.splat(val[0]) ] } mlhs_item: mlhs_node | tLPAREN mlhs_entry tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_node: variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 aref_args tRBRACK { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 aref_args tRBRACK { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) } | var_lhs tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN arg { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] } | tCOLON3 tCONSTANT tOP_ASGN arg { diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] } | backref tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM tINTEGER tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) } | tUNARY_NUM tFLOAT tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[3], val[4]) } | primary arg_value: arg aref_args: none | command opt_nl { result = [ val[0] ] } | args trailer { result = val[0] } | args tCOMMA tSTAR arg opt_nl { result = val[0] << @builder.splat(val[2], val[3]) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } | tSTAR arg opt_nl { result = [ @builder.splat(val[0], val[1]) ] } paren_args: tLPAREN2 none tRPAREN { result = [ val[0], [], val[2] ] } | tLPAREN2 call_args opt_nl tRPAREN { result = [ val[0], val[1], val[3] ] } | tLPAREN2 block_call opt_nl tRPAREN { result = [ val[0], [ val[1] ], val[3] ] } | tLPAREN2 args tCOMMA block_call opt_nl tRPAREN { result = [ val[0], val[1] << val[3], val[5] ] } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | args tCOMMA tSTAR arg_value opt_block_arg { result = val[0].concat( [ @builder.splat(val[2], val[3]), *val[4] ]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil), *val[1] ] } | assocs tCOMMA tSTAR arg_value opt_block_arg { result = [ @builder.associate(nil, val[0], nil), @builder.splat(val[2], val[3]), *val[4] ] } | args tCOMMA assocs opt_block_arg { result = val[0].concat( [ @builder.associate(nil, val[2], nil), *val[3] ]) } | args tCOMMA assocs tCOMMA tSTAR arg opt_block_arg { result = val[0].concat( [ @builder.associate(nil, val[2], nil), @builder.splat(val[4], val[5]), *val[6] ]) } | tSTAR arg_value opt_block_arg { result = [ @builder.splat(val[0], val[1]), *val[2] ] } | block_arg { result = [ val[0] ] } call_args2: arg_value tCOMMA args opt_block_arg { result = [ val[0], *val[2].concat(val[3]) ] } | arg_value tCOMMA block_arg { result = [ val[0], val[2] ] } | arg_value tCOMMA tSTAR arg_value opt_block_arg { result = [ val[0], @builder.splat(val[2], val[3]), *val[4] ] } | arg_value tCOMMA args tCOMMA tSTAR arg_value opt_block_arg { result = [ val[0], *val[2]. push(@builder.splat(val[4], val[5])). concat(val[6]) ] } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil), *val[1] ] } | assocs tCOMMA tSTAR arg_value opt_block_arg { result = [ @builder.associate(nil, val[0], nil), @builder.splat(val[2], val[3]), *val[4] ] } | arg_value tCOMMA assocs opt_block_arg { result = [ val[0], @builder.associate(nil, val[2], nil), *val[3] ] } | arg_value tCOMMA args tCOMMA assocs opt_block_arg { result = [ val[0], *val[2]. push(@builder.associate(nil, val[4], nil)). concat(val[5]) ] } | arg_value tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg { result = [ val[0], @builder.associate(nil, val[2], nil), @builder.splat(val[4], val[5]), *val[6] ] } | arg_value tCOMMA args tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg { result = [ val[0], *val[2]. push(@builder.associate(nil, val[4], nil)). push(@builder.splat(val[6], val[7])). concat(val[8]) ] } | tSTAR arg_value opt_block_arg { result = [ @builder.splat(val[0], val[1]), *val[2] ] } | block_arg { result = [ val[0] ] } command_args: { result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) } open_args { @lexer.cmdarg = val[0] result = val[1] } open_args: call_args { result = [ nil, val[0], nil ] } | tLPAREN_ARG { @lexer.state = :expr_endarg } tRPAREN { result = [ val[0], [], val[2] ] } | tLPAREN_ARG call_args2 { @lexer.state = :expr_endarg } tRPAREN { result = [ val[0], val[1], val[3] ] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | args tCOMMA arg_value { result = val[0] << val[2] } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN bodystmt kEND { result = @builder.begin_keyword(val[0], val[1], val[2]) } | tLPAREN_ARG expr { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], val[1], val[4]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | primary_value tLBRACK2 aref_args tRBRACK { result = @builder.index(val[0], val[1], val[2], val[3]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args tRPAREN { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 tRPAREN { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr tRPAREN { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | operation brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { when_bodies = val[3][0..-2] else_t, else_body = val[3][-1] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { when_bodies = val[2][0..-2] else_t, else_body = val[2][-1] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kCASE opt_terms kELSE compstmt kEND { result = @builder.case(val[0], nil, [], val[2], val[3], val[4]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @static_env.unextend } | kDEF fname { @static_env.extend_static @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | tCOLON | kTHEN | term kTHEN { result = val[1] } do: term | tCOLON | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs block_par: mlhs_item { result = [ @builder.arg_expr(val[0]) ] } | block_par tCOMMA mlhs_item { result = val[0] << @builder.arg_expr(val[2]) } block_var: block_par | block_par tCOMMA | block_par tCOMMA tAMPER lhs { result = val[0]. push(@builder.blockarg_expr(val[2], val[3])) } | block_par tCOMMA tSTAR lhs tCOMMA tAMPER lhs { result = val[0]. push(@builder.restarg_expr(val[2], val[3])). push(@builder.blockarg_expr(val[5], val[6])) } | block_par tCOMMA tSTAR tCOMMA tAMPER lhs { result = val[0]. push(@builder.restarg_expr(val[2])). push(@builder.blockarg_expr(val[4], val[5])) } | block_par tCOMMA tSTAR lhs { result = val[0]. push(@builder.restarg_expr(val[2], val[3])) } | block_par tCOMMA tSTAR { result = val[0]. push(@builder.restarg_expr(val[2])) } | tSTAR lhs tCOMMA tAMPER lhs { result = [ @builder.restarg_expr(val[0], val[1]), @builder.blockarg_expr(val[3], val[4]) ] } | tSTAR tCOMMA tAMPER lhs { result = [ @builder.restarg_expr(val[0]), @builder.blockarg_expr(val[2], val[3]) ] } | tSTAR lhs { result = [ @builder.restarg_expr(val[0], val[1]) ] } | tSTAR { result = [ @builder.restarg_expr(val[0]) ] } | tAMPER lhs { result = [ @builder.blockarg_expr(val[0], val[1]) ] } ; opt_block_var: # nothing { result = @builder.args(nil, [], nil) } | tPIPE tPIPE { result = @builder.args(val[0], [], val[1]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_var tPIPE { result = @builder.args(val[0], val[1], val[2], false) } do_block: kDO_BLOCK { @static_env.extend_dynamic @context.push(:block) } opt_block_var compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call tCOLON2 operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } method_call: operation paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } brace_block: tLCURLY { @static_env.extend_dynamic @context.push(:block) } opt_block_var compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } | kDO { @static_env.extend_dynamic @context.push(:block) } opt_block_var compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } case_body: kWHEN when_args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } when_args: args | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | # nothing { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = @builder.string_compose(val[0], val[1], val[2]) } | tSTRING { result = @builder.string(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = @builder.xstring_compose(val[0], val[1], val[2]) } regexp: tREGEXP_BEG xstring_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cond.push(false) @lexer.cmdarg.push(false) } compstmt tRCURLY { @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: tINTEGER { result = @builder.integer(val[0]) } | tFLOAT { result = @builder.float(val[0]) } | tUNARY_NUM tINTEGER =tLOWEST { num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } | tUNARY_NUM tFLOAT =tLOWEST { num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } var_ref: variable { result = @builder.accessible(val[0]) } var_lhs: variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: term { result = nil } | tLT expr_value term { result = [ val[0], val[1] ] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args opt_nl tRPAREN { result = @builder.args(val[0], val[1], val[3]) @lexer.state = :expr_beg } | f_args term { result = @builder.args(nil, val[0], nil) } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_rest_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_block_arg { result = [ val[0] ] } | # nothing { result = [] } f_norm_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } | tIDENTIFIER { @static_env.declare val[0][0] result = @builder.arg(val[0]) } f_arg: f_norm_arg { result = [ val[0] ] } | f_arg tCOMMA f_norm_arg { result = val[0] << val[2] } f_opt: tIDENTIFIER tEQL arg_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | # nothing { result = [] } singleton: var_ref | tLPAREN2 expr opt_nl tRPAREN { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer { result = val[0] } | args trailer { result = @builder.pair_list_18(val[0]) } assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], 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 none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 18 end def default_encoding Encoding::BINARY end parser-2.7.0.2/lib/parser/tree_rewriter.rb0000644000004100000410000000674413617025313020471 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # {Parser::TreeRewriter} offers a basic API that makes it easy to rewrite # existing ASTs. It's built on top of {Parser::AST::Processor} and # {Parser::Source::TreeRewriter} # # For example, assume you want to remove `do` tokens from a while statement. # You can do this as following: # # require 'parser/current' # # class RemoveDo < Parser::TreeRewriter # def on_while(node) # # Check if the statement starts with "do" # if node.location.begin.is?('do') # remove(node.location.begin) # end # end # end # # code = <<-EOF # while true do # puts 'hello' # end # EOF # # ast = Parser::CurrentRuby.parse code # buffer = Parser::Source::Buffer.new('(example)') # buffer.source = code # rewriter = RemoveDo.new # # # Rewrite the AST, returns a String with the new form. # puts rewriter.rewrite(buffer, ast) # # This would result in the following Ruby code: # # while true # puts 'hello' # end # # Keep in mind that {Parser::TreeRewriter} does not take care of indentation when # inserting/replacing code so you'll have to do this yourself. # # See also [a blog entry](http://whitequark.org/blog/2013/04/26/lets-play-with-ruby-code/) # describing rewriters in greater detail. # # @api public # class TreeRewriter < Parser::AST::Processor ## # Rewrites the AST/source buffer and returns a String containing the new # version. # # @param [Parser::Source::Buffer] source_buffer # @param [Parser::AST::Node] ast # @param [Symbol] crossing_deletions:, different_replacements:, swallowed_insertions: # policy arguments for TreeRewriter (optional) # @return [String] # def rewrite(source_buffer, ast, **policy) @source_rewriter = Parser::Source::TreeRewriter.new(source_buffer, **policy) process(ast) @source_rewriter.process end ## # Returns `true` if the specified node is an assignment node, returns false # otherwise. # # @param [Parser::AST::Node] node # @return [Boolean] # def assignment?(node) [:lvasgn, :ivasgn, :gvasgn, :cvasgn, :casgn].include?(node.type) end ## # Removes the source range. # # @param [Parser::Source::Range] range # def remove(range) @source_rewriter.remove(range) end ## # Wraps the given source range with the given values. # # @param [Parser::Source::Range] range # @param [String] content # def wrap(range, before, after) @source_rewriter.wrap(range, before, after) end ## # Inserts new code before the given source range. # # @param [Parser::Source::Range] range # @param [String] content # def insert_before(range, content) @source_rewriter.insert_before(range, content) end ## # Inserts new code after the given source range. # # @param [Parser::Source::Range] range # @param [String] content # def insert_after(range, content) @source_rewriter.insert_after(range, content) end ## # Replaces the code of the source range `range` with `content`. # # @param [Parser::Source::Range] range # @param [String] content # def replace(range, content) @source_rewriter.replace(range, content) end end end parser-2.7.0.2/lib/parser/ruby24.rb0000644000004100000410000077344313617025313016745 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby24 < Parser::Base def version 24 end def default_encoding Encoding::UTF_8 end ##### State transition tables begin ### clist = [ '-290,-107,209,210,781,-102,-104,-290,-290,-290,270,587,270,-290,-290', '588,-290,219,575,1007,794,615,-102,209,210,-101,617,794,398,-106,109', '270,780,400,399,-100,-290,-290,575,-290,-290,-290,-290,-290,-106,-105', '-103,-101,-107,-85,-103,-105,209,210,575,793,209,210,220,-71,534,-104', '793,536,815,-104,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290', '-290,-290,-290,121,575,-290,-290,-290,575,640,614,-99,-102,-290,-99', '616,-290,206,265,113,269,-290,269,-290,112,-290,-290,-100,-290,-290', '-290,-290,-290,-98,-290,-583,-290,-93,-579,-580,220,269,-583,-583,-583', '-580,-579,-104,-583,-583,-290,-583,-104,-290,-290,721,-290,-92,-290', '113,-583,-97,843,-102,112,-290,-105,-91,-102,220,207,-583,-583,220,-583', '-583,-583,-583,-583,113,721,721,-94,-96,112,-106,-105,-103,-101,-107', '-106,-105,-103,-101,-107,113,814,-95,767,270,112,-583,-583,-583,-583', '-583,-583,-583,-583,-583,-583,-583,-583,-583,-583,862,636,-583,-583', '-583,208,641,113,-90,240,-583,113,112,-583,-99,451,112,602,-583,-99', '-583,602,-583,-583,211,-583,-583,-583,-583,-583,-100,-583,-583,-583', '-93,-100,838,807,113,602,-101,237,635,112,113,239,238,-583,265,112,-583', '-583,-583,-583,807,-583,581,-101,-104,-583,-583,-583,-583,-103,-583', '-583,-583,-94,-583,113,113,269,-107,534,112,112,533,-583,-583,-583,-583', '604,603,600,217,604,603,605,-583,-583,636,-583,-583,-583,-583,-583,91', '92,668,-102,-93,-92,-95,604,603,600,555,602,552,551,550,555,553,552', '551,550,259,553,-583,-583,-583,-583,-583,-583,-583,-583,-583,-583,-583', '-583,-583,-583,-579,-94,-583,-583,-583,-95,782,-583,-93,-107,-583,-93', '215,-583,-583,-104,-583,318,-583,263,-583,-93,-583,-583,319,-583,-583', '-583,-583,-583,-496,-583,-583,-583,635,-92,-95,91,92,604,603,-94,93', '94,-94,602,-496,-583,602,752,-583,-583,-583,-583,-94,-583,834,-583,-485', '220,522,956,-583,-103,767,-485,-485,-485,571,570,-485,-485,-485,-482', '-485,-92,-95,216,-92,-95,-482,-93,-485,388,-485,-485,-485,-99,-92,-95', '522,-102,401,-90,-485,-485,450,-485,-485,-485,-485,-485,220,-99,452', '989,453,-97,602,604,603,-92,604,603,613,93,94,-106,219,754,484,-101', '-497,217,-485,-485,-485,-485,-485,-485,-485,-485,-485,-485,-485,-485', '-485,-485,-482,493,-485,-485,-485,534,-485,-485,536,-106,-485,602,495', '-485,-485,602,-485,-485,-485,497,-485,-497,-485,-485,-485,-485,-485', '-485,-485,-485,-290,-485,-98,-485,604,603,609,-290,-290,-290,113,-100', '-107,-290,-290,112,-290,-485,209,210,-485,-485,-485,-485,-492,-485,505', '-485,-577,113,113,-492,-485,-485,112,112,-290,-290,-91,-290,-290,-290', '-290,-290,-70,604,603,607,-100,604,603,618,-485,746,747,-491,-493,748', '107,108,113,534,-491,-493,536,112,-290,-290,-290,-290,-290,-290,-290', '-290,-290,-290,-290,-290,-290,-290,-485,220,-290,-290,-290,508,640,-485', '509,-492,-290,516,-577,-290,838,807,-485,274,-290,220,-290,265,-290', '-290,519,-290,-290,-290,-290,-290,-482,-290,523,-290,240,-577,220,-482', '-482,-482,-491,-493,-482,-482,-482,215,-482,-290,209,210,-290,-290,979', '-96,-482,-290,-482,-482,-482,537,538,592,-290,-105,497,-485,-482,-482', '79,-482,-482,-482,-482,-482,581,-290,390,-494,585,-495,80,-490,-290', '586,-494,-487,-495,-580,-490,594,81,-290,-487,-494,619,-495,-482,-482', '-482,-482,-482,-482,-482,-482,-482,-482,-482,-482,-482,-482,216,622', '-482,-482,-482,-488,-482,-482,-263,624,-482,625,-488,-482,-482,629,-482', '-489,-482,220,-482,-583,-482,-482,-489,-482,-482,-482,-482,-482,-290', '-482,-494,-482,-495,633,-490,215,215,634,-487,265,645,240,263,515,240', '-482,240,240,-482,-482,-482,-482,513,-482,240,-482,-583,220,220,220', '-482,-482,-85,-583,-583,-583,560,672,-488,-583,-583,-583,-583,220,527', '683,563,688,-583,240,-489,-583,689,-579,220,691,237,-583,695,698,239', '238,-583,-583,699,-583,-583,-583,-583,-583,216,216,701,703,705,-281', '-583,560,713,571,570,237,-281,714,564,239,238,563,235,236,715,-281,-583', '-583,-583,-583,-583,-583,-583,-583,-583,-583,-583,-583,-583,-583,-583', '717,-583,-583,-583,949,641,552,551,550,-583,553,581,-583,571,570,724', '741,-583,564,-583,751,-583,-583,755,-583,-583,-583,-583,-583,-290,-583', '-583,-583,-281,756,-264,-290,-290,-290,768,484,-290,-290,-290,215,-290', '-583,484,220,-583,-583,525,-94,785,-583,-290,-290,-290,786,259,449,-583', '-103,791,796,-290,-290,495,-290,-290,-290,-290,-290,497,215,800,215', '683,-333,220,265,979,265,984,683,-333,240,807,220,832,592,220,982,807', '-333,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290', '-290,216,842,-290,-290,-290,220,783,-290,215,220,-290,851,-265,-290', '-290,584,-290,220,-290,861,-290,865,-290,-290,582,-290,-290,-290,-290', '-290,216,-290,216,-290,-333,683,881,949,215,552,551,550,-263,553,885', '590,889,-290,890,698,-290,-290,-290,-290,592,-290,892,-290,-585,894', '896,898,-290,-105,898,-585,-585,-585,220,904,-585,-585,-585,216,-585', '555,906,552,551,550,908,553,914,-585,-585,-585,-585,116,117,118,119', '120,917,220,-585,-585,921,-585,-585,-585,-585,-585,-266,216,923,698', '926,215,928,930,932,220,707,555,628,552,551,550,934,553,958,903,960', '626,-585,-585,-585,-585,-585,-585,-585,-585,-585,-585,-585,-585,-585', '-585,961,-291,-585,-585,-585,966,741,-585,-291,977,-585,980,707,-585', '-585,985,-585,-291,-585,986,-585,710,-585,-585,987,-585,-585,-585,-585', '-585,990,-585,-585,-585,216,898,898,898,215,240,555,995,552,551,550', '448,553,-585,958,-576,-585,-585,-585,-585,449,-585,-412,-585,698,1001', '1003,1005,-585,-412,-412,-412,-291,1007,-412,-412,-412,237,-412,1007', '688,239,238,707,235,236,958,-412,-412,-412,1022,1023,710,116,117,118', '119,120,-412,-412,-580,-412,-412,-412,-412,-412,-579,-482,220,216,898', '958,1030,1007,-482,1007,1007,,,-576,,,,-482,,,,,-412,-412,-412,-412', '-412,-412,-412,-412,-412,-412,-412,-412,-412,-412,-576,,-412,-412,-412', '215,,-412,-291,265,-412,,214,-412,-412,-291,-412,,-412,,-412,212,-412', '-412,-291,-412,-412,-412,-412,-412,-482,-412,-412,-412,555,,552,551', '550,560,553,116,117,118,119,120,,-412,,563,-412,-412,-246,-412,,-412', ',,,-246,-246,-246,-412,,-246,-246,-246,,-246,240,216,558,,-291,,,,-246', '-246,-246,568,567,571,570,,254,255,564,-246,-246,,-246,-246,-246,-246', '-246,555,,552,551,550,237,553,243,,239,238,,235,236,,,241,220,242,,', ',-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,-246,-246', ',707,-246,-246,-246,,,-246,,265,-246,,,-246,-246,,-246,,-246,,-246,', '-246,-246,,-246,-246,-246,-246,-246,-297,-246,-246,-246,,,,-297,-297', '-297,,,-297,-297,-297,,-297,-246,,,-246,-246,,-246,,-246,-297,-297,', ',,,-246,,,,-297,-297,,-297,-297,-297,-297,-297,555,-290,552,551,550', ',553,,-290,,,,,-580,,,,-290,,,,,-297,-297,-297,-297,-297,-297,-297,-297', '-297,-297,-297,-297,-297,-297,,707,-297,-297,-297,,,-297,,274,-297,', ',-297,-297,,-297,,-297,,-297,,-297,-297,,-297,-297,-297,-297,-297,-290', '-297,-584,-297,116,117,118,119,120,-584,-584,-584,,,-584,-584,-584,-297', '-584,240,-297,-297,,-297,,-297,,-584,-584,-584,-584,,-297,,,254,255', ',-584,-584,,-584,-584,-584,-584,-584,555,,552,551,550,237,553,243,,239', '238,,235,236,,,241,,242,,,,-584,-584,-584,-584,-584,-584,-584,-584,-584', '-584,-584,-584,-584,-584,,707,-584,-584,-584,,,-584,,,-584,,,-584,-584', ',-584,,-584,,-584,,-584,-584,,-584,-584,-584,-584,-584,,-584,-584,-584', ',,,,,,,,555,,552,551,550,-584,553,,-584,-584,-584,-584,,-584,-246,-584', ',,,,-584,-246,-246,-246,,,-246,-246,-246,555,-246,552,551,550,560,553', ',707,,-246,-246,,,,563,,,240,,,-246,-246,,-246,-246,-246,-246,-246,', ',,,,254,255,,558,,,,,,,,,568,567,571,570,237,,243,564,239,238,,235,236', ',,241,-246,242,-282,,,,,-246,,-282,-282,-282,265,-246,-282,-282,-282', '555,-282,552,551,550,,553,,,,,-282,-282,-282,,,,,-246,-246,,-282,-282', ',-282,-282,-282,-282,-282,,,,,-246,,,-246,707,,,,-246,,,,,,,-246,,,-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,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,630,8,45,294,10,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246', '248,256,257,252,253,,233,234,,,254,255,,40,,,33,,,58,59,,,60,,35,237', ',243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,258,,-238,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,', ',67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,630', '8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240', '244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,40,,,296', ',,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70,71', '9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254', '255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241', '20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,233', '234,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236', '247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62', ',81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248,256,257', '252,253,,233,234,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',258,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246', '248,256,257,252,253,,233,234,,,254,255,,40,,,33,,,58,59,,,60,,35,237', ',243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,258,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249', '250,251,246,248,256,257,252,253,,233,234,,,254,255,,40,,,33,,,58,59', ',,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,220,258,,,,,62,,81,93,94,292,69,70,71,9,57', ',,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,', ',19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255', ',40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20', '242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,258,,,,,62,,81,93,94,292', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,240,244,249,250,251,246,248,,,252,253,,,,,,254,255', ',40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20', '242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,292,69', '70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,240,244,249,250,251,246,248,256,257,252,253,,-604,-604', ',,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247', '245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93', '94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28', '27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248,256,257,252', '253,,-604,-604,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239,238', ',235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,', ',,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,240,244,249,250,251,246,248', '256,,252,253,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,-604,-604,-604,-604,246', '248,,,-604,-604,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,-604,-604,-604,-604,246', '248,,,-604,-604,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,-604,-604,-604,-604,246', '248,,,-604,-604,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237,,243,44,239', '238,,235,236,247,245,241,20,242,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,,,,,,,,,,,,,,,,254,255', ',40,,,296,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,,,241,20,242', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,292,69,70,71', '9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,240,-604,-604,-604,-604,246,248,,,-604,-604,,,,,,254,255', ',40,,,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20', '242,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,5,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,240,-604,-604,-604,-604,246,248,,,-604,-604,,,,,,254,255,,40', ',,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,5,69,70,71', '9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,240,-604,-604,-604,-604,246,248,,,-604,-604,,,,,,254,255,,40', ',,33,,,58,59,,,60,,35,237,,243,44,239,238,,235,236,247,245,241,20,242', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,292,69,70,71', '9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,240,,,,,,,,,,,,,,,,254,255,,40,,,33,,,58,59,,,60,,35,237', ',243,44,239,238,,235,236,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,240,,,,,,,,,,,,,,,,254,255', ',40,,,33,,,58,59,,,60,,35,237,,,44,239,238,,235,236,,,,20,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,292,69,70,71,9,57,,', ',63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19', ',,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,240,,,,,,,,,,,,,,,,254,255,,40,,,296,,,58,59,,,60,,35,237,,243,44', '239,238,,235,236,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,', '62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58', '59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,,,,62,,81,93,94,5,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40', ',,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,294,10', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,', ',,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,,,,62,,81,93,94,292,69,70,71,9,57,,,,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45', '294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,', ',,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,89,284', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,', ',,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106', '95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,665,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106', '95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,309,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,305', ',,231,,,58,59,,,60,,,555,,552,551,550,560,553,,,,,,,,,563,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,511,,558,62,,81,93,94,69,70,71,,57,571', '570,,63,64,564,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,281,,44,,,287,,,,,,230', ',,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,', ',,,,,,,,,,305,,,301,,,58,59,,,60,,300,,,,,,,,,,,,,,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,309,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,', ',,,305,,,231,,,58,59,,,60,,,555,,552,551,550,560,553,,,,,,,,,563,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,317,,558,62,,81,93,94,69,70,71,9', '57,571,570,,63,64,564,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107,108,', '91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,', ',,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', ',,315,,,,,,,,,,,,,,,,,,,,936,,,231,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,', ',,,,,,,,,,,,,942,,,231,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,309,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,305,', ',301,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,315', ',,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,936,,,231,,,58,59,,,60,,,555,,552', '551,550,560,553,,,,,,,,,563,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,', ',558,62,,81,93,94,69,70,71,9,57,571,570,,63,64,564,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,,,390,62,,81,93,94,69,70,71,,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,', '80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73', ',,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56', '97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,665,,,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,', ',69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28', '27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,406,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,', ',,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,', ',,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,406,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,309,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,', '58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,', '69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28', '27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283', ',281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308', '314,101,100,102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60,,,555', ',552,551,550,560,553,,,,,,,,,563,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,558,62,,81,93,94,69,70,71,9,57,571,570,,63,64,564,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,,10,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40', ',,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,', ',29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,665,,281,,44,,,287,,,', ',,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,281,,44,,,287', ',,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9', '57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,19,,,,,,8,45,294,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,390,62,,81,93,94,69,70,71', ',57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232', ',,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,', ',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,', ',105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,', ',,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106', '95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,309,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,58,59,,,60,,,,,,,,,,,,,,,,,', ',,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,', ',,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,', ',,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230', ',,,,89,284,82,83,,84,86,85,87,,,,,80,88,220,,,69,70,71,62,57,81,93,94', '63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103', ',,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232', ',,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,', ',,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311', '312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,,10,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58', '59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,', '307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308', '314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,', ',,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,527,,58,59,,,60,,,', ',,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,', ',,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58', '59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,', ',,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,', ',,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,', ',,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,281,,44,,,287,,,,,,230,,,,', '89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232', ',,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,665,,281,,44,,,287,,,,,,230', ',,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312', '72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,', '231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,,10,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58', '59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286', '99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286', '99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60', ',283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,', ',,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,759,', ',,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,', '63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19', ',,,,,8,45,,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,', ',105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,', ',,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,89', '284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,', ',67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,', ',,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,,,44,,,287,,,,,,230', ',,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312', '72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,', '231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72', '73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,406,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73', ',,,,,307,308,314,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,', '58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,', ',,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62', '57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,', '232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,', '231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,', ',80,88,113,,,,,112,62,,81,93,94,69,70,71,,57,,,,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106', '95,56,97,96,98,286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225', ',,231,,,58,59,,,60,,283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,,,309,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,350', ',,33,,,58,59,,,60,,35,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73', ',,,,,307,308,314,101,100,102,103,,,232,,,,,,,309,,,105,104,106,355,56', '97,96,356,,99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,,362,,,357,,,231,', ',58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,', ',69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307', '308,314,101,100,102,103,,,232,,,,,,,309,,,105,104,106,355,56,97,96,356', ',99,107,108,,91,92,,,315,,,,,,,,,,,,,,,,,,,,357,,,231,,,58,59,,,60,', ',,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62', '57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,', '91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,', '44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,', ',,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,286,99,107,108,', '91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,283,,281,', '44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314', '101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44', ',,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100', '102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,', ',,230,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102', '103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,220,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,311,312,72,73,,,,,,307,308,314,101,100,102,103,,,232,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,225,,,231,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231', ',,58,59,,,60,,,,,,44,,,,,,,,,230,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,', ',29,28,27,101,100,102,103,,,232,,,,,,,45,,,105,104,106,95,56,97,96,98', '286,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,283,,281,,44,,,287,,,,,,230,,,,,89,284,82,83,,84,86,85,87,,,,', '80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,', ',,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,225,,,231,,,58,59', ',,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,', ',62,,81,93,94,173,184,174,197,170,190,180,179,200,201,195,178,177,172', '198,202,203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196,181', '169,188,187,,,,,,168,175,166,167,163,164,165,124,126,,,125,,,,,,,,157', '158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,', ',,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,,,162', '89,,,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200,201,195,178,177', '172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196', '181,169,188,187,,,,,,168,175,166,167,163,164,165,124,126,,,125,,,,,', ',,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147', ',,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134', ',,162,89,,,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200,201,195', '178,177,172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,193', '186,196,181,169,188,187,,,,,,168,175,166,167,163,164,165,124,126,,,125', ',,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146', '147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155', '134,,,162,89,,,,,,,,,,,,,,88,173,184,174,197,170,190,180,179,200,201', '195,178,177,172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194', '193,186,196,181,169,188,187,,,,,,168,175,166,167,163,164,165,124,126', '123,,125,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141', '133,155,134,,,162,89,,,,,,,,,,,,,,88,173,184,174,197,170,190,180,179', '200,201,195,178,177,172,198,202,203,182,171,185,189,191,183,176,,,,192', '199,194,193,186,196,181,169,188,187,,,,,,168,175,166,167,163,164,165', '124,126,,,125,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140', ',,,159,160,146,147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149', '143,141,133,155,134,,,162,173,184,174,197,170,190,180,179,200,201,195', '178,177,172,198,202,203,182,171,185,189,191,183,176,,,,192,199,194,373', '372,374,371,169,188,187,,,,,,168,175,166,167,368,369,370,366,126,97', '96,367,,99,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,378,,,,,,,,151,150,,135,156,153,152,161,148,149,143', '141,133,155,134,676,432,162,,677,,,,,,,,157,158,,154,136,137,138,145', '142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156', '153,152,161,148,149,143,141,133,155,134,646,432,162,,647,,,,,,,,157', '158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265', ',,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,482', '432,162,,483,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,', ',,159,160,146,147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149', '143,141,133,155,134,428,432,162,,429,,,,,,,,157,158,,154,136,137,138', '145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135', '156,153,152,161,148,149,143,141,133,155,134,435,439,162,,434,,,,,,,', '157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,', ',,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134', '679,439,162,,680,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140', ',,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148', '149,143,141,133,155,134,1011,439,162,,1010,,,,,,,,157,158,,154,136,137', '138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150', ',135,156,153,152,161,148,149,143,141,133,155,134,482,432,162,,483,,', ',,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147', ',,,,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155', '134,732,439,162,,733,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139', '140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161', '148,149,143,141,133,155,134,648,439,162,,649,,,,,,,,157,158,,154,136', '137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151', '150,,135,156,153,152,161,148,149,143,141,133,155,134,764,439,162,,763', ',,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146', '147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133', '155,134,761,432,162,,762,,,,,,,,157,158,,154,136,137,138,145,142,144', ',,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152', '161,148,149,143,141,133,155,134,1014,432,162,,1015,,,,,,,,157,158,,154', '136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,', ',151,150,,135,156,153,152,161,148,149,143,141,133,155,134,1016,439,162', ',1017,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160', '146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141', '133,155,134,648,439,162,,649,,,,,,,,157,158,,154,136,137,138,145,142', '144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153', '152,161,148,149,143,141,133,155,134,646,432,162,,647,,,,,,,,157,158', ',154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,265,', ',,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,729,439', '162,,730,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,265,,,,,,,,151,150,,135,156,153,152,161,148,149,143', '141,133,155,134,727,432,162,,728,,,,,,,,157,158,,154,136,137,138,145', '142,144,,,139,140,,,,159,160,146,147,,,,,,265,,,,,,,,151,150,,135,156', '153,152,161,148,149,143,141,133,155,134,,555,162,552,551,550,560,553', ',555,,552,551,550,560,553,563,,,,,,,,563,,555,,552,551,550,560,553,', ',,,,558,,,563,,,,,558,568,567,571,570,,,,564,568,567,571,570,,,,564', '558,,555,,552,551,550,560,553,568,567,571,570,,,,564,563,,555,,552,551', '550,560,553,,555,,552,551,550,560,553,563,,,,,558,,,563,,,,,,,,571,570', ',,,564,558,,,,,,,,558,568,567,571,570,,,,564,568,567,571,570,,,555,564', '552,551,550,560,553,555,,552,551,550,560,553,,563,,,,,,555,563,552,551', '550,560,553,,,,,,,,,563,558,,,,,,,558,,568,567,571,570,,,,564,,571,570', ',558,541,564,,,,,,,568,567,571,570,,,555,564,552,551,550,560,553,555', ',552,551,550,560,553,555,563,552,551,550,560,553,555,563,552,551,550', '560,553,555,563,552,551,550,560,553,,563,558,,,,,,563,558,,568,567,571', '570,,558,,564,,571,570,,558,,564,,571,570,,558,,564,,571,570,,,,564', ',571,570,,,555,564,552,551,550,560,553,,,,,,,,,563,,,,,,,,,,,,,,,,,', ',,,,558,,,,,,,,,568,567,571,570,,,,564' ] racc_action_table = arr = ::Array.new(25327, 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 = [ '763,351,595,595,647,727,1015,763,763,763,61,357,655,763,763,357,763', '19,725,1035,659,385,1014,444,444,845,386,787,123,585,1,310,646,123,123', '348,763,763,884,763,763,763,763,763,985,1017,1016,1028,943,671,729,730', '599,599,907,659,686,686,19,671,331,647,787,331,693,728,763,763,763,763', '763,763,763,763,763,763,763,763,763,763,7,341,763,763,763,340,763,385', '939,646,763,347,386,763,10,310,595,61,763,655,763,595,763,763,940,763', '763,763,763,763,351,763,764,763,727,729,730,444,310,764,764,764,1017', '1016,1015,764,764,763,764,1015,763,763,846,763,845,763,725,764,585,725', '1014,725,763,763,348,1014,599,12,764,764,686,764,764,764,764,764,884', '578,577,729,730,884,985,1017,1016,1028,943,985,1017,1016,1028,943,907', '693,728,858,26,907,764,764,764,764,764,764,764,764,764,764,764,764,764', '764,784,762,764,764,764,13,764,341,347,457,764,340,341,764,939,226,340', '499,764,939,764,381,764,764,15,764,764,764,764,764,940,764,764,764,676', '940,716,716,290,380,858,457,761,290,846,457,457,764,26,846,764,764,648', '764,912,764,912,784,762,648,648,648,764,764,648,648,648,679,648,578', '577,26,226,330,578,577,330,648,648,648,648,499,499,499,413,381,381,381', '648,648,429,648,648,648,648,648,41,41,499,761,676,802,677,380,380,380', '710,610,710,710,710,903,710,903,903,903,22,903,648,648,648,648,648,648', '648,648,648,648,648,648,648,648,679,679,648,648,648,429,648,648,676', '413,648,676,24,648,648,429,648,37,648,24,648,676,648,648,40,648,648', '648,648,648,223,648,648,648,428,802,677,315,315,610,610,679,41,41,679', '612,38,648,384,610,648,648,648,648,679,648,710,648,98,45,319,903,648', '648,631,98,98,98,698,698,98,98,98,366,98,802,677,24,802,677,366,428', '98,109,98,98,98,223,802,677,450,428,204,38,98,98,225,98,98,98,98,98', '947,38,227,947,228,319,383,612,612,631,384,384,384,315,315,319,232,612', '264,631,224,17,98,98,98,98,98,98,98,98,98,98,98,98,98,98,366,278,98', '98,98,692,98,98,692,450,98,382,279,98,98,387,98,367,98,282,98,39,98', '98,367,98,98,98,98,98,434,98,17,98,383,383,383,434,434,434,854,224,17', '434,434,854,434,98,339,339,98,98,98,98,368,98,294,98,356,849,344,368', '98,98,849,344,434,434,39,434,434,434,434,434,295,382,382,382,39,387', '387,387,367,603,603,369,370,603,603,603,3,334,369,370,334,3,434,434', '434,434,434,434,434,434,434,434,434,434,434,434,356,297,434,434,434', '298,434,356,299,368,434,305,356,434,997,997,356,308,434,309,434,314', '434,434,316,434,434,434,434,434,95,434,320,434,323,356,328,95,95,95', '369,370,95,95,95,978,95,434,14,14,434,434,978,434,95,434,95,95,95,332', '333,978,434,434,335,356,95,95,77,95,95,95,95,95,345,733,346,302,350', '303,77,371,733,352,302,372,303,733,371,361,77,733,372,302,396,303,95', '95,95,95,95,95,95,95,95,95,95,95,95,95,978,402,95,95,95,373,95,95,405', '407,95,410,373,95,95,414,95,374,95,424,95,732,95,95,374,95,95,95,95', '95,733,95,302,95,303,426,371,376,304,427,372,436,446,458,376,304,459', '95,460,461,95,95,95,95,304,95,456,95,435,486,490,506,95,95,507,435,435', '435,923,510,373,435,435,732,435,512,517,520,923,528,732,476,374,435', '529,732,530,531,456,732,543,544,456,456,435,435,546,435,435,435,435', '435,376,304,547,548,557,306,732,695,565,923,923,476,306,569,923,476', '476,695,476,476,572,306,435,435,435,435,435,435,435,435,435,435,435', '435,435,435,732,574,435,435,435,889,435,889,889,889,435,889,579,435', '695,695,580,597,435,695,435,607,435,435,615,435,435,435,435,435,649', '435,435,435,306,617,623,649,649,649,632,637,649,649,649,321,649,435', '642,650,435,435,321,435,651,435,649,649,649,652,654,321,435,435,658', '660,649,649,662,649,649,649,649,649,664,935,670,941,673,46,675,678,935', '681,941,682,46,685,687,694,709,935,711,941,718,46,649,649,649,649,649', '649,649,649,649,649,649,649,649,649,321,723,649,649,649,726,649,649', '349,735,649,739,758,649,649,349,649,760,649,769,649,790,649,649,349', '649,649,649,649,649,935,649,941,649,46,801,805,989,359,989,989,989,808', '989,809,359,816,649,817,818,649,649,649,649,359,649,822,649,440,823', '825,826,649,649,828,440,440,440,831,833,440,440,440,349,440,832,836', '832,832,832,839,832,848,440,440,440,440,327,327,327,327,327,852,853', '440,440,856,440,440,440,440,440,857,359,866,867,869,412,870,871,873', '874,832,558,412,558,558,558,875,558,905,832,909,412,440,440,440,440', '440,440,440,440,440,440,440,440,440,440,910,516,440,440,440,916,920', '440,516,933,440,936,558,440,440,942,440,516,440,945,440,558,440,440', '946,440,440,440,440,440,951,440,440,440,412,952,953,954,222,475,707', '955,707,707,707,222,707,440,957,355,440,440,440,440,222,440,27,440,968', '971,972,973,440,27,27,27,516,974,27,27,27,475,27,976,981,475,475,707', '475,475,996,27,27,27,998,999,707,293,293,293,293,293,27,27,1010,27,27', '27,27,27,1011,355,1013,222,1019,1020,1024,1025,355,1026,1027,,,355,', ',,355,,,,,27,27,27,27,27,27,27,27,27,27,27,27,27,27,355,,27,27,27,16', ',27,588,27,27,,16,27,27,588,27,,27,,27,16,27,27,588,27,27,27,27,27,355', '27,27,27,793,,793,793,793,793,793,6,6,6,6,6,,27,,793,27,27,430,27,,27', ',,,430,430,430,27,,430,430,430,,430,468,16,793,,588,,,,430,430,430,793', '793,793,793,,468,468,793,430,430,,430,430,430,430,430,904,,904,904,904', '468,904,468,,468,468,,468,468,,,468,793,468,,,,430,430,430,430,430,430', '430,430,430,430,430,430,430,430,,904,430,430,430,,,430,,430,430,,,430', '430,,430,,430,,430,,430,430,,430,430,430,430,430,28,430,430,430,,,,28', '28,28,,,28,28,28,,28,430,,,430,430,,430,,430,28,28,,,,,430,,,,28,28', ',28,28,28,28,28,995,680,995,995,995,,995,,680,,,,,680,,,,680,,,,,28', '28,28,28,28,28,28,28,28,28,28,28,28,28,,995,28,28,28,,,28,,28,28,,,28', '28,,28,,28,,28,,28,28,,28,28,28,28,28,680,28,439,28,504,504,504,504', '504,439,439,439,,,439,439,439,28,439,469,28,28,,28,,28,,439,439,439', '439,,28,,,469,469,,439,439,,439,439,439,439,439,958,,958,958,958,469', '958,469,,469,469,,469,469,,,469,,469,,,,439,439,439,439,439,439,439', '439,439,439,439,439,439,439,,958,439,439,439,,,439,,,439,,,439,439,', '439,,439,,439,,439,439,,439,439,439,439,439,,439,439,439,,,,,,,,,956', ',956,956,956,439,956,,439,439,439,439,,439,481,439,,,,,439,481,481,481', ',,481,481,481,928,481,928,928,928,928,928,,956,,481,481,,,,928,,,466', ',,481,481,,481,481,481,481,481,,,,,,466,466,,928,,,,,,,,,928,928,928', '928,466,,466,928,466,466,,466,466,,,466,481,466,56,,,,,481,,56,56,56', '481,481,56,56,56,834,56,834,834,834,,834,,,,,56,56,56,,,,,481,481,,56', '56,,56,56,56,56,56,,,,,481,,,481,834,,,,481,,,,,,,481,,,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,888,888,888,888,888,888,,,,888,888,,,,888,,888,888,888,888', '888,888,888,,,,,,888,888,888,888,888,888,888,,,888,,,,,417,888,888,888', '888,888,888,888,888,888,888,888,888,,888,888,888,,888,888,888,888,888', '417,417,417,417,417,417,417,417,417,417,417,,417,417,,,417,417,,888', ',,888,,,888,888,,,888,,888,417,,417,888,417,417,,417,417,417,417,417', '888,417,,,,888,888,888,888,,888,888,888,888,,,,,888,888,,417,,417,,', '888,,888,888,888,296,296,296,296,296,296,,,,296,296,,,,296,,296,296', '296,296,296,296,296,,,,,,296,296,296,296,296,296,296,,,296,,,,,423,296', '296,296,296,296,296,296,296,296,296,296,296,,296,296,296,,296,296,296', '296,296,423,423,423,423,423,423,423,423,423,423,423,,423,423,,,423,423', ',296,,,296,,,296,296,,,296,,296,423,,423,296,423,423,,423,423,423,423', '423,296,423,,,,296,296,296,296,,296,296,296,296,,,,,296,296,,423,,,', ',296,,296,296,296,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,,795,795,795', '795,795,21,21,21,21,21,21,21,21,21,21,21,,21,21,,,21,21,,795,,,795,', ',795,795,,,795,,795,21,,21,795,21,21,,21,21,21,21,21,795,21,,,,795,795', '795,795,,795,795,795,795,,,,,795,795,,21,,,,,795,,795,795,795,573,573', '573,573,573,573,,,,573,573,,,,573,,573,573,573,573,573,573,573,,,,,', '573,573,573,573,573,573,573,,,573,,,,,,573,573,573,573,573,573,573,573', '573,573,573,573,,573,573,573,,573,573,573,573,573,766,766,766,766,766', '766,766,766,766,766,766,,766,766,,,766,766,,573,,,573,,,573,573,,,573', ',573,766,,766,573,766,766,,766,766,766,766,766,573,766,,,,573,573,573', '573,,573,573,573,573,,,,,573,573,,766,,,,,573,,573,573,573,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,959,959,959,959,959', '959,959,959,,959,959,959,,959,959,959,959,959,276,276,276,276,276,276', '276,276,276,276,276,,276,276,,,276,276,,959,,,959,,,959,959,,,959,,959', '276,,276,959,276,276,,276,276,276,276,276,959,276,,,,959,959,959,959', ',959,959,959,959,,,,,959,959,,276,,,,,959,,959,959,959,840,840,840,840', '840,840,,,,840,840,,,,840,,840,840,840,840,840,840,840,,,,,,840,840', '840,840,840,840,840,,,840,,,,,,840,840,840,840,840,840,840,840,840,840', '840,840,,840,840,840,,840,840,840,840,840,863,863,863,863,863,863,863', '863,863,863,863,,863,863,,,863,863,,840,,,840,,,840,840,,,840,,840,863', ',863,840,863,863,,863,863,863,863,863,840,863,,,,840,840,840,840,,840', '840,840,840,,,,,840,840,,863,,,,,840,,840,840,840,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,479,479,479,479,479,479,479,479', '479,479,479,,479,479,,,479,479,,841,,,841,,,841,841,,,841,,841,479,', '479,841,479,479,,479,479,479,479,479,841,479,,,,841,841,841,841,,841', '841,841,841,,,,,841,841,479,479,,,,,841,,841,841,841,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,844,844,844,844,844,844,844,844', '844,844,,844,844,844,,844,844,844,844,844,526,526,526,526,526,526,526', '526,526,526,526,,526,526,,,526,526,,844,,,844,,,844,844,,,844,,844,526', ',526,844,526,526,,526,526,526,526,526,844,526,,,,844,844,844,844,,844', '844,844,844,,,,,844,844,,526,,,,,844,,844,844,844,326,326,326,326,326', '326,,,,326,326,,,,326,,326,326,326,326,326,326,326,,,,,,326,326,326', '326,326,326,326,,,326,,,,,,326,326,326,326,326,326,326,326,326,326,326', '326,,326,326,326,,326,326,326,326,326,477,477,477,477,477,477,477,,', '477,477,,,,,,477,477,,326,,,326,,,326,326,,,326,,326,477,,477,326,477', '477,,477,477,477,477,477,326,477,,,,326,326,326,326,,326,326,326,326', ',,,,326,326,,,,,,,326,,326,326,326,938,938,938,938,938,938,,,,938,938', ',,,938,,938,938,938,938,938,938,938,,,,,,938,938,938,938,938,938,938', ',,938,,,,,,938,938,938,938,938,938,938,938,938,938,938,938,,938,938', '938,,938,938,938,938,938,454,454,454,454,454,454,454,454,454,454,454', ',454,454,,,454,454,,938,,,938,,,938,938,,,938,,938,454,,454,938,454', '454,,454,454,454,454,454,938,454,,,,938,938,938,938,,938,938,938,938', ',,,,938,938,,,,,,,938,,938,938,938,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,455,455,455,455,455,455,455,455,455,455,455', ',455,455,,,455,455,,750,,,750,,,750,750,,,750,,750,455,,455,750,455', '455,,455,455,455,455,455,750,455,,,,750,750,750,750,,750,750,750,750', ',,,,750,750,,,,,,,750,,750,750,750,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,478,478,478,478,478,478,478,478,,478,478,,', ',,,478,478,,807,,,807,,,807,807,,,807,,807,478,,478,807,478,478,,478', '478,478,478,478,807,478,,,,807,807,807,807,,807,807,807,807,,,,,807', '807,,,,,,,807,,807,807,807,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,470,470,470,470,470,470,470,,,470,470,,,,,,470,470,', '740,,,740,,,740,740,,,740,,740,470,,470,740,470,470,,470,470,470,470', '470,740,470,,,,740,740,740,740,,740,740,740,740,,,,,740,740,,,,,,,740', ',740,740,740,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,471,471,471,471,471,471,471,,,471,471,,,,,,471,471,,206,,,206,,', '206,206,,,206,,206,471,,471,206,471,471,,471,471,471,471,471,206,471', ',,,206,206,206,206,,206,206,206,206,,,,,206,206,,,,,,,206,,206,206,206', '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,850,465,465,465', '465,465,465,465,,,465,465,,,,,,465,465,,850,,,850,,,850,850,,,850,,850', '465,,465,850,465,465,,465,465,465,465,465,850,465,,,,850,850,850,850', ',850,850,850,850,,,,,850,850,,,,,,,850,,850,850,850,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,467,,,,,,,,,,,,,,,,467,467', ',301,,,301,,,301,301,,,301,,301,467,,467,301,467,467,,467,467,,,467', '301,467,,,,301,301,301,301,,301,301,301,301,,,,,301,301,,,,,,,301,,301', '301,301,736,736,736,736,736,736,,,,736,736,,,,736,,736,736,736,736,736', '736,736,,,,,,736,736,736,736,736,736,736,,,736,,,,,,736,736,736,736', '736,736,736,736,736,736,736,736,,736,736,736,,736,736,736,736,736,473', '473,473,473,473,473,473,,,473,473,,,,,,473,473,,736,,,736,,,736,736', ',,736,,736,473,,473,736,473,473,,473,473,473,473,473,736,473,,,,736', '736,736,736,,736,736,736,736,,,,,736,736,,,,,,,736,,736,736,736,0,0', '0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0', '0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,472,472,472,472,472,472,472,,,472', '472,,,,,,472,472,,0,,,0,,,0,0,,,0,,0,472,,472,0,472,472,,472,472,472', '472,472,0,472,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,,,,,,0,,0,0,0,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,474,474,474,474,474,474', '474,,,474,474,,,,,,474,474,,505,,,505,,,505,505,,,505,,505,474,,474', '505,474,474,,474,474,474,474,474,505,474,,,,505,505,505,505,,505,505', '505,505,,,,,505,505,,,,,,,505,,505,505,505,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,462,,,,,,,,,,,,,,,,462,462,,576,,,576', ',,576,576,,,576,,576,462,,462,576,462,462,,462,462,,,,576,,,,,576,576', '576,576,,576,576,576,576,,,,,576,576,,,,,,,576,,576,576,576,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,864,464,,,,,,,,,,,,,,', ',464,464,,864,,,864,,,864,864,,,864,,864,464,,,864,464,464,,464,464', ',,,864,,,,,864,864,864,864,,864,864,864,864,,,,,864,864,,,,,,,864,,864', '864,864,33,33,33,33,33,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,', '33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33,33,33,33,33,33,', '33,33,33,,33,33,33,33,33,463,,,,,,,,,,,,,,,,463,463,,33,,,33,,,33,33', ',,33,,33,463,,463,33,463,463,,463,463,,,,33,,,,,33,33,33,33,,33,33,33', '33,,,,,33,33,,,,,,,33,,33,33,33,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,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,,,,,231,231,231,231,,231,231,231,231,,,,,231,231,,', ',,,,231,,231,231,231,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,,,,,121,121,,,,,,,121', ',121,121,121,967,967,967,967,967,967,,,,967,967,,,,967,,967,967,967', '967,967,967,967,,,,,,967,967,967,967,967,967,967,,,967,,,,,,967,967', '967,967,967,967,967,967,967,967,967,967,,967,967,967,,967,967,967,967', '967,,,,,,,,,,,,,,,,,,,,967,,,967,,,967,967,,,967,,967,,,,967,,,,,,,', ',967,,,,,967,967,967,967,,967,967,967,967,,,,,967,967,,,,,,,967,,967', '967,967,881,881,881,881,881,881,,,,881,881,,,,881,,881,881,881,881,881', '881,881,,,,,,881,881,881,881,881,881,881,,,881,,,,,,881,881,881,881', '881,881,881,881,881,881,881,881,,881,881,881,,881,881,881,881,881,,', ',,,,,,,,,,,,,,,,,881,,,881,,,881,881,,,881,,881,,,,881,,,,,,,,,881,', ',,,881,881,881,881,,881,881,881,881,,,,,881,881,,,,,,,881,,881,881,881', '965,965,965,965,965,965,,,,965,965,,,,965,,965,965,965,965,965,965,965', ',,,,,965,965,965,965,965,965,965,,,965,,,,,,965,965,965,965,965,965', '965,965,965,965,965,965,,965,965,965,,965,965,965,965,965,,,,,,,,,,', ',,,,,,,,,965,,,965,,,965,965,,,965,,965,,,,965,,,,,,,,,965,,,,,965,965', '965,965,,965,965,965,965,,,,,965,965,,,,,,,965,,965,965,965,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,,,,29,29,29,887,29,887,887,887,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,,,,,,29,,,,,29,29,29,29,,29', '29,29,29,,,,,29,29,,,,838,838,838,29,838,29,29,29,838,838,,,,838,,838', '838,838,838,838,838,838,,,,,,838,838,838,838,838,838,838,,,838,,,,,', ',838,,,838,838,838,838,838,838,838,838,,838,838,838,,838,838,838,838', '838,,,,,,,,,,,,,,,,,,,,838,,,838,,,838,838,,,838,,,,,,838,,,,,,,,,838', ',,,,838,838,838,838,,838,838,838,838,,,,,838,838,,,,30,30,30,838,30', '838,838,838,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,30,,,,843,843,843,30,843,30,30,30', '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', ',,,31,31,31,843,31,843,843,843,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,,,,300,300,300', '31,300,31,31,31,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,,,703,,703,703,703,703,703,,,,,,,,,703,,300,300,300,300,,300,300', '300,300,,,,,300,300,,,,300,,703,300,,300,300,300,256,256,256,,256,703', '703,,256,256,703,,,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,,,,246,246,246,256,246,256,256,256,246,246,,,,246,,246,246,246', '246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246', '246,246,246,246,246,246,246,,246,246,246,,246,246,246,246,246,,,,,,', ',,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,,246,,,,,246', '246,246,246,,246,246,246,246,,,,,246,246,,,,861,861,861,246,861,246', '246,246,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,,,,862,862,862,861,862,861,861,861,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,862,862,862,,862,862,862,862,,,,,862,862,,,,257,257,257,862', '257,862,862,862,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,,,,34,34,34,257,34,257,257,257,34,34,,,,34,,34,34,34', '34,34,34,34,,,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34', '34,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,34,35,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,,,1030,,1030,1030,1030,1030', '1030,,,,,,,,,1030,,35,35,35,35,,35,35,35,35,,,,,35,35,,,,35,,1030,35', ',35,35,35,5,5,5,5,5,1030,1030,,5,5,1030,,,5,,5,5,5,5,5,5,5,,,,,,5,5', '5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,', ',,,,,,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,', ',,,5,5,,,,876,876,876,5,876,5,5,5,876,876,,,,876,,876,876,876,876,876', '876,876,,,,,,876,876,876,876,876,876,876,,,876,,,,,,,876,,,876,876,876', '876,876,876,876,876,,876,876,876,,876,876,,,876,,,,,,,,,,,,,,,,,,,,876', ',,876,,,876,876,,,876,,,,,,,,,,,,,,,,,,,,876,876,876,876,,876,876,876', '876,,,,,876,876,,,,885,885,885,876,885,876,876,876,885,885,,,,885,,885', '885,885,885,885,885,885,,,,,,885,885,885,885,885,885,885,,,885,,,,,', ',885,,,885,885,885,885,885,885,885,885,,885,885,885,,885,885,,,885,', ',,,,,,,,,,,,,,,,,,885,,,885,,,885,885,,,885,,,,,,,,,,,,,,,,,,,,885,885', '885,885,,885,885,885,885,,,,,885,885,,,,245,245,245,885,245,885,885', '885,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', ',,,672,672,672,245,672,245,245,245,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,,,,244,244,244,672,244,672,672,672,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,,,,668,668,668,244', '668,244,244,244,668,668,,,,668,,668,668,668,668,668,668,668,,,,,,668', '668,668,668,668,668,668,,,668,,,,,,,668,,,668,668,668,668,668,668,668', '668,,668,668,668,,668,668,668,668,668,,,,,,,,,,,,,,,,,,,,668,,,668,', ',668,668,,,668,,,,,,668,,,,,,,,,668,,,,,668,668,668,668,,668,668,668', '668,,,,,668,668,,,,665,665,665,668,665,668,668,668,665,665,,,,665,,665', '665,665,665,665,665,665,,,,,,665,665,665,665,665,665,665,,,665,,,,,', ',665,,,665,665,665,665,665,665,665,665,,665,665,665,,665,665,665,665', '665,,,,,,,,,,,,,,,,,,,,665,,,665,,,665,665,,,665,,,,,,665,,,,,,,,,665', ',,,,665,665,665,665,,665,665,665,665,,,,,665,665,,,,243,243,243,665', '243,665,665,665,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,,,,242,242,242,243,242,243,243,243,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,,,,317,317,317,242', '317,242,242,242,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', ',,,241,241,241,317,241,317,317,317,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,241,240,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', ',,,239,239,239,240,239,240,240,240,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,239,238,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', ',,,237,237,237,238,237,238,238,238,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,,,,236,236,236,237,236,237,237,237', '236,236,,,,236,,236,236,236,236,236,236,236,,,,,,236,236,236,236,236', '236,236,,,236,,,,,,,236,,,236,236,236,236,236,236,236,236,,236,236,236', ',236,236,236,236,236,,,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,', ',,,236,,,,,,,,,236,,,,,236,236,236,236,,236,236,236,236,,,,,236,236', ',,,934,934,934,236,934,236,236,236,934,934,,,,934,,934,934,934,934,934', '934,934,,,,,,934,934,934,934,934,934,934,,,934,,,,,,,934,,,934,934,934', '934,934,934,934,934,,934,934,934,,934,934,,,934,,,,,,,,,,,,,,,,,,,,934', ',,934,,,934,934,,,934,,,1007,,1007,1007,1007,1007,1007,,,,,,,,,1007', ',934,934,934,934,,934,934,934,934,,,,,934,934,,,,,,1007,934,,934,934', '934,111,111,111,111,111,1007,1007,,111,111,1007,,,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,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,,,,536,536,536,211,536,211,211,211,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,,,,533', '533,533,536,533,536,536,536,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,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,533,,,,210,210,210,533,210,533,533', '533,210,210,,,,210,,210,210,210,210,210,210,210,,,,,,210,210,210,210', '210,210,210,,,210,,,,,,,210,,,210,210,210,210,210,210,210,210,,210,210', '210,,210,210,210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210', ',,,,,210,,,,,,,,,210,,,,,210,210,210,210,,210,210,210,210,,,,,210,210', ',,,209,209,209,210,209,210,210,210,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,,,,208,208,208,209,208,209,209,209', '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', ',,,207,207,207,208,207,208,208,208,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,,,,527,527,527,207,527,207,207,207', '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', ',,,523,523,523,527,523,527,527,527,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,,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,,,,522,522,522,523,522,523,523,523', '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', ',,,519,519,519,522,519,522,522,522,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,,,,513,513,513,519,513,519,519,519,513,513,,,,513,,513', '513,513,513,513,513,513,,,,,,513,513,513,513,513,513,513,,,513,,,,,', ',513,,,513,513,513,513,513,513,513,513,513,513,513,513,,513,513,513', '513,513,,,,,,,,,,,,,,,,,,,,513,,,513,,,513,513,,,513,,513,,513,,513', ',,513,,,,,,513,,,,,513,513,513,513,,513,513,513,513,,,,,513,513,,,,511', '511,511,513,511,513,513,513,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,,,1005,,1005,1005,1005,1005,1005,,,,,,,,,1005,', '511,511,511,511,,511,511,511,511,,,,,511,511,,,,,,1005,511,,511,511', '511,120,120,120,120,120,1005,1005,,120,120,1005,,,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,,,,251,251,251,120,251', '120,120,120,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,,,,117,117,117,251,117,251,251,251,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,117,118', '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,,,,493,493,493,118,493,118,118,118,493,493,,,,493,,493,493', '493,493,493,493,493,,,,,,493,493,493,493,493,493,493,,,493,,,,,,,493', ',,493,493,493,493,493,493,493,493,493,493,493,493,,493,493,493,493,493', ',,,,,,,,,,,,,,,,,,,493,,,493,,,493,493,,,493,,493,,493,,493,,,493,,', ',,,493,,,,,493,493,493,493,,493,493,493,493,,,,,493,493,,,,495,495,495', '493,495,493,493,493,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,,,,497,497,497,495,497,495,495,495,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,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', ',503,503,503,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,,,,254,254,254,119,254,119,119,119', '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', ',,,767,767,767,254,767,254,254,254,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,,,767,767,,,767,,,,,,767,,,,,,,,,767,,,,,767,767,767', '767,,767,767,767,767,,,,,767,767,,,,266,266,266,767,266,767,767,767', '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,266,,,,780,780,780,266,780,266,266,266,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,780,781', '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', ',,,,781,781,,,,782,782,782,781,782,781,781,781,782,782,,,,782,,782,782', '782,782,782,782,782,,,,,,782,782,782,782,782,782,782,,,782,,,,,,,782', ',,782,782,782,782,782,782,782,782,,782,782,782,,782,782,782,782,782', ',,,,,,,,,,,,,,,,,,,782,,,782,,,782,782,,,782,,,,,,782,,,,,,,,,782,,', ',,782,782,782,782,,782,782,782,782,,,,,782,782,,,,783,783,783,782,783', '782,782,782,783,783,,,,783,,783,783,783,783,783,783,783,,,,,,783,783', '783,783,783,783,783,,,783,,,,,,,783,,,783,783,783,783,783,783,783,783', ',783,783,783,,783,783,783,783,783,,,,,,,,,,,,,,,,,,,,783,,,783,,,783', '783,,,783,,,,,,783,,,,,,,,,783,,,,,783,783,783,783,,783,783,783,783', ',,,,783,783,,,,250,250,250,783,250,783,783,783,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,,,,785,785,785,250,785', '250,250,250,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,,,,683,683,683,785,683,785,785,785,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,,,,274,274,274,683,274,683,683,683', '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,,,705,705,705,274,705,274,274,274,705,705,,,,705,,705', '705,705,705,705,705,705,,,,,,705,705,705,705,705,705,705,,,705,,,,,', ',705,,,705,705,705,705,705,705,705,705,,705,705,705,,705,705,705,705', '705,,,,,,,,,,,,,,,,,,,,705,,,705,,,705,705,,,705,,,,,,705,,,,,,,,,705', ',,,,705,705,705,705,,705,705,705,705,,,,,705,705,,,,255,255,255,705', '255,705,705,705,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,,,,281,281,281,255,281,255,255,255,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,,,,283,283,283,281', '283,281,281,281,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,283,286,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,,,,287,287,287,286', '287,286,286,286,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,,,,249,249,249,287,249,287,287,287,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,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,,,,248,248,248,292,248,292,292,292', '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', ',,,247,247,247,248,247,248,248,248,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,,,,325,325,325,247,325,247,247,247', '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', ',,,731,731,731,325,731,325,325,325,731,731,,,,731,,731,731,731,731,731', '731,731,,,,,,731,731,731,731,731,731,731,,,731,,,,,,,731,,,731,731,731', '731,731,731,731,731,,731,731,731,,731,731,731,731,731,,,,,,,,,,,,,,', ',,,,,731,,,731,,,731,731,,,731,,,,,,731,,,,,,,,,731,,,,,731,731,731', '731,,731,731,731,731,,,,,731,731,,,,235,235,235,731,235,731,731,731', '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', ',,,641,641,641,235,641,235,235,235,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,641,640,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', ',,,42,42,42,640,42,640,640,640,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,,,,43,43,43,42,43,42', '42,42,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,,,,234,234,234,43,234,43,43,43,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,,,,636,636', '636,234,636,234,234,234,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,,,,44,44,44,636,44,636,636,636,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,,,,', '44,44,,,,635,635,635,44,635,44,44,44,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,,,,634,634,634,635,634,635,635', '635,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,,,,633,633,633,634,633,634,634,634,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,,,,342,342,342', '633,342,633,633,633,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,,,,343,343,343,342,343,342,342,342,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,,,,233,233,233,343', '233,343,343,343,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,233,630,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,629,629,629,629,629,,,,629,629,,,,629,,629,629,629,629,629,629,629', ',,,,,629,629,629,629,629,629,629,,,629,,,,,,629,629,,629,629,629,629', '629,629,629,629,629,,629,629,629,,629,629,629,629,629,,,,,,,,,,,,,,', ',,,,,629,,,629,,,629,629,,,629,,629,,,,629,,,,,,,,,629,,,,,629,629,629', '629,,629,629,629,629,,,,,629,629,,,,982,982,982,629,982,629,629,629', '982,982,,,,982,,982,982,982,982,982,982,982,,,,,,982,982,982,982,982', '982,982,,,982,,,,,,,982,,,982,982,982,982,982,982,982,982,982,982,982', '982,,982,982,982,982,982,,,,,,,,,,,,,,,,,,,,982,,,982,,,982,982,,,982', ',982,,982,,982,,,982,,,,,,982,,,,,982,982,982,982,,982,982,982,982,', ',,,982,982,,,,626,626,626,982,626,982,982,982,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,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,,,,625,625,625', '626,625,626,626,626,625,625,,,,625,,625,625,625,625,625,625,625,,,,', ',625,625,625,625,625,625,625,,,625,,,,,,,625,,,625,625,625,625,625,625', '625,625,,625,625,625,,625,625,625,625,625,,,,,,,,,,,,,,,,,,,,625,,,625', ',,625,625,,,625,,,,,,625,,,,,,,,,625,,,,,625,625,625,625,,625,625,625', '625,,,,,625,625,,,,624,624,624,625,624,625,625,625,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,,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,,,,20,20,20,624', '20,624,624,624,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,,,,230,230,230,20,230,20,20,20,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,,,,253', '253,253,230,253,230,230,230,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,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,,,,,58,58,58', '58,,58,58,58,58,,,,,58,58,,,,258,258,258,58,258,58,58,58,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,,,,592,592', '592,258,592,258,258,258,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,,,,59,59,59,592,59,592,592,592', '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,59,,,,,59,59,,,,362,362,362,59,362,59,59,59,362,362,,,', '362,,362,362,362,362,362,362,362,,,,,,362,362,362,362,362,362,362,,', '362,,,,,,,362,,,362,362,362,362,362,362,362,362,,362,362,362,,362,362', '362,362,362,,,,,,,,,,,,,,,,,,,,362,,,362,,,362,362,,,362,,,,,,362,,', ',,,,,,362,,,,,362,362,362,362,,362,362,362,362,,,,,362,362,,,,737,737', '737,362,737,362,362,362,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,,,,252,252,252,737,252,737,737,737,252,252,', ',,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252,252,252,252', ',,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252,,252', '252,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,,,,,252', ',,,,,,,,252,,,,,252,252,252,252,,252,252,252,252,,,,,252,252,,,,688', '688,688,252,688,252,252,252,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,,,,759,759,759,688,759,688,688,688,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,759,759,759,,759,759,759,759,,,,,759,759,', ',,378,378,378,759,378,759,759,759,378,378,,,,378,,378,378,378,378,378', '378,378,,,,,,378,378,378,378,378,378,378,,,378,,,,,,,378,,,378,378,378', '378,378,378,378,378,,378,378,378,,378,378,378,378,378,,,,,,,,,,,,,,', ',,,,,378,,,378,,,378,378,,,378,,,,,,378,,,,,,,,,378,,,,,378,378,378', '378,,378,378,378,378,,,,,378,378,,,,60,60,60,378,60,378,378,378,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,60,,,,63,63,63,60,63,60,60,60,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,,,,,63,63,,,,406', '406,406,63,406,63,63,63,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,406,406,,406', '406,406,406,,,,,406,406,,,,64,64,64,406,64,406,406,406,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,,,,', '64,64,,,,67,67,67,64,67,64,64,64,67,67,,,,67,,67,67,67,67,67,67,67,', ',,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67', '67,67,,67,67,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67', ',,,,,,,,67,,,,,67,67,67,67,,67,67,67,67,,,,,67,67,67,,,,,67,67,,67,67', '67,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,,,,68,68,68,265,68,265,265,265', '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,,,,,68,68,,,,69,69,69,68,69,68,68,68,69,69,,,,69,,69,69,69,69,69', '69,69,,,,,,69,69,69,69,69,69,69,,,69,,,,,,,69,,,69,69,69,69,69,69,69', '69,,69,69,69,,69,69,,,69,,,,,,,,,,,,,,,,,69,,,69,,,69,,,69,69,,,69,', ',,,,,,,,,,,,,,,,,,69,69,69,69,,69,69,69,69,,,,,69,69,,,,70,70,70,69', '70,69,69,69,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,,,,582,582,582,70,582,70,70,70,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,', '582,,,582,,,,,,582,,,,,582,582,582,582,,582,582,582,582,,,,,582,582', ',,,581,581,581,582,581,582,582,582,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,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,581,,,,449,449,449,581,449,581,581,581', '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,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,,,,451,451,451,449,451,449,449,449,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,451,451,,451,451,451,451,451', ',,,,,,,,,,,,,,,,,,,451,,,451,,,451,451,,,451,,,,,,451,,,,,,,,,451,,', ',,451,451,451,451,,451,451,451,451,,,,,451,451,,,,452,452,452,451,452', '451,451,451,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,452,453,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,,,,219,219,219,453,219', '453,453,453,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,,,561,561,561,219,561,219,219,219,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,,,,218,218,218,561', '218,561,561,561,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,218,217,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,,,,212,212,212,217', '212,217,217,217,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,,,,116,116,116,212,116,212,212,212,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,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,,,397,397,,,,397,397,397,397,,,,,,', ',,,,,,,397,397,,397,397,397,397,397,397,397,397,397,397,397,397,,,397', '397,,,,,,,,,,,,,,397,621,621,621,621,621,621,621,621,621,621,621,621', '621,621,621,621,621,621,621,621,621,621,621,621,,,,621,621,621,621,621', '621,621,621,621,621,,,,,,621,621,621,621,621,621,621,621,621,,,621,', ',,,,,,621,621,,621,621,621,621,621,621,621,,,621,621,,,,621,621,621', '621,,,,,,,,,,,,,,621,621,,621,621,621,621,621,621,621,621,621,621,621', '621,,,621,621,,,,,,,,,,,,,,621,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,9,9,,,9,9,,,,,,,,,,,,,,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8', '8,8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8', '8,,8,8,8,8,8,8,8,,,8,8,,,,8,8,8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8', '8,8,8,8,,,8,8,,,,,,,,,,,,,,8,743,743,743,743,743,743,743,743,743,743', '743,743,743,743,743,743,743,743,743,743,743,743,743,743,,,,743,743,743', '743,743,743,743,743,743,743,,,,,,743,743,743,743,743,743,743,743,743', ',,743,,,,,,,,743,743,,743,743,743,743,743,743,743,,,743,743,,,,743,743', '743,743,,,,,,,,,,,,,,743,743,,743,743,743,743,743,743,743,743,743,743', '743,743,,,743,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,514,514,71,,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,524,524,514,,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,261,261,524,,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,213,213,261,,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,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,515,515,214,,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,515', '515,515,979,979,515,,979,,,,,,,,979,979,,979,979,979,979,979,979,979', ',,979,979,,,,979,979,979,979,,,,,,979,,,,,,,,979,979,,979,979,979,979', '979,979,979,979,979,979,979,979,591,591,979,,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,590,590,591', ',590,,,,,,,,590,590,,590,590,590,590,590,590,590,,,590,590,,,,590,590', '590,590,,,,,,590,,,,,,,,590,590,,590,590,590,590,590,590,590,590,590', '590,590,590,525,525,590,,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,628,628,525,,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,627,627', '628,,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', '627,627,627,627,983,983,627,,983,,,,,,,,983,983,,983,983,983,983,983', '983,983,,,983,983,,,,983,983,983,983,,,,,,983,,,,,,,,983,983,,983,983', '983,983,983,983,983,983,983,983,983,983,984,984,983,,984,,,,,,,,984', '984,,984,984,984,984,984,984,984,,,984,984,,,,984,984,984,984,,,,,,984', ',,,,,,,984,984,,984,984,984,984,984,984,984,984,984,984,984,984,448', '448,984,,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,448,448,448,447,447,448,,447,,,,,,,,447,447,,447,447,447,447', '447,447,447,,,447,447,,,,447,447,447,447,,,,,,447,,,,,,,,447,447,,447', '447,447,447,447,447,447,447,447,447,447,447,584,584,447,,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', '583,583,584,,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,,541,583,541,541,541,541,541,,699,,699,699,699', '699,699,541,,,,,,,,699,,701,,701,701,701,701,701,,,,,,541,,,701,,,,', '699,541,541,541,541,,,,541,699,699,699,699,,,,699,701,,1003,,1003,1003', '1003,1003,1003,701,701,701,701,,,,701,1003,,1001,,1001,1001,1001,1001', '1001,,741,,741,741,741,741,741,1001,,,,,1003,,,741,,,,,,,,1003,1003', ',,,1003,1001,,,,,,,,741,1001,1001,1001,1001,,,,1001,741,741,741,741', ',,742,741,742,742,742,742,742,990,,990,990,990,990,990,,742,,,,,,338', '990,338,338,338,338,338,,,,,,,,,338,742,,,,,,,990,,742,742,742,742,', ',,742,,990,990,,338,338,990,,,,,,,338,338,338,338,,,892,338,892,892', '892,892,892,894,,894,894,894,894,894,896,892,896,896,896,896,896,898', '894,898,898,898,898,898,930,896,930,930,930,930,930,,898,892,,,,,,930', '894,,892,892,892,892,,896,,892,,894,894,,898,,894,,896,896,,930,,896', ',898,898,,,,898,,930,930,,,926,930,926,926,926,926,926,,,,,,,,,926,', ',,,,,,,,,,,,,,,,,,,,926,,,,,,,,,926,926,926,926,,,,926' ] racc_action_check = arr = ::Array.new(25327, 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 = [ 4215, 30, nil, 422, nil, 7605, 1206, -32, 23527, 23399, -18, nil, 4, 54, 584, 130, 1132, 361, nil, -72, 18665, 2115, 281, nil, 259, nil, 151, 1124, 1366, 5886, 6148, 6410, nil, 4775, 7335, 7466, nil, 208, 284, 397, 293, 227, 16430, 16561, 16954, 253, 822, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1693, nil, 19066, 19459, 20376, -15, nil, 20507, 20769, nil, nil, 20900, 21170, 21301, 21432, 23768, nil, nil, nil, nil, nil, 524, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 602, nil, nil, 382, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 407, nil, 9971, nil, nil, nil, nil, 23004, 12083, 12214, 12885, 11821, 5195, nil, -25, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 283, nil, 3655, 10896, 10765, 10634, 10503, 10110, 22873, 24012, 24073, nil, nil, 22742, 22611, 22349, nil, nil, 1029, 268, 360, 365, 121, 285, 344, nil, 18796, 5055, 353, 17740, 16692, 16037, 9701, 9570, 9439, 9308, 9177, 9046, 8784, 8653, 8260, 7998, 6811, 15644, 15513, 15243, 13933, 11952, 19852, 18927, 13016, 14588, 6680, 7204, 19197, nil, nil, 23951, nil, nil, 348, 21039, 13278, nil, nil, nil, nil, nil, nil, nil, 14326, nil, 2395, nil, 330, 341, nil, 14719, 394, 14850, nil, nil, 14981, 15112, nil, nil, 100, nil, 15382, 1116, 406, 393, 1975, 443, 487, 447, 6541, 3935, 572, 574, 643, 528, 712, nil, 500, 461, 6, nil, nil, nil, 504, 300, 463, 8915, nil, 298, 538, 788, nil, 540, nil, 15775, 2955, 978, 478, nil, 135, -70, 537, 519, 423, 549, nil, nil, 25090, 474, 73, 69, 17478, 17609, 392, 630, 513, 67, 11, 861, 595, -23, 631, nil, nil, 1092, 495, -40, nil, 891, nil, 554, 19590, nil, nil, nil, 320, 402, 439, 470, 471, 576, 580, 610, 622, nil, 642, nil, 20245, nil, 171, 153, 413, 372, 312, -39, -34, 417, nil, nil, nil, nil, nil, nil, nil, nil, 553, 23143, nil, nil, nil, nil, 570, nil, nil, 557, 20638, 558, nil, nil, 550, nil, 960, 190, 654, nil, nil, 1835, nil, nil, nil, nil, nil, 1975, 571, nil, 584, 588, 272, 196, 1256, nil, nil, nil, 492, 740, 634, nil, nil, 1478, 988, nil, nil, nil, -13, nil, 634, 24744, 24683, 21825, 328, 21956, 22087, 22218, 3095, 3235, 672, 135, 659, 662, 664, 665, 4495, 4775, 4635, 3795, 1581, 3935, 1207, 1429, 3515, 3655, 4215, 4075, 4355, 1041, 697, 2955, 3375, 2675, nil, 1614, nil, nil, nil, nil, 611, nil, nil, nil, 612, nil, nil, 12345, nil, 12476, nil, 12607, nil, 149, nil, nil, nil, 12746, 1441, 4355, 613, 613, nil, nil, 618, 11682, 627, 11551, 23829, 24134, 992, 669, nil, 11420, 626, nil, 11289, 11158, 23890, 24378, 2815, 11027, 754, 757, 638, 679, nil, 10372, nil, nil, 10241, nil, nil, nil, nil, 24928, nil, 639, 640, nil, 645, 653, 654, nil, nil, nil, nil, nil, nil, nil, nil, 645, 992, nil, nil, 22480, nil, nil, nil, 741, nil, nil, nil, 746, nil, nil, 753, 2255, 809, nil, 4495, 132, 131, 816, 827, 21694, 21563, 24866, 24805, 5, nil, nil, 1135, nil, 24317, 24256, 19328, nil, nil, -34, 4915, 748, nil, 16, nil, nil, nil, 492, nil, nil, nil, 722, nil, nil, 239, nil, 309, nil, nil, 710, nil, 721, nil, nil, nil, 23271, nil, 723, 18534, 18403, 18272, 24500, 24439, 18010, 17871, 302, 766, 17347, 17216, 17085, 16823, 765, nil, nil, 16299, 16168, 772, nil, nil, nil, -54, -82, 244, 850, 739, 742, 870, nil, 853, -13, nil, nil, 771, -54, 876, nil, 755, nil, 807, 8522, nil, nil, 8391, nil, 783, -84, 8129, 765, nil, 770, 202, 270, 812, 235, 1334, 814, 772, 14195, nil, 841, 20, 894, 19983, nil, nil, nil, 337, 36, 779, 735, nil, nil, 293, 24936, nil, 24953, nil, 6588, nil, 14457, nil, 1057, nil, 777, 247, 782, nil, nil, nil, nil, 215, nil, 900, nil, nil, nil, nil, 922, nil, 6, 805, -19, 41, 26, 27, 15906, 678, 570, nil, 809, 4075, 19721, nil, 932, 3515, 25017, 25069, 23655, nil, nil, nil, nil, nil, nil, 3235, nil, nil, nil, nil, nil, nil, nil, 809, 20114, 817, 148, 107, 0, 112, nil, 2255, 13147, nil, 816, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 13409, 13540, 13671, 13802, 106, 14064, nil, -47, nil, nil, 838, nil, nil, 1187, nil, 2115, nil, nil, nil, nil, nil, 832, 269, nil, nil, 958, nil, 3375, 839, 887, nil, nil, nil, nil, nil, nil, 841, 888, 846, nil, nil, nil, 853, 856, nil, 857, 858, nil, 861, nil, nil, 868, 954, 866, 1657, nil, 997, nil, 6017, 1001, 2535, 2675, nil, 6279, 2815, 1, 106, nil, 1003, 391, 3795, nil, 1013, 893, 372, nil, 899, 899, 89, nil, nil, 6942, 7073, 2535, 4635, nil, 901, 902, nil, 903, 905, 906, nil, 931, 911, 905, 7736, nil, nil, nil, nil, 5475, nil, nil, 26, 7867, nil, 5755, 1835, 774, nil, nil, 25142, nil, 25149, nil, 25156, nil, 25163, nil, nil, nil, nil, 252, 1249, 917, nil, 42, nil, 1043, 1059, nil, 232, nil, nil, nil, 1064, nil, nil, nil, 985, nil, nil, 694, nil, nil, 25222, nil, 1578, nil, 25170, nil, nil, 968, 9832, 818, 1024, nil, 3095, 76, 92, 820, 1028, 36, nil, 974, 1083, 296, nil, nil, nil, 965, 970, 971, 972, 976, 1549, 983, 1471, 2395, nil, nil, nil, nil, nil, 5615, nil, 5335, 993, nil, nil, 994, 995, 996, 1002, nil, 1008, nil, 540, 24195, nil, 1135, 18141, 24561, 24622, 32, nil, nil, nil, 916, 25076, nil, nil, nil, nil, 1359, 1015, 573, 1143, 1144, nil, 25009, nil, 24992, nil, 11729, nil, 9879, nil, nil, 1073, 1079, nil, 1040, 10, -6, 34, 33, nil, 1039, 1040, nil, nil, nil, 1041, 1042, 1044, 1045, 35, nil, 7513, nil, nil, nil, nil, -114, nil ] racc_action_default = [ -3, -604, -1, -590, -4, -604, -7, -604, -604, -604, -604, -29, -604, -604, -33, -604, -604, -281, -45, -592, -604, -50, -52, -53, -54, -58, -258, -258, -258, -294, -329, -330, -70, -11, -74, -82, -84, -604, -494, -495, -604, -604, -604, -604, -604, -592, -237, -272, -273, -274, -275, -276, -277, -278, -279, -280, -578, -283, -287, -603, -568, -302, -390, -604, -604, -307, -310, -590, -604, -604, -604, -604, -331, -332, -435, -436, -437, -438, -439, -460, -442, -443, -462, -464, -447, -452, -456, -458, -474, -462, -476, -478, -479, -480, -481, -576, -483, -484, -577, -486, -487, -488, -489, -490, -491, -492, -493, -498, -499, -604, -2, -591, -599, -600, -601, -6, -604, -604, -604, -604, -604, -3, -17, -604, -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, -22, -122, -11, -604, -604, -604, -604, -604, -248, -604, -604, -588, -589, -604, -604, -592, -593, -49, -604, -494, -495, -604, -281, -604, -604, -229, -604, -11, -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, -399, -401, -604, -586, -587, -59, -248, -604, -301, -405, -414, -416, -65, -411, -66, -592, -67, -238, -253, -262, -262, -257, -604, -263, -604, -460, -570, -604, -604, -68, -69, -590, -12, -604, -15, -604, -72, -11, -592, -604, -75, -78, -11, -90, -91, -604, -604, -98, -294, -297, -592, -604, -329, -330, -333, -412, -604, -80, -604, -86, -291, -477, -604, -214, -215, -230, -604, -11, -285, -592, -239, -596, -596, -604, -604, -596, -604, -303, -304, -526, -51, -604, -604, -604, -604, -590, -604, -591, -494, -495, -604, -604, -281, -604, -343, -344, -108, -109, -604, -111, -604, -281, -502, -604, -494, -495, -322, -113, -114, -155, -156, -157, -173, -178, -185, -188, -324, -604, -566, -604, -440, -604, -604, -604, -604, -604, -604, -604, -604, 1037, -5, -602, -23, -24, -25, -26, -27, -604, -604, -19, -20, -21, -123, -604, -30, -32, -268, -604, -604, -267, -31, -604, -34, -604, -281, -42, -44, -196, -243, -263, -46, -47, -35, -197, -243, -592, -249, -262, -262, -579, -580, -258, -409, -581, -582, -580, -579, -258, -408, -410, -581, -582, -41, -204, -48, -592, -300, -604, -604, -604, -248, -291, -604, -604, -604, -205, -206, -207, -208, -209, -210, -211, -212, -216, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -231, -232, -233, -234, -592, -420, -258, -579, -580, -56, -60, -592, -259, -418, -420, -592, -296, -254, -604, -255, -604, -260, -604, -264, -604, -573, -575, -10, -591, -14, -3, -592, -71, -289, -87, -76, -604, -592, -248, -604, -604, -97, -604, -477, -604, -83, -88, -604, -604, -604, -604, -235, -604, -427, -604, -592, -604, -240, -598, -597, -242, -598, -292, -293, -569, -391, -526, -394, -565, -565, -509, -511, -511, -511, -525, -527, -528, -529, -530, -531, -532, -533, -534, -604, -536, -538, -540, -545, -547, -548, -550, -555, -557, -558, -560, -561, -562, -604, -11, -334, -335, -11, -604, -604, -604, -604, -604, -248, -604, -604, -291, -315, -108, -109, -110, -604, -604, -248, -318, -500, -604, -11, -504, -326, -592, -441, -461, -466, -604, -468, -444, -463, -604, -465, -446, -604, -449, -604, -451, -454, -604, -455, -604, -475, -8, -18, -604, -28, -271, -604, -604, -248, -604, -604, -604, -604, -413, -604, -250, -252, -604, -604, -61, -247, -406, -604, -604, -63, -407, -299, -594, -579, -580, -579, -580, -592, -604, -604, -421, -55, -402, -418, -245, -604, -379, -604, -295, -262, -261, -265, -604, -571, -572, -604, -13, -604, -73, -604, -79, -85, -592, -579, -580, -246, -583, -96, -604, -81, -604, -203, -213, -592, -603, -603, -284, -286, -288, -596, -604, -592, -604, -507, -508, -604, -604, -518, -604, -521, -604, -523, -604, -345, -604, -347, -349, -356, -592, -539, -549, -559, -563, -603, -336, -603, -308, -337, -338, -311, -604, -314, -604, -592, -579, -580, -583, -290, -604, -108, -109, -112, -592, -11, -604, -320, -604, -11, -526, -526, -604, -567, -467, -470, -471, -472, -473, -11, -445, -448, -450, -453, -457, -459, -124, -269, -604, -592, -579, -580, -580, -579, -43, -244, -604, -595, -262, -37, -199, -38, -200, -62, -39, -202, -40, -201, -64, -604, -604, -604, -604, -413, -604, -400, -379, -404, -403, -604, -415, -380, -592, -382, -11, -417, -256, -266, -574, -16, -77, -413, -89, -298, -603, -341, -11, -428, -603, -429, -430, -241, -392, -395, -397, -384, -604, -565, -546, -564, -510, -511, -511, -537, -511, -511, -556, -511, -534, -551, -592, -604, -354, -604, -535, -604, -339, -604, -604, -11, -11, -313, -604, -11, -413, -604, -413, -604, -604, -11, -323, -604, -592, -604, -327, -604, -270, -413, -36, -198, -251, -604, -236, -11, -57, -565, -565, -361, -363, -363, -363, -378, -604, -592, -534, -542, -543, -553, -419, -9, -11, -434, -342, -604, -604, -432, -11, -11, -604, -393, -506, -604, -514, -604, -516, -604, -519, -604, -522, -524, -346, -348, -352, -604, -357, -305, -604, -306, -604, -604, -265, -603, -316, -319, -501, -604, -325, -503, -505, -504, -469, -422, -604, -359, -360, -369, -371, -604, -374, -604, -376, -381, -604, -604, -541, -604, -433, -11, -494, -495, -604, -604, -281, -431, -604, -604, -592, -386, -388, -389, -511, -511, -511, -511, -350, -604, -355, -604, -11, -309, -312, -423, -424, -425, -11, -321, -11, -565, -544, -362, -363, -363, -363, -363, -554, -363, -383, -552, -604, -291, -427, -248, -604, -604, -291, -396, -398, -385, -604, -604, -512, -515, -517, -520, -604, -353, -603, -604, -604, -358, -604, -366, -604, -368, -604, -372, -604, -375, -377, -290, -583, -426, -592, -579, -580, -583, -290, -387, -511, -351, -340, -317, -328, -363, -363, -363, -363, -413, -513, -604, -364, -367, -370, -373, -363, -365 ] clist = [ '218,213,221,26,260,375,336,424,26,262,529,329,687,494,114,430,436,408', '409,580,299,127,127,26,132,132,325,2,485,740,6,631,26,26,26,6,26,557', '666,122,205,111,130,130,542,706,278,278,278,277,277,277,573,576,110', '663,836,663,320,261,486,26,520,481,313,313,26,26,549,589,26,264,271', '273,719,722,330,658,114,666,279,279,279,316,127,696,697,380,327,711', '298,295,268,272,297,805,827,905,313,313,313,817,870,950,340,341,948', '902,344,795,331,334,115,383,26,361,365,880,345,26,26,26,26,26,26,975', '839,381,415,652,669,415,204,421,387,354,824,415,660,441,404,6,532,535', '610,612,539,397,396,656,395,6,621,332,655,377,333,391,392,393,394,494', '275,288,289,337,352,957,593,376,326,530,328,342,840,343,841,666,731', '965,736,850,596,597,743,606,608,611,611,403,414,606,920,414,706,663', '663,833,975,414,873,872,874,950,947,540,1018,447,813,26,26,26,26,26', '26,26,338,693,389,996,26,26,26,887,407,407,888,440,480,823,488,825,277', '902,26,971,489,864,831,787,557,335,962,809,650,790,884,694,379,430,436', '382,1,723,384,385,673,784,1020,386,745,750,737,402,682,822,819,422,26', '26,969,549,,442,,,,26,,431,739,933,802,278,,277,277,827,298,514,517', '278,499,,277,26,,,,26,,114,734,521,26,,524,,675,531,,,,,,,678,279,,706', '963,706,504,871,,279,678,,503,26,313,,518,845,583,824,,1021,,,,502,847', '913,,26,26,313,510,,,,967,298,295,114,,506,298,295,891,262,512,824,', '26,,858,,,,,,,,,268,726,,,272,26,,577,578,678,,735,405,418,955,706,', '678,,579,797,627,557,487,557,774,,,666,632,779,490,924,925,127,598,', '132,753,,753,801,,,848,760,951,663,852,,,,620,430,436,130,,,,,,844,', ',557,557,,706,824,706,,853,854,,,,26,,16,,972,,973,16,651,440,496,,498', '1012,,500,501,277,,549,549,,222,637,,,,,,642,706,222,222,222,,16,304', '304,,,875,,,,638,521,810,,,,643,797,812,521,26,442,26,422,1000,,16,431', ',,26,222,222,,,222,349,359,359,,654,,440,,26,1024,670,277,916,6,,,440', ',,313,,,662,415,,638,,313,,,,,,415,415,770,772,,415,415,775,777,,16', ',,,,222,222,222,222,16,16,26,,684,26,431,,,,692,26,964,623,720,720,431', '557,,,,26,938,440,725,26,789,,277,440,,,738,414,,,,,277,,,,,414,414', '959,1028,,414,414,,875,,875,26,26,716,632,26,718,127,,788,132,26,26', '811,440,,26,26,,277,,,431,,999,757,,,130,632,431,521,765,16,222,412', '222,222,412,222,,,803,,412,222,222,664,816,335,855,667,,,,,,769,16,', '415,,859,,771,773,431,,,776,778,,,875,,313,,,407,,632,,,,,,313,664,', '632,335,,222,222,,,,,,,,222,826,,828,,,26,,,,,26,26,632,712,26,638,', '16,643,,414,16,,,26,304,16,127,882,,,38,886,418,,,38,,,,,26,304,846', ',816,,,1013,849,,16,,,,,678,,,,,,,,38,302,302,222,222,26,,,,,,,758,', '856,,,26,,,,664,335,222,,38,,,869,,860,,,,,347,363,363,363,222,,818', ',771,773,778,776,,26,,26,26,445,798,26,,799,,,879,26,,816,,720,,,915', ',,,883,919,,26,,808,,38,,,,,,,,907,38,38,,,26,,830,,,820,26,26,820,', ',,,909,910,,491,912,,222,,,313,,,,,,,,,313,,,860,,952,922,953,507,954', ',983,,988,,,,867,,,,,,937,,857,26,,17,945,946,,,17,,,339,339,,,339,974', '16,976,16,,,26,,313,304,38,222,26,,26,,,304,,,17,306,306,,,222,,,,26', ',868,,,,38,440,,632,981,,440,,,,17,277,,339,339,339,339,,,,351,360,360', ',,997,,1019,,,,998,,911,,,16,,1025,16,1026,,1027,,,222,,,,,,335,876', ',,222,,,431,16,,38,,17,,38,,1035,,302,38,968,17,17,867,,867,,867,644', ',,,,,,302,,412,222,,,16,,,38,,,412,412,,,,412,412,,419,420,,700,702', '704,,,,443,444,,,,,657,,,,661,820,,,868,,868,,868,,304,,,,,,671,,,,', '304,674,,867,,867,,867,,867,,,17,,413,,,413,,690,,,,413,,,,,,,,,867', ',,,876,17,,876,,876,,876,,,,,222,,,,,16,222,,,16,868,,868,,868,,868', ',,16,,,,,,,,,,,,,,,,,412,,,868,744,,,,,339,339,,,,17,,,,17,,,,306,17', '927,929,931,,16,595,876,,876,,876,,876,,,306,16,,38,,38,599,,,17,,302', ',,,,,,,302,876,,,,,,,,,,,,222,,16,16,,,16,,,,,,16,,,,,,,,804,,,,,,16', ',15,,,,,15,,,,,935,,,38,,16,38,835,39,941,,16,16,39,,,,1002,1004,1006', '1008,,1009,15,,,38,,,,,,,,,,,,,,,39,303,303,,,893,895,15,897,899,,900', ',,,,,978,38,,,16,,,,39,,,,1031,1032,1033,1034,,,348,364,364,364,,1036', ',16,,686,,,,16,,16,,,,,,,,,,15,302,,,,222,,,,15,15,,302,,,17,,17,39', ',,,,306,,,901,39,39,,,306,,,,,,,,,,,,,,,,,918,,,,,,,,,,,,,,,,,38,,,', '38,,,,,991,992,993,994,,38,,,,,,17,,,17,,,,,,,15,,15,,,15,,,,,,15,,17', ',,,,39,,749,,,,,15,,,,38,,,,,,,,,,,,38,413,39,,,17,1029,,,,,413,413', ',,,413,413,,,,,,,,,,,,,,,,38,38,,,38,,,,,,38,,15,,,306,15,,,339,,15', ',,38,339,306,,,,39,,,,39,,363,,303,39,,38,,,,939,15,38,38,,,,,,,303', ',,,,,,,,39,,,,,,,,,,,,,,,17,,,,17,,,,,,,,,,17,363,,,,38,,,,,,,,,,,,413', ',,,,,,,,38,,,,,,38,339,38,,,,13,,,,,13,,17,,,,,,,,,,,,17,,,,,,,,,,,', ',,13,,,,,,,,,,,,,,,,,,,17,17,,,17,,13,,,,17,,,,,,353,,,,,,,,17,,,,,', ',,,,,,360,,,,15,17,15,,,943,,17,17,,,,,,,,,,39,13,39,,,,,,303,,13,13', ',,,,303,,,,,,,,,,,,,,,,,,,,360,,,,17,,,,,,,,,,,,15,,,15,,,,,,17,,,,', ',17,,17,39,,,39,,15,,,,,,,,,,,,,,,,,,39,,,13,,410,,,410,,,15,,,410,15', ',,,,,15,15,,,,15,15,13,,,,,39,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,303,,,,,,,,,,,303,,13,,,,13,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,15,13', ',,15,,,,,,,,,,15,,,,39,,,,39,,,,,,,,,15,39,,,,,,,,,,,,,,,,,,,,,,,,,', ',15,,,,,,,,,,,,15,,,,,,39,,,,,,,,,,,,39,,,,,,,,,,,,,,,15,15,,,15,,,', ',,15,,,,,,,,39,39,,,39,,15,,,,39,,,,,,,,,,,,,15,39,,,,,15,15,,,,,,364', ',,,,39,,,,940,,39,39,,229,,,,,,13,,13,276,276,276,,,,,,,,,,,322,323', '324,,,,,,15,,,,,,,,,276,276,,,,364,,,,39,,,15,,,,,,15,,15,,,,,,,,,,39', ',,,,,39,13,39,,13,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '410,,,,13,,,,,,410,410,,,,410,410,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,276,417,,,423,276,,,,,423,,,,,,,,,,,,,229,,,454,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,13,,,,13,,276,276,,,,,,,13,276,,,,,,,276,,276,,', '276,276,,,410,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,526,,,,,13,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,13,13,,,13,,,,,,13,,,,,,,,,,,,,,13,,,,,,,,', ',,,,,,,,13,,276,,944,,13,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276', ',423,423,423,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,13,,,,,,13,,13,,,276,,276', ',276,,,,,,,,,,,,,,,,276,,,,,,,,,423,685,,,,,,,,,,276,,,276,,,,,,,,,', ',,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,276,276,,,,,,,,,,276,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,276,423,276,,,,766,,,276,276,423,423,,,,423,423', ',,,,,,,,,,,,,,,,,,,,,,,276,,,276,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,', ',,,,276,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,,', ',,,,423,,,,,,,,,,,,,423,423,423,423,,863,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,276,423,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276' ] racc_goto_table = arr = ::Array.new(3191, 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 = [ '33,31,20,43,141,58,89,29,43,31,8,70,10,76,98,39,39,22,22,95,51,59,59', '43,63,63,33,2,41,99,7,30,43,43,43,7,43,175,185,15,15,6,62,62,140,117', '71,71,71,35,35,35,92,92,4,77,93,77,66,38,29,43,53,39,67,67,43,43,170', '56,43,40,40,40,94,94,71,42,98,185,73,73,73,52,59,123,123,158,7,118,9', '47,74,74,48,11,181,119,67,67,67,132,128,135,17,17,134,116,17,130,73', '73,5,161,43,57,57,12,4,43,43,43,43,43,43,182,11,159,18,144,14,18,16', '26,159,19,176,18,144,26,23,7,72,72,162,162,72,25,2,44,7,7,64,69,75,87', '88,17,17,17,17,76,46,46,46,91,96,119,97,100,101,102,103,104,105,106', '107,185,108,109,110,111,112,113,114,163,163,163,163,20,20,163,115,20', '117,77,77,117,182,20,132,120,126,135,133,136,134,31,137,43,43,43,43', '43,43,43,138,139,5,119,43,43,43,142,71,71,143,59,145,129,147,129,35', '116,43,128,148,130,118,151,175,68,152,153,29,42,154,140,157,39,39,160', '1,95,164,165,53,30,119,166,167,168,169,9,53,174,178,65,43,43,179,170', ',65,,,,43,,74,8,132,30,71,,35,35,181,9,31,33,71,158,,35,43,,,,43,,98', '56,51,43,,31,,29,33,,,,,,,39,73,,117,11,117,7,129,,73,39,,6,43,67,,66', '30,31,176,,93,,,,4,30,94,,43,43,67,52,,,,99,9,47,98,,48,9,47,123,31', '48,176,,43,,30,,,,,,,,,74,29,,,74,43,,17,17,39,,29,68,68,117,117,,39', ',4,76,31,175,46,175,41,,,185,33,41,46,123,123,59,38,,63,163,,163,53', ',,8,29,129,77,8,,,,15,39,39,62,,,,,,92,,,175,175,,117,176,117,,140,140', ',,,43,,28,,129,,129,28,33,59,68,,68,10,,68,68,35,,170,170,,28,40,,,', ',,40,117,28,28,28,,28,28,28,,,175,,,,74,51,22,,,,74,76,72,51,43,65,43', '65,123,,28,74,,,43,28,28,,,28,28,28,28,,40,,59,,43,129,2,35,8,7,,,59', ',,67,,,73,18,,74,,67,,,,,,18,18,26,26,,18,18,26,26,,28,,,,,28,28,28', '28,28,28,43,,65,43,74,,,,73,43,95,68,98,98,74,175,,,,43,92,59,71,43', '89,,35,59,,,98,20,,,,,35,,,,,20,20,92,30,,20,20,,175,,175,43,43,9,33', '43,9,59,,141,63,43,43,70,59,,43,43,,35,,,74,,8,15,,,62,33,74,51,7,28', '28,28,28,28,28,28,,,51,,28,28,28,68,33,68,58,68,,,,,,73,28,,18,,26,', '65,65,74,,,65,65,,,175,,67,,,71,,33,,,,,,67,68,,33,68,,28,28,,,,,,,', '28,127,,127,,,43,,,,,43,43,33,68,43,74,,28,74,,20,28,,,43,28,28,59,70', ',,54,70,68,,,54,,,,,43,28,17,,33,,,29,17,,28,,,,,39,,,,,,,,54,54,54', '28,28,43,,,,,,,68,,9,,,43,,,,68,68,28,,54,,,127,,65,,,,,54,54,54,54', '28,,122,,65,65,65,65,,43,,43,43,49,68,43,,68,,,9,43,,33,,98,,,98,,,', '9,98,,43,,68,,54,,,,,,,,17,54,54,,,43,,68,,,124,43,43,124,,,,,9,9,,49', '9,,28,,,67,,,,,,,,,67,,,65,,127,9,127,49,127,,31,,33,,,,122,,,,,,9,', '68,43,,32,9,9,,,32,,,24,24,,,24,127,28,127,28,,,43,,67,28,54,28,43,', '43,,,28,,,32,32,32,,,28,,,,43,,124,,,,54,59,,33,9,,59,,,,32,35,,24,24', '24,24,,,,32,32,32,,,9,,127,,,,9,,68,,,28,,127,28,127,,127,,,28,,,,,', '68,177,,,28,,,74,28,,54,,32,,54,,127,,54,54,122,32,32,122,,122,,122', '49,,,,,,,54,,28,28,,,28,,,54,,,28,28,,,,28,28,,24,24,,173,173,173,,', ',24,24,,,,,49,,,,49,124,,,124,,124,,124,,28,,,,,,49,,,,,28,49,,122,', '122,,122,,122,,,32,,32,,,32,,49,,,,32,,,,,,,,,122,,,,177,32,,177,,177', ',177,,,,,28,,,,,28,28,,,28,124,,124,,124,,124,,,28,,,,,,,,,,,,,,,,,28', ',,124,49,,,,,24,24,,,,32,,,,32,,,,32,32,125,125,125,,28,24,177,,177', ',177,,177,,,32,28,,54,,54,24,,,32,,54,,,,,,,,54,177,,,,,,,,,,,,28,,28', '28,,,28,,,,,,28,,,,,,,,49,,,,,,28,,27,,,,,27,,,,,28,,,54,,28,54,49,55', '28,,28,28,55,,,,125,125,125,125,,125,27,,,54,,,,,,,,,,,,,,,55,55,55', ',,173,173,27,173,173,,173,,,,,,28,54,,,28,,,,55,,,,125,125,125,125,', ',55,55,55,55,,125,,28,,24,,,,28,,28,,,,,,,,,,27,54,,,,28,,,,27,27,,54', ',,32,,32,55,,,,,32,,,49,55,55,,,32,,,,,,,,,,,,,,,,,49,,,,,,,,,,,,,,', ',,54,,,,54,,,,,173,173,173,173,,54,,,,,,32,,,32,,,,,,,27,,27,,,27,,', ',,,27,,32,,,,,55,,32,,,,,27,,,,54,,,,,,,,,,,,54,32,55,,,32,173,,,,,32', '32,,,,32,32,,,,,,,,,,,,,,,,54,54,,,54,,,,,,54,,27,,,32,27,,,24,,27,', ',54,24,32,,,,55,,,,55,,54,,55,55,,54,,,,54,27,54,54,,,,,,,55,,,,,,,', ',55,,,,,,,,,,,,,,,32,,,,32,,,,,,,,,,32,54,,,,54,,,,,,,,,,,,32,,,,,,', ',,54,,,,,,54,24,54,,,,21,,,,,21,,32,,,,,,,,,,,,32,,,,,,,,,,,,,,21,,', ',,,,,,,,,,,,,,,,32,32,,,32,,21,,,,32,,,,,,21,,,,,,,,32,,,,,,,,,,,,32', ',,,27,32,27,,,32,,32,32,,,,,,,,,,55,21,55,,,,,,55,,21,21,,,,,55,,,,', ',,,,,,,,,,,,,,,32,,,,32,,,,,,,,,,,,27,,,27,,,,,,32,,,,,,32,,32,55,,', '55,,27,,,,,,,,,,,,,,,,,,55,,,21,,21,,,21,,,27,,,21,27,,,,,,27,27,,,', '27,27,21,,,,,55,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,55,,,,,,,', ',,,55,,21,,,,21,,,,,21,,,,,,,,,,,,,,,,,,,,,,,,27,21,,,27,,,,,,,,,,27', ',,,55,,,,55,,,,,,,,,27,55,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,,,,,,,,,,27', ',,,,,55,,,,,,,,,,,,55,,,,,,,,,,,,,,,27,27,,,27,,,,,,27,,,,,,,,55,55', ',,55,,27,,,,55,,,,,,,,,,,,,27,55,,,,,27,27,,,,,,55,,,,,55,,,,55,,55', '55,,34,,,,,,21,,21,34,34,34,,,,,,,,,,,34,34,34,,,,,,27,,,,,,,,,34,34', ',,,55,,,,55,,,27,,,,,,27,,27,,,,,,,,,,55,,,,,,55,21,55,,21,,,,,,,,,', ',,,,,,,,,,21,,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,21,,,,,,21,21,,,,21,21', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,34,,,34,34,,,,,34,,,,,', ',,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34', '34,34,34,34,34,34,34,21,,,,21,,34,34,,,,,,,21,34,,,,,,,34,,34,,,34,34', ',,21,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,34,,,,,21,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,21,21,,,21,,,,,,21,,,,,,,,,,,,,,21,,,,,,,,,,,,,,,,,21', ',34,,21,,21,21,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,34,34,34,,,', ',,,,21,,,,,,,,,,,,,,,,,,,,,21,,,,,,21,,21,,,34,,34,,34,,,,,,,,,,,,,', ',,34,,,,,,,,,34,34,,,,,,,,,,34,,,34,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,', ',,,,,,,,,,,,,,34,34,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,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(3191, 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, 252, 27, nil, 51, 107, 38, 30, -316, 57, -516, -592, -688, nil, -373, 31, 123, 41, -80, 67, -18, 1731, -190, -67, 888, 25, -78, 1320, 454, -205, -393, -15, 943, -19, 2208, 20, nil, nil, 35, -198, 45, -236, -411, 3, -335, nil, 133, 58, 61, 626, nil, -14, 48, -255, 760, 1338, -288, 46, -66, 13, nil, nil, 34, 16, -249, 56, 17, 30, 181, 94, -48, 17, -188, 51, 66, -327, -266, -438, nil, nil, nil, nil, nil, nil, nil, nil, nil, 84, 96, -55, nil, 103, -288, -660, -503, -326, 98, -193, 11, -568, 98, 113, -156, 114, 108, -545, 109, -546, -408, -734, -413, -557, -183, -192, -414, -663, -725, -513, -469, -737, -592, nil, 139, -458, 194, 376, -591, 28, -691, -470, -550, nil, -593, -685, -783, -786, -133, -485, 154, -323, -294, -18, -591, -589, -351, -31, nil, -39, -34, nil, nil, -414, -670, -445, -563, nil, nil, 171, 8, 45, 168, 29, -239, -196, 169, 169, 172, -343, -343, -332, -270, nil, nil, 554, -434, -301, -563, 250, -429, -653, nil, -605, -803, nil, nil, -457 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 346, 293, nil, 528, nil, 837, nil, 290, 291, nil, nil, nil, 11, 12, 18, 227, nil, nil, 14, nil, 411, 228, 321, nil, nil, 591, 226, 446, 21, 22, 23, 24, nil, 681, nil, nil, nil, 310, nil, 25, 425, 32, nil, nil, 34, 37, 36, nil, 223, 224, 358, nil, 129, 433, 128, 131, 75, 76, nil, 416, 90, 46, 282, nil, 806, 426, nil, 427, 438, 639, 492, 280, 266, 47, 48, 49, 50, 51, 52, 53, 54, 55, nil, 267, 61, nil, nil, nil, nil, nil, nil, nil, 574, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 708, 556, nil, 709, 970, 866, 544, nil, 545, nil, nil, 546, nil, 548, nil, 792, nil, nil, nil, 554, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 437, nil, nil, 659, 653, nil, nil, nil, nil, 74, 77, 78, nil, nil, nil, nil, nil, 601, nil, nil, nil, nil, nil, nil, 821, 742, 543, nil, 547, 829, 559, 561, 562, 877, 565, 566, 878, 569, 572, 285 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 146, :_reduce_none, 2, 147, :_reduce_2, 0, 148, :_reduce_3, 1, 148, :_reduce_4, 3, 148, :_reduce_5, 2, 148, :_reduce_6, 1, 150, :_reduce_none, 4, 150, :_reduce_8, 4, 153, :_reduce_9, 2, 154, :_reduce_10, 0, 158, :_reduce_11, 1, 158, :_reduce_12, 3, 158, :_reduce_13, 2, 158, :_reduce_14, 1, 159, :_reduce_none, 4, 159, :_reduce_16, 0, 170, :_reduce_17, 4, 152, :_reduce_18, 3, 152, :_reduce_19, 3, 152, :_reduce_20, 3, 152, :_reduce_21, 2, 152, :_reduce_22, 3, 152, :_reduce_23, 3, 152, :_reduce_24, 3, 152, :_reduce_25, 3, 152, :_reduce_26, 3, 152, :_reduce_27, 4, 152, :_reduce_28, 1, 152, :_reduce_none, 3, 152, :_reduce_30, 3, 152, :_reduce_31, 3, 152, :_reduce_32, 1, 152, :_reduce_none, 3, 163, :_reduce_34, 3, 163, :_reduce_35, 6, 163, :_reduce_36, 5, 163, :_reduce_37, 5, 163, :_reduce_38, 5, 163, :_reduce_39, 5, 163, :_reduce_40, 3, 163, :_reduce_41, 1, 171, :_reduce_none, 3, 171, :_reduce_43, 1, 171, :_reduce_none, 1, 169, :_reduce_none, 3, 169, :_reduce_46, 3, 169, :_reduce_47, 3, 169, :_reduce_48, 2, 169, :_reduce_49, 1, 169, :_reduce_none, 1, 162, :_reduce_none, 1, 165, :_reduce_none, 1, 165, :_reduce_none, 1, 181, :_reduce_none, 4, 181, :_reduce_55, 0, 189, :_reduce_56, 4, 186, :_reduce_57, 1, 188, :_reduce_none, 2, 180, :_reduce_59, 3, 180, :_reduce_60, 4, 180, :_reduce_61, 5, 180, :_reduce_62, 4, 180, :_reduce_63, 5, 180, :_reduce_64, 2, 180, :_reduce_65, 2, 180, :_reduce_66, 2, 180, :_reduce_67, 2, 180, :_reduce_68, 2, 180, :_reduce_69, 1, 164, :_reduce_70, 3, 164, :_reduce_71, 1, 193, :_reduce_72, 3, 193, :_reduce_73, 1, 192, :_reduce_none, 2, 192, :_reduce_75, 3, 192, :_reduce_76, 5, 192, :_reduce_77, 2, 192, :_reduce_78, 4, 192, :_reduce_79, 2, 192, :_reduce_80, 4, 192, :_reduce_81, 1, 192, :_reduce_82, 3, 192, :_reduce_83, 1, 196, :_reduce_none, 3, 196, :_reduce_85, 2, 195, :_reduce_86, 3, 195, :_reduce_87, 1, 198, :_reduce_88, 3, 198, :_reduce_89, 1, 197, :_reduce_90, 1, 197, :_reduce_91, 4, 197, :_reduce_92, 3, 197, :_reduce_93, 3, 197, :_reduce_94, 3, 197, :_reduce_95, 3, 197, :_reduce_96, 2, 197, :_reduce_97, 1, 197, :_reduce_98, 1, 166, :_reduce_99, 1, 166, :_reduce_100, 4, 166, :_reduce_101, 3, 166, :_reduce_102, 3, 166, :_reduce_103, 3, 166, :_reduce_104, 3, 166, :_reduce_105, 2, 166, :_reduce_106, 1, 166, :_reduce_107, 1, 201, :_reduce_108, 1, 201, :_reduce_none, 2, 202, :_reduce_110, 1, 202, :_reduce_111, 3, 202, :_reduce_112, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 206, :_reduce_118, 1, 206, :_reduce_none, 1, 160, :_reduce_none, 1, 160, :_reduce_none, 1, 161, :_reduce_122, 0, 209, :_reduce_123, 4, 161, :_reduce_124, 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, 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, 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, 3, 179, :_reduce_196, 3, 179, :_reduce_197, 6, 179, :_reduce_198, 5, 179, :_reduce_199, 5, 179, :_reduce_200, 5, 179, :_reduce_201, 5, 179, :_reduce_202, 4, 179, :_reduce_203, 3, 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, 4, 179, :_reduce_213, 2, 179, :_reduce_214, 2, 179, :_reduce_215, 3, 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, 2, 179, :_reduce_229, 2, 179, :_reduce_230, 3, 179, :_reduce_231, 3, 179, :_reduce_232, 3, 179, :_reduce_233, 3, 179, :_reduce_234, 3, 179, :_reduce_235, 6, 179, :_reduce_236, 1, 179, :_reduce_none, 1, 213, :_reduce_none, 1, 214, :_reduce_none, 2, 214, :_reduce_none, 4, 214, :_reduce_241, 2, 214, :_reduce_242, 1, 210, :_reduce_none, 3, 210, :_reduce_244, 3, 219, :_reduce_245, 0, 220, :_reduce_246, 1, 220, :_reduce_none, 0, 174, :_reduce_248, 1, 174, :_reduce_none, 2, 174, :_reduce_none, 4, 174, :_reduce_251, 2, 174, :_reduce_252, 1, 191, :_reduce_253, 2, 191, :_reduce_254, 2, 191, :_reduce_255, 4, 191, :_reduce_256, 1, 191, :_reduce_257, 0, 223, :_reduce_258, 2, 185, :_reduce_259, 2, 222, :_reduce_260, 2, 221, :_reduce_261, 0, 221, :_reduce_262, 1, 216, :_reduce_263, 2, 216, :_reduce_264, 3, 216, :_reduce_265, 4, 216, :_reduce_266, 1, 168, :_reduce_267, 1, 168, :_reduce_none, 3, 167, :_reduce_269, 4, 167, :_reduce_270, 2, 167, :_reduce_271, 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_282, 0, 246, :_reduce_283, 4, 212, :_reduce_284, 0, 247, :_reduce_285, 4, 212, :_reduce_286, 0, 248, :_reduce_287, 4, 212, :_reduce_288, 3, 212, :_reduce_289, 3, 212, :_reduce_290, 2, 212, :_reduce_291, 3, 212, :_reduce_292, 3, 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, 6, 212, :_reduce_319, 0, 256, :_reduce_320, 7, 212, :_reduce_321, 0, 257, :_reduce_322, 5, 212, :_reduce_323, 0, 258, :_reduce_324, 6, 212, :_reduce_325, 0, 259, :_reduce_326, 0, 260, :_reduce_327, 9, 212, :_reduce_328, 1, 212, :_reduce_329, 1, 212, :_reduce_330, 1, 212, :_reduce_331, 1, 212, :_reduce_332, 1, 173, :_reduce_none, 1, 237, :_reduce_none, 1, 237, :_reduce_none, 2, 237, :_reduce_336, 1, 239, :_reduce_none, 1, 239, :_reduce_none, 1, 238, :_reduce_none, 5, 238, :_reduce_340, 1, 156, :_reduce_none, 2, 156, :_reduce_342, 1, 241, :_reduce_none, 1, 241, :_reduce_none, 1, 261, :_reduce_345, 3, 261, :_reduce_346, 1, 264, :_reduce_347, 3, 264, :_reduce_348, 1, 263, :_reduce_none, 4, 263, :_reduce_350, 6, 263, :_reduce_351, 3, 263, :_reduce_352, 5, 263, :_reduce_353, 2, 263, :_reduce_354, 4, 263, :_reduce_355, 1, 263, :_reduce_356, 3, 263, :_reduce_357, 4, 265, :_reduce_358, 2, 265, :_reduce_359, 2, 265, :_reduce_360, 1, 265, :_reduce_361, 2, 270, :_reduce_362, 0, 270, :_reduce_363, 6, 271, :_reduce_364, 8, 271, :_reduce_365, 4, 271, :_reduce_366, 6, 271, :_reduce_367, 4, 271, :_reduce_368, 2, 271, :_reduce_none, 6, 271, :_reduce_370, 2, 271, :_reduce_371, 4, 271, :_reduce_372, 6, 271, :_reduce_373, 2, 271, :_reduce_374, 4, 271, :_reduce_375, 2, 271, :_reduce_376, 4, 271, :_reduce_377, 1, 271, :_reduce_none, 0, 275, :_reduce_379, 1, 275, :_reduce_380, 3, 276, :_reduce_381, 1, 276, :_reduce_382, 4, 276, :_reduce_383, 1, 277, :_reduce_384, 4, 277, :_reduce_385, 1, 278, :_reduce_386, 3, 278, :_reduce_387, 1, 279, :_reduce_388, 1, 279, :_reduce_none, 0, 283, :_reduce_390, 0, 284, :_reduce_391, 4, 236, :_reduce_392, 4, 281, :_reduce_393, 1, 281, :_reduce_394, 0, 287, :_reduce_395, 4, 282, :_reduce_396, 0, 288, :_reduce_397, 4, 282, :_reduce_398, 0, 290, :_reduce_399, 4, 286, :_reduce_400, 2, 182, :_reduce_401, 4, 182, :_reduce_402, 5, 182, :_reduce_403, 5, 182, :_reduce_404, 2, 235, :_reduce_405, 4, 235, :_reduce_406, 4, 235, :_reduce_407, 3, 235, :_reduce_408, 3, 235, :_reduce_409, 3, 235, :_reduce_410, 2, 235, :_reduce_411, 1, 235, :_reduce_412, 4, 235, :_reduce_413, 0, 292, :_reduce_414, 4, 234, :_reduce_415, 0, 293, :_reduce_416, 4, 234, :_reduce_417, 0, 294, :_reduce_418, 3, 187, :_reduce_419, 0, 295, :_reduce_420, 0, 296, :_reduce_421, 4, 289, :_reduce_422, 5, 240, :_reduce_423, 1, 297, :_reduce_424, 1, 297, :_reduce_none, 6, 155, :_reduce_426, 0, 155, :_reduce_427, 1, 298, :_reduce_428, 1, 298, :_reduce_none, 1, 298, :_reduce_none, 2, 299, :_reduce_431, 1, 299, :_reduce_none, 2, 157, :_reduce_433, 1, 157, :_reduce_none, 1, 224, :_reduce_none, 1, 224, :_reduce_none, 1, 224, :_reduce_none, 1, 225, :_reduce_438, 1, 301, :_reduce_439, 2, 301, :_reduce_440, 3, 302, :_reduce_441, 1, 302, :_reduce_442, 1, 302, :_reduce_443, 3, 226, :_reduce_444, 4, 227, :_reduce_445, 3, 228, :_reduce_446, 0, 306, :_reduce_447, 3, 306, :_reduce_448, 1, 307, :_reduce_449, 2, 307, :_reduce_450, 3, 230, :_reduce_451, 0, 309, :_reduce_452, 3, 309, :_reduce_453, 3, 229, :_reduce_454, 3, 231, :_reduce_455, 0, 310, :_reduce_456, 3, 310, :_reduce_457, 0, 311, :_reduce_458, 3, 311, :_reduce_459, 0, 303, :_reduce_460, 2, 303, :_reduce_461, 0, 304, :_reduce_462, 2, 304, :_reduce_463, 0, 305, :_reduce_464, 2, 305, :_reduce_465, 1, 308, :_reduce_466, 2, 308, :_reduce_467, 0, 313, :_reduce_468, 4, 308, :_reduce_469, 1, 312, :_reduce_470, 1, 312, :_reduce_471, 1, 312, :_reduce_472, 1, 312, :_reduce_none, 1, 207, :_reduce_474, 3, 208, :_reduce_475, 1, 300, :_reduce_476, 2, 300, :_reduce_477, 1, 211, :_reduce_478, 1, 211, :_reduce_479, 1, 211, :_reduce_480, 1, 211, :_reduce_481, 1, 199, :_reduce_482, 1, 199, :_reduce_483, 1, 199, :_reduce_484, 1, 199, :_reduce_485, 1, 199, :_reduce_486, 1, 200, :_reduce_487, 1, 200, :_reduce_488, 1, 200, :_reduce_489, 1, 200, :_reduce_490, 1, 200, :_reduce_491, 1, 200, :_reduce_492, 1, 200, :_reduce_493, 1, 232, :_reduce_494, 1, 232, :_reduce_495, 1, 172, :_reduce_496, 1, 172, :_reduce_497, 1, 177, :_reduce_498, 1, 177, :_reduce_499, 0, 314, :_reduce_500, 4, 242, :_reduce_501, 0, 242, :_reduce_502, 3, 244, :_reduce_503, 0, 316, :_reduce_504, 3, 244, :_reduce_505, 4, 315, :_reduce_506, 2, 315, :_reduce_507, 2, 315, :_reduce_508, 1, 315, :_reduce_509, 2, 318, :_reduce_510, 0, 318, :_reduce_511, 6, 285, :_reduce_512, 8, 285, :_reduce_513, 4, 285, :_reduce_514, 6, 285, :_reduce_515, 4, 285, :_reduce_516, 6, 285, :_reduce_517, 2, 285, :_reduce_518, 4, 285, :_reduce_519, 6, 285, :_reduce_520, 2, 285, :_reduce_521, 4, 285, :_reduce_522, 2, 285, :_reduce_523, 4, 285, :_reduce_524, 1, 285, :_reduce_525, 0, 285, :_reduce_526, 1, 280, :_reduce_527, 1, 280, :_reduce_528, 1, 280, :_reduce_529, 1, 280, :_reduce_530, 1, 262, :_reduce_none, 1, 262, :_reduce_532, 1, 320, :_reduce_533, 1, 321, :_reduce_534, 3, 321, :_reduce_535, 1, 272, :_reduce_536, 3, 272, :_reduce_537, 1, 322, :_reduce_538, 2, 323, :_reduce_539, 1, 323, :_reduce_540, 2, 324, :_reduce_541, 1, 324, :_reduce_542, 1, 266, :_reduce_543, 3, 266, :_reduce_544, 1, 317, :_reduce_545, 3, 317, :_reduce_546, 1, 325, :_reduce_none, 1, 325, :_reduce_none, 2, 267, :_reduce_549, 1, 267, :_reduce_550, 3, 326, :_reduce_551, 3, 327, :_reduce_552, 1, 273, :_reduce_553, 3, 273, :_reduce_554, 1, 319, :_reduce_555, 3, 319, :_reduce_556, 1, 328, :_reduce_none, 1, 328, :_reduce_none, 2, 274, :_reduce_559, 1, 274, :_reduce_560, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 2, 269, :_reduce_563, 2, 268, :_reduce_564, 0, 268, :_reduce_565, 1, 245, :_reduce_none, 3, 245, :_reduce_567, 0, 233, :_reduce_568, 2, 233, :_reduce_none, 1, 218, :_reduce_570, 3, 218, :_reduce_571, 3, 330, :_reduce_572, 2, 330, :_reduce_573, 4, 330, :_reduce_574, 2, 330, :_reduce_575, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 291, :_reduce_none, 1, 291, :_reduce_none, 1, 291, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 176, :_reduce_588, 1, 176, :_reduce_589, 0, 149, :_reduce_none, 1, 149, :_reduce_none, 0, 178, :_reduce_none, 1, 178, :_reduce_none, 2, 194, :_reduce_594, 2, 175, :_reduce_595, 0, 217, :_reduce_none, 1, 217, :_reduce_none, 1, 217, :_reduce_none, 1, 243, :_reduce_599, 1, 243, :_reduce_none, 1, 151, :_reduce_none, 2, 151, :_reduce_none, 0, 215, :_reduce_603 ] racc_reduce_n = 604 racc_shift_n = 1037 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tDSTAR => 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, :tREGEXP_OPT => 119, :tWORDS_BEG => 120, :tQWORDS_BEG => 121, :tSYMBOLS_BEG => 122, :tQSYMBOLS_BEG => 123, :tSTRING_DBEG => 124, :tSTRING_DVAR => 125, :tSTRING_END => 126, :tSTRING_DEND => 127, :tSTRING => 128, :tSYMBOL => 129, :tNL => 130, :tEH => 131, :tCOLON => 132, :tCOMMA => 133, :tSPACE => 134, :tSEMI => 135, :tLAMBDA => 136, :tLAMBEG => 137, :tCHARACTER => 138, :tRATIONAL => 139, :tIMAGINARY => 140, :tLABEL_END => 141, :tANDDOT => 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tDSTAR", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING_DEND", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tANDDOT", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "lhs", "mrhs", "mrhs_arg", "expr", "@1", "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "brace_body", "fcall", "@2", "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", "@3", "arg_rhs", "simple_numeric", "primary", "arg_value", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@4", "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", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "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", "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@20", "@21", "f_args", "do_block", "@22", "@23", "do_body", "@24", "operation3", "@25", "@26", "@27", "@28", "@29", "cases", "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", "@30", "@31", "args_tail", "@32", "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", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_9(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_10(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_11(val, _values, result) result = [] result end def _reduce_12(val, _values, result) result = [ val[0] ] result end def _reduce_13(val, _values, result) result = val[0] << val[2] result end def _reduce_14(val, _values, result) result = [ val[1] ] result end # reduce 15 omitted def _reduce_16(val, _values, result) diagnostic :error, :begin_in_method, nil, val[0] result end def _reduce_17(val, _values, result) @lexer.state = :expr_fname result end def _reduce_18(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_19(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_20(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_21(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_22(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_23(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_25(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_26(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_27(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_28(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 29 omitted def _reduce_30(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_31(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_32(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end # reduce 33 omitted def _reduce_34(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_35(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_36(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_37(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_38(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_39(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_40(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_41(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end # reduce 42 omitted def _reduce_43(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end # reduce 44 omitted # reduce 45 omitted def _reduce_46(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_47(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_48(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_49(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted # reduce 53 omitted # reduce 54 omitted def _reduce_55(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_56(val, _values, result) @context.push(:block) result end def _reduce_57(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end # reduce 58 omitted def _reduce_59(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_60(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_61(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_62(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_63(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_64(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_65(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_66(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_67(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_68(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_69(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_70(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_71(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_72(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_73(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 74 omitted def _reduce_75(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_76(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_77(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_78(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_79(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_80(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_81(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_82(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_83(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 84 omitted def _reduce_85(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_86(val, _values, result) result = [ val[0] ] result end def _reduce_87(val, _values, result) result = val[0] << val[1] result end def _reduce_88(val, _values, result) result = [ val[0] ] result end def _reduce_89(val, _values, result) result = val[0] << val[2] result end def _reduce_90(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_91(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_92(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_93(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_94(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_95(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_96(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_97(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_98(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_99(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_100(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_101(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_102(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_103(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_104(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_105(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_106(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_107(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_108(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 109 omitted def _reduce_110(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_111(val, _values, result) result = @builder.const(val[0]) result end def _reduce_112(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 113 omitted # reduce 114 omitted # reduce 115 omitted # reduce 116 omitted # reduce 117 omitted def _reduce_118(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 119 omitted # reduce 120 omitted # reduce 121 omitted def _reduce_122(val, _values, result) result = [ val[0] ] result end def _reduce_123(val, _values, result) @lexer.state = :expr_fname result end def _reduce_124(val, _values, result) result = 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 def _reduce_196(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_197(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_198(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_199(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_200(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_201(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_202(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_203(val, _values, result) const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) result end def _reduce_204(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_205(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_207(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) result end def _reduce_214(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_215(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_218(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_225(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_229(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_230(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_231(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_232(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_233(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_235(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_236(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 237 omitted # reduce 238 omitted # reduce 239 omitted # reduce 240 omitted def _reduce_241(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_242(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end # reduce 243 omitted def _reduce_244(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_245(val, _values, result) result = val result end def _reduce_246(val, _values, result) result = [ nil, [], nil ] result end # reduce 247 omitted def _reduce_248(val, _values, result) result = [] result end # reduce 249 omitted # reduce 250 omitted def _reduce_251(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_252(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_253(val, _values, result) result = [ val[0] ] result end def _reduce_254(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_255(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_256(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_257(val, _values, result) result = [ val[0] ] result end def _reduce_258(val, _values, result) # When branch gets invoked by RACC's lookahead # and command args start with '[' or '(' # we need to put `true` to the cmdarg stack # **before** `false` pushed by lexer # m [], n # ^ # Right here we have cmdarg [...0] because # lexer pushed it on '[' # We need to modify cmdarg stack to [...10] # # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack # and later lexer pushes corresponding bits on top of it. last_token = @last_token[0] lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.push(true) @lexer.cmdarg.push(top) else @lexer.cmdarg.push(true) end result end def _reduce_259(val, _values, result) # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) # but the push must be done after cmdarg.pop() in the parser. # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, # cmdarg.pop() to pop 1 pushed by command_args, # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. last_token = @last_token[0] lookahead = last_token == :tLBRACE_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.pop @lexer.cmdarg.push(top) else @lexer.cmdarg.pop end result = val[1] result end def _reduce_260(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_261(val, _values, result) result = [ val[1] ] result end def _reduce_262(val, _values, result) result = [] result end def _reduce_263(val, _values, result) result = [ val[0] ] result end def _reduce_264(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_265(val, _values, result) result = val[0] << val[2] result end def _reduce_266(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_267(val, _values, result) result = @builder.array(nil, val[0], nil) result end # reduce 268 omitted def _reduce_269(val, _values, result) result = val[0] << val[2] result end def _reduce_270(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_271(val, _values, result) result = [ @builder.splat(val[0], 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 = @builder.call_method(nil, nil, val[0]) result end def _reduce_283(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_284(val, _values, result) @lexer.cmdarg.pop result = @builder.begin_keyword(val[0], val[2], val[3]) result end def _reduce_285(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_286(val, _values, result) result = @builder.begin(val[0], val[1], val[3]) result end def _reduce_287(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_288(val, _values, result) result = @builder.begin(val[0], nil, val[3]) result end def _reduce_289(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_290(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_291(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_292(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_293(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_294(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_295(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_296(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_297(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_298(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_299(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_300(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_301(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 302 omitted def _reduce_303(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_304(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_305(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_306(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) 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 = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) 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 = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_313(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_314(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) 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 = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_318(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @context.push(:class) result end def _reduce_319(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.cmdarg.pop @static_env.unextend @context.pop result end def _reduce_320(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @context.push(:sclass) result end def _reduce_321(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.cmdarg.pop @static_env.unextend @context.pop result end def _reduce_322(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) result end def _reduce_323(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.cmdarg.pop @static_env.unextend result end def _reduce_324(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @context.push(:def) result end def _reduce_325(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.cmdarg.pop @static_env.unextend @context.pop result end def _reduce_326(val, _values, result) @lexer.state = :expr_fname result end def _reduce_327(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @context.push(:defs) result end def _reduce_328(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.cmdarg.pop @static_env.unextend @context.pop result end def _reduce_329(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_330(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_331(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_332(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 333 omitted # reduce 334 omitted # reduce 335 omitted def _reduce_336(val, _values, result) result = val[1] result end # reduce 337 omitted # reduce 338 omitted # reduce 339 omitted def _reduce_340(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 341 omitted def _reduce_342(val, _values, result) result = val result end # reduce 343 omitted # reduce 344 omitted def _reduce_345(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_346(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_347(val, _values, result) result = [ val[0] ] result end def _reduce_348(val, _values, result) result = val[0] << val[2] result end # reduce 349 omitted def _reduce_350(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])) result end def _reduce_351(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) result end def _reduce_352(val, _values, result) result = val[0]. push(@builder.restarg(val[2])) result end def _reduce_353(val, _values, result) result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) result end def _reduce_354(val, _values, result) result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_355(val, _values, result) result = [ @builder.restarg(val[0], val[1]), *val[3] ] result end def _reduce_356(val, _values, result) result = [ @builder.restarg(val[0]) ] result end def _reduce_357(val, _values, result) result = [ @builder.restarg(val[0]), *val[2] ] result end def _reduce_358(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_359(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_360(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_361(val, _values, result) result = [ val[0] ] result end def _reduce_362(val, _values, result) result = val[1] result end def _reduce_363(val, _values, result) result = [] result end def _reduce_364(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_365(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_366(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_367(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_368(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 369 omitted def _reduce_370(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_371(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_372(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_373(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_374(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_375(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_376(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_377(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 378 omitted def _reduce_379(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_380(val, _values, result) @lexer.state = :expr_value result end def _reduce_381(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_382(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_383(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_384(val, _values, result) result = [] result end def _reduce_385(val, _values, result) result = val[2] result end def _reduce_386(val, _values, result) result = [ val[0] ] result end def _reduce_387(val, _values, result) result = val[0] << val[2] result end def _reduce_388(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 389 omitted def _reduce_390(val, _values, result) @static_env.extend_dynamic result end def _reduce_391(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_392(val, _values, result) @lexer.cmdarg.pop result = [ val[1], val[3] ] @static_env.unextend result end def _reduce_393(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_394(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_395(val, _values, result) @context.push(:lambda) result end def _reduce_396(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_397(val, _values, result) @context.push(:lambda) result end def _reduce_398(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_399(val, _values, result) @context.push(:block) result end def _reduce_400(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_401(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_402(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_403(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_404(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_405(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_406(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_407(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_408(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_409(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_410(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_411(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_412(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_413(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_414(val, _values, result) @context.push(:block) result end def _reduce_415(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_416(val, _values, result) @context.push(:block) result end def _reduce_417(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_418(val, _values, result) @static_env.extend_dynamic result end def _reduce_419(val, _values, result) result = [ val[1], val[2] ] @static_env.unextend result end def _reduce_420(val, _values, result) @static_env.extend_dynamic result end def _reduce_421(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_422(val, _values, result) result = [ val[2], val[3] ] @static_env.unextend @lexer.cmdarg.pop result end def _reduce_423(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_424(val, _values, result) result = [ val[0] ] result end # reduce 425 omitted def _reduce_426(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_427(val, _values, result) result = [] result end def _reduce_428(val, _values, result) result = [ val[0] ] result end # reduce 429 omitted # reduce 430 omitted def _reduce_431(val, _values, result) result = [ val[0], val[1] ] result end # reduce 432 omitted def _reduce_433(val, _values, result) result = [ val[0], val[1] ] result end # reduce 434 omitted # reduce 435 omitted # reduce 436 omitted # reduce 437 omitted def _reduce_438(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_439(val, _values, result) result = [ val[0] ] result end def _reduce_440(val, _values, result) result = val[0] << val[1] result end def _reduce_441(val, _values, result) string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_442(val, _values, result) string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_443(val, _values, result) result = @builder.character(val[0]) result end def _reduce_444(val, _values, result) string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_445(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_446(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_447(val, _values, result) result = [] result end def _reduce_448(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_449(val, _values, result) result = [ val[0] ] result end def _reduce_450(val, _values, result) result = val[0] << val[1] result end def _reduce_451(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_452(val, _values, result) result = [] result end def _reduce_453(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_454(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_455(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_456(val, _values, result) result = [] result end def _reduce_457(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_458(val, _values, result) result = [] result end def _reduce_459(val, _values, result) result = val[0] << @builder.symbol_internal(val[1]) result end def _reduce_460(val, _values, result) result = [] result end def _reduce_461(val, _values, result) result = val[0] << val[1] result end def _reduce_462(val, _values, result) result = [] result end def _reduce_463(val, _values, result) result = val[0] << val[1] result end def _reduce_464(val, _values, result) result = [] result end def _reduce_465(val, _values, result) result = val[0] << val[1] result end def _reduce_466(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_467(val, _values, result) result = val[1] result end def _reduce_468(val, _values, result) @lexer.cmdarg.push(false) @lexer.cond.push(false) result end def _reduce_469(val, _values, result) @lexer.cmdarg.pop @lexer.cond.pop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_470(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_471(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_472(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 473 omitted def _reduce_474(val, _values, result) @lexer.state = :expr_end result = @builder.symbol(val[0]) result end def _reduce_475(val, _values, result) @lexer.state = :expr_end result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_476(val, _values, result) result = val[0] result end def _reduce_477(val, _values, result) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end result end def _reduce_478(val, _values, result) @lexer.state = :expr_end result = @builder.integer(val[0]) result end def _reduce_479(val, _values, result) @lexer.state = :expr_end result = @builder.float(val[0]) result end def _reduce_480(val, _values, result) @lexer.state = :expr_end result = @builder.rational(val[0]) result end def _reduce_481(val, _values, result) @lexer.state = :expr_end result = @builder.complex(val[0]) result end def _reduce_482(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_483(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_484(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_485(val, _values, result) result = @builder.const(val[0]) result end def _reduce_486(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_487(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_488(val, _values, result) result = @builder.self(val[0]) result end def _reduce_489(val, _values, result) result = @builder.true(val[0]) result end def _reduce_490(val, _values, result) result = @builder.false(val[0]) result end def _reduce_491(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_492(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_493(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_494(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_495(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_496(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_497(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_498(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_499(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_500(val, _values, result) @lexer.state = :expr_value result end def _reduce_501(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_502(val, _values, result) result = nil result end def _reduce_503(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_504(val, _values, result) result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_505(val, _values, result) @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) result end def _reduce_506(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_507(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_508(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_509(val, _values, result) result = [ val[0] ] result end def _reduce_510(val, _values, result) result = val[1] result end def _reduce_511(val, _values, result) result = [] result end def _reduce_512(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_513(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_514(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_515(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_516(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_517(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_518(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_519(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_520(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_521(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_522(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_523(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_524(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_525(val, _values, result) result = val[0] result end def _reduce_526(val, _values, result) result = [] result end def _reduce_527(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_528(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_529(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_530(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 531 omitted def _reduce_532(val, _values, result) @static_env.declare val[0][0] result = val[0] result end def _reduce_533(val, _values, result) result = val[0] result end def _reduce_534(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_535(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_536(val, _values, result) result = [ val[0] ] result end def _reduce_537(val, _values, result) result = val[0] << val[2] result end def _reduce_538(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] result end def _reduce_539(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_540(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_541(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_542(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_543(val, _values, result) result = [ val[0] ] result end def _reduce_544(val, _values, result) result = val[0] << val[2] result end def _reduce_545(val, _values, result) result = [ val[0] ] result end def _reduce_546(val, _values, result) result = val[0] << val[2] result end # reduce 547 omitted # reduce 548 omitted def _reduce_549(val, _values, result) @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] result end def _reduce_550(val, _values, result) result = [ @builder.kwrestarg(val[0]) ] result end def _reduce_551(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_552(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_553(val, _values, result) result = [ val[0] ] result end def _reduce_554(val, _values, result) result = val[0] << val[2] result end def _reduce_555(val, _values, result) result = [ val[0] ] result end def _reduce_556(val, _values, result) result = val[0] << val[2] result end # reduce 557 omitted # reduce 558 omitted def _reduce_559(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_560(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 561 omitted # reduce 562 omitted def _reduce_563(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_564(val, _values, result) result = [ val[1] ] result end def _reduce_565(val, _values, result) result = [] result end # reduce 566 omitted def _reduce_567(val, _values, result) result = val[1] result end def _reduce_568(val, _values, result) result = [] result end # reduce 569 omitted def _reduce_570(val, _values, result) result = [ val[0] ] result end def _reduce_571(val, _values, result) result = val[0] << val[2] result end def _reduce_572(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_573(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end def _reduce_574(val, _values, result) result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) result end def _reduce_575(val, _values, result) result = @builder.kwsplat(val[0], val[1]) result end # reduce 576 omitted # reduce 577 omitted # reduce 578 omitted # reduce 579 omitted # reduce 580 omitted # reduce 581 omitted # reduce 582 omitted # reduce 583 omitted # reduce 584 omitted # reduce 585 omitted # reduce 586 omitted # reduce 587 omitted def _reduce_588(val, _values, result) result = [:dot, val[0][1]] result end def _reduce_589(val, _values, result) result = [:anddot, val[0][1]] result end # reduce 590 omitted # reduce 591 omitted # reduce 592 omitted # reduce 593 omitted def _reduce_594(val, _values, result) result = val[1] result end def _reduce_595(val, _values, result) result = val[1] result end # reduce 596 omitted # reduce 597 omitted # reduce 598 omitted def _reduce_599(val, _values, result) yyerrok result end # reduce 600 omitted # reduce 601 omitted # reduce 602 omitted def _reduce_603(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby24 end # module Parser parser-2.7.0.2/lib/parser/rewriter.rb0000644000004100000410000000501213617025313017435 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # {Parser::Rewriter} is deprecated. Use {Parser::TreeRewriter} instead. # It has a backwards compatible API and uses {Parser::Source::TreeRewriter} # instead of {Parser::Source::Rewriter}. # Please check the documentation for {Parser::Source::Rewriter} for details. # # @api public # @deprecated Use {Parser::TreeRewriter} # class Rewriter < Parser::AST::Processor ## # Rewrites the AST/source buffer and returns a String containing the new # version. # # @param [Parser::Source::Buffer] source_buffer # @param [Parser::AST::Node] ast # @return [String] # def rewrite(source_buffer, ast) @source_rewriter = Source::Rewriter.new(source_buffer) process(ast) @source_rewriter.process end ## # Returns `true` if the specified node is an assignment node, returns false # otherwise. # # @param [Parser::AST::Node] node # @return [Boolean] # def assignment?(node) [:lvasgn, :ivasgn, :gvasgn, :cvasgn, :casgn].include?(node.type) end ## # Removes the source range. # # @param [Parser::Source::Range] range # def remove(range) @source_rewriter.remove(range) end ## # Wraps the given source range with the given values. # # @param [Parser::Source::Range] range # @param [String] content # def wrap(range, before, after) @source_rewriter.wrap(range, before, after) end ## # Inserts new code before the given source range. # # @param [Parser::Source::Range] range # @param [String] content # def insert_before(range, content) @source_rewriter.insert_before(range, content) end ## # Inserts new code after the given source range. # # @param [Parser::Source::Range] range # @param [String] content # def insert_after(range, content) @source_rewriter.insert_after(range, content) end ## # Replaces the code of the source range `range` with `content`. # # @param [Parser::Source::Range] range # @param [String] content # def replace(range, content) @source_rewriter.replace(range, content) end DEPRECATION_WARNING = [ 'Parser::Rewriter is deprecated.', 'Please update your code to use Parser::TreeRewriter instead' ].join("\n").freeze extend Deprecation def initialize(*) self.class.warn_of_deprecation Source::Rewriter.warned_of_deprecation = true super end end end parser-2.7.0.2/lib/parser/ruby18.rb0000644000004100000410000067171713617025313016751 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby18 < Parser::Base def version 18 end def default_encoding Encoding::BINARY end ##### State transition tables begin ### clist = [ '-277,195,196,195,196,489,-87,-277,-277,-277,511,542,578,-277,-277,-85', '-277,-61,72,579,531,558,489,489,521,-80,73,-425,-84,502,-426,734,606', '503,-425,-277,-277,-426,-277,-277,-277,-277,-277,489,489,568,690,-82', '-83,-81,-86,-427,691,535,-76,557,-69,-84,-427,195,196,291,-74,-277,-277', '-277,-277,-277,-277,-277,-277,-277,-277,-277,-277,-277,-277,-477,259', '-277,-277,-277,530,549,523,522,526,-277,536,99,-277,291,-82,621,98,-277', '538,-277,-84,-277,-277,-277,-277,-277,-277,-277,-480,-277,-79,-277,-476', '722,510,-480,-480,-480,99,-77,488,-480,-480,98,-480,-277,-277,-74,-77', '-72,-277,-85,-76,-480,99,99,99,488,488,98,98,98,621,-480,-480,-74,-480', '-480,-480,-480,-480,-74,-75,-73,-78,395,99,99,488,488,621,98,98,258', '259,495,-74,496,558,-74,-76,-480,-480,-480,-480,-480,-480,-480,-480', '-480,-480,-480,-480,-480,-480,259,578,-480,-480,-480,-259,546,99,579', '620,-480,-429,98,-480,463,521,-87,557,-480,521,-480,540,-480,-480,-480', '-480,-480,-480,-480,-226,-480,-480,-480,606,254,496,-226,-226,-226,-477', '254,-226,-226,-226,431,-226,-480,-480,-76,-75,291,-480,-83,361,99,-226', '620,-80,558,98,-86,254,258,521,-226,-226,-76,-226,-226,-226,-226,-226', '99,521,620,523,522,98,825,523,522,527,814,258,215,673,713,-76,-477,521', '-76,768,557,463,-421,-477,195,196,215,-480,-477,-421,-417,-226,-477', '-272,99,215,558,-417,-226,98,-272,-272,-272,254,-226,-272,-272,-272', '194,-272,-477,523,522,524,215,659,658,662,661,-272,-272,523,522,519', '-78,-81,-226,-86,-272,-272,557,-272,-272,-272,-272,-272,-480,523,522', '532,-226,826,-226,-480,99,-226,-422,827,-476,98,99,-79,-480,-422,-87', '98,-272,-272,-272,-272,-272,-272,-272,-272,-272,-272,-272,-272,-272', '-272,-480,-480,-272,-272,-272,-271,99,-272,284,285,-272,98,-271,-272', '-272,-429,-272,568,-272,568,-272,-271,-272,-272,-272,-272,-272,-272', '-272,-226,-272,-473,-272,680,-474,541,-226,-226,-226,734,606,-226,-226', '-226,-476,-226,-272,-272,-272,-272,-480,-272,251,516,575,-226,291,-480', '-72,252,517,-80,-476,-480,-226,-226,-480,-226,-226,-226,-226,-226,99', '461,462,814,-73,98,-74,-81,-417,-82,-278,-421,-480,477,580,-417,476', '-278,-421,234,-473,-476,215,-474,-417,-279,-278,-421,-476,-424,358,-226', '-279,-476,360,359,-424,-476,-226,829,-480,-279,-473,254,-226,-474,192', '-480,659,658,662,661,-476,193,212,-476,-480,-319,214,213,210,211,191', '590,-319,655,-226,653,652,651,654,-428,591,-319,-480,-477,-477,-477', '-428,-477,-226,-69,-226,-477,-477,-226,477,-428,-477,479,-477,-477,-477', '-477,-477,-477,-477,477,662,661,482,-477,-477,-477,-477,-477,-477,-477', '215,592,659,658,662,661,830,477,215,-477,479,469,-477,-477,-477,-477', '-477,-477,-477,-477,-477,-477,-423,-477,-477,-477,-477,-477,832,-423', '667,668,212,669,93,94,214,213,210,211,212,195,196,880,214,213,835,-477', '549,568,-477,-477,606,-477,-477,195,196,-477,-277,-477,187,-477,291', '-477,655,-277,653,652,651,654,-477,-477,839,840,-277,349,-477,-477,-477', '-477,-477,-477,616,496,624,-477,-477,-476,-476,-476,215,-476,846,847', '-85,-476,-476,672,675,848,-476,758,-476,-476,-476,-476,-476,-476,-476', '659,658,662,661,-476,-476,-476,-476,-476,-476,-476,758,759,212,436,883', '436,214,213,186,-476,291,693,-476,-476,-476,-476,-476,-476,-476,-476', '-476,-476,-277,-476,-476,-476,-476,-476,457,-277,-271,758,704,-279,-477', '458,466,-271,-277,431,-279,431,243,467,456,707,-271,-476,692,-279,-476', '-476,393,-476,-476,708,861,-476,-278,-476,715,-476,885,-476,655,-278', '653,652,651,654,717,-476,283,721,-278,254,-476,-476,-476,-476,-476,-476', '254,498,215,-476,-476,62,63,64,499,51,215,724,-83,56,57,282,-259,497', '60,645,58,59,61,23,24,65,66,659,658,662,661,22,28,27,88,87,89,90,728', '730,17,606,738,739,740,537,886,41,743,568,92,91,82,50,84,83,86,85,93', '94,745,80,81,38,39,37,215,219,224,225,226,221,223,231,232,227,228,-428', '208,209,507,749,229,230,-428,200,753,505,204,755,758,52,53,-428,759', '54,506,760,212,761,218,40,214,213,210,211,222,220,216,18,217,763,234', '-260,79,72,74,75,76,77,818,391,568,73,78,471,99,233,392,-215,769,98', '62,63,64,7,51,393,396,823,56,57,397,777,778,60,824,58,59,61,23,24,65', '66,568,822,95,568,22,28,27,88,87,89,90,254,254,17,101,102,103,104,105', '6,41,8,9,92,91,82,50,84,83,86,85,93,94,-277,80,81,38,39,37,-278,-277', '234,874,875,568,-477,-278,790,791,-277,101,102,103,104,105,-278,792', '876,36,797,799,30,190,426,52,53,428,189,54,431,32,436,805,-60,40,655', '394,653,652,651,654,451,18,452,453,188,459,79,72,74,75,76,77,263,291', '254,73,78,62,63,64,464,51,465,351,215,56,57,807,471,472,60,645,58,59', '61,246,247,65,66,659,658,662,661,245,275,279,88,87,89,90,101,102,103', '104,105,291,291,481,484,276,351,500,92,91,82,50,84,83,86,85,93,94,501', '80,81,,,280,215,219,224,225,226,221,223,231,,227,228,,,,,,229,230,,772', ',,204,,,52,53,,,54,,,212,,218,,214,213,210,211,222,220,216,,217,,,,79', '72,74,75,76,77,,,,73,78,,62,63,64,855,51,,,,56,57,,,,60,,58,59,61,246', '247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,537,,276,,,92,91,82,50', '84,83,86,85,93,94,,80,81,,,280,215,219,224,225,226,221,223,231,232,227', '228,,208,209,,,229,230,,772,,,204,,,52,53,,,54,,,212,,218,,214,213,210', '211,222,220,216,,217,,,,79,72,74,75,76,77,,,,73,78,,,233,,775,5,62,63', '64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90', ',,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215', '-497,-497,-497,-497,221,223,,,-497,-497,,,,,,229,230,,36,,,265,,,52', '53,,,54,,32,212,,218,40,214,213,210,211,222,220,216,18,217,,,,79,72', '74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24', '65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,215,-497,-497,-497,-497,221,223,,,-497,-497', ',,,,,229,230,,36,,,30,,,52,53,,,54,,32,212,,218,40,214,213,210,211,222', '220,216,18,217,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57', ',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41', '8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215,-497,-497,-497', '-497,221,223,,,-497,-497,,,,,,229,230,,36,,,30,,,52,53,,,54,,32,212', ',218,40,214,213,210,211,222,220,216,18,217,,,,79,72,74,75,76,77,,,,73', '78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27', '88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81', '38,39,37,215,219,224,225,226,221,223,231,232,227,228,,-497,-497,,,229', '230,,36,,,30,,,52,53,,,54,,32,212,,218,40,214,213,210,211,222,220,216', '18,217,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60', ',58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215,-497,-497,-497,-497,221', '223,,,-497,-497,,,,,,229,230,,36,,,30,,,52,53,,,54,,32,212,,218,40,214', '213,210,211,222,220,216,18,217,,,,79,72,74,75,76,77,,,,73,78,5,62,63', '64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90', ',,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215', ',,,,,,,,,,,,,,,229,230,,36,,,30,,,52,53,,,54,,32,212,,218,40,214,213', '210,211,,,216,18,217,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,', ',,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,', ',,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215,-497,-497', '-497,-497,221,223,,,-497,-497,,,,,,229,230,,36,,,30,,,52,53,,,54,,32', '212,,218,40,214,213,210,211,222,220,216,18,217,,,,79,72,74,75,76,77', ',,,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22', '28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,', '80,81,38,39,37,215,219,224,225,226,221,223,231,232,227,228,,-497,-497', ',,229,230,,36,,,30,,,52,53,,,54,,32,212,,218,40,214,213,210,211,222', '220,216,18,217,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57', ',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41', '8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215,,,,,,,,,,,,,,', ',229,230,,36,,,30,,,52,53,,,54,,32,212,,218,40,214,213,210,211,,,216', '18,217,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60', ',58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215,219,224,225,226,221,223', ',,227,228,,,,,,229,230,,36,,,30,,,52,53,,,54,,32,212,,218,40,214,213', '210,211,222,220,216,18,217,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64', '7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,', ',17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215', ',,,,,,,,,,,,,,,229,230,,36,,,30,,,52,53,,,54,,32,212,,218,40,214,213', '210,211,,,216,18,217,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,', ',,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,', ',,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215,-497,-497', '-497,-497,221,223,,,-497,-497,,,,,,229,230,,36,,,30,,,52,53,,,54,,32', '212,,218,40,214,213,210,211,222,220,216,18,217,,,,79,72,74,75,76,77', ',,,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22', '28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,', '80,81,38,39,37,215,,,,,,,,,,,,,,,,229,230,,36,,,30,,,52,53,,,54,,32', '212,,218,40,214,213,210,211,,,216,18,217,,,,79,72,74,75,76,77,,,,73', '78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27', '88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81', '38,39,37,215,,,,,,,,,,,,,,,,229,230,,36,,,265,,,52,53,,,54,,32,212,', '218,40,214,213,210,211,,,,18,,,,,79,72,74,75,76,77,,,,73,78,5,62,63', '64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90', ',,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215', ',,,,,,,,,,,,,,,229,230,,36,,,265,,,52,53,,,54,,32,212,,218,40,214,213', '210,211,,,,18,,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57', ',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41', '8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,215,,,,,,,,,,,,,,', ',229,230,,36,,,30,,,52,53,,,54,,32,212,,,40,214,213,210,211,,,,18,,', ',,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61', '23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50', '84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53', ',,54,,32,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7', '51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17', ',,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,', ',,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,79,72,74,75', '76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66', ',,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85', '93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,', ',40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57', ',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41', '8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,', ',36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73', '78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27', '88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81', '38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18', ',,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59', '61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82', '50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52', '53,,,54,,32,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64', '7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,', ',17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,', ',,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,79,72,74', '75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65', '66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86', '85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32', ',,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56', '57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6', '41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,', ',,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22', '28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,', '80,81,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,', ',,,,18,,,,,79,72,74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60', ',58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30', ',,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,5,62', '63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89', '90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,79,72', '74,75,76,77,,,,73,78,5,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24', '65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54', ',32,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77', ',,,73,78,62,63,64,7,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28', '27,88,87,89,90,,,17,,,,,,6,41,8,9,92,91,82,50,84,83,86,85,93,94,,80', '81,38,39,37,,,,,,,,,,,,,,,,,,,,36,,,30,,,52,53,,,54,,32,,,,40,,,,,,', ',18,,,,,79,72,74,75,76,77,,,,73,78,153,164,154,177,150,170,160,159,180', '181,175,158,157,152,178,182,183,162,151,165,169,171,163,156,,,172,179', '174,173,166,176,161,149,168,167,,,,,,148,155,146,147,144,145,109,111', '108,,110,,,,,,,139,140,,137,121,122,123,,126,128,,,124,,,,,141,142,129', '130,,,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127,125,118,,119,', ',143,79,,,,,,,,,,78,153,164,154,177,150,170,160,159,180,181,175,158', '157,152,178,182,183,162,151,165,169,171,163,156,,,172,179,174,173,166', '176,161,149,168,167,,,,,,148,155,146,147,144,145,109,111,,,110,,,,,', ',139,140,,137,121,122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,', ',,,,,,134,133,,120,138,136,135,131,132,127,125,118,,119,,,143,79,,,62', '63,64,,51,,,78,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87', '89,90,,,17,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72', '74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65', '66,,,,,22,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40', ',,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60', ',58,59,61,246,247,65,66,,,,,245,28,27,88,87,89,90,,,,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,52,53,,,54,,241,,243,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,28,27,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,241,,243,,40,,,,,,,,207,', ',,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61', '246,247,65,66,,,,,245,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84', '83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53', ',,54,,241,,243,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,-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,254,,-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,263,,-249,-249,,,-249,,-249,,-249,,-249,,,,,,,,-249,,', ',,-249,-249,-249,-249,-249,-249,,,,-249,-249,62,63,64,,51,,,,56,57,', ',,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,276', ',,92,91,82,50,84,83,86,85,93,94,,80,81,,,280,,215,219,224,225,226,221', '223,231,232,227,228,,208,209,,,229,230,273,,,270,,,52,53,,,54,,269,', '212,,218,,214,213,210,211,222,220,216,,217,,,79,72,74,75,76,77,,,,73', '78,62,63,64,233,51,568,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245', '275,279,88,87,89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86,85,93,94,,80', '81,,,280,,215,219,224,225,226,221,223,231,232,227,228,,208,209,,,229', '230,273,,,204,,,52,53,,,54,,,,212,,218,,214,213,210,211,222,220,216', ',217,,,79,72,74,75,76,77,,,,73,78,62,63,64,233,51,,,,56,57,,,,60,,58', '59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63', '64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87', '89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,', ',,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72', '74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65', '66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85', '93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41,', ',92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,28,27,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,299,,,,40,,,,,,,,207,,,,', '79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246', '247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87', '89,90,,,17,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72', '74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65', '66,,,,,245,275,279,88,87,89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86,85', '93,94,,80,81,,,280,,215,219,224,225,226,221,223,231,232,227,228,,208', '209,,,229,230,315,,,30,,,52,53,,,54,,32,,212,,218,,214,213,210,211,222', '220,216,,217,,,79,72,74,75,76,77,,,,73,78,62,63,64,233,51,,,,56,57,', ',,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,276', ',,92,91,320,50,84,83,321,85,93,94,,80,81,,,280,,215,219,224,225,226', '221,223,231,232,227,228,,208,209,,327,229,230,322,,,204,,,52,53,,,54', ',,,212,,218,,214,213,210,211,222,220,216,,217,,,79,72,74,75,76,77,,', ',73,78,62,63,64,233,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245', '275,279,88,87,89,90,,,,,,,,,,276,,,92,91,320,50,84,83,321,85,93,94,', '80,81,,,280,,215,219,224,225,226,221,223,231,232,227,228,,208,209,,', '229,230,322,,,204,,,52,53,,,54,,,,212,,218,,214,213,210,211,222,220', '216,,217,,,79,72,74,75,76,77,,,,73,78,-473,-473,-473,233,-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,-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,,,,-473,-473,-474,-474,-474,,-474,,,,-474,-474,', ',,-474,,-474,-474,-474,-474,-474,-474,-474,,-474,,,-474,-474,-474,-474', '-474,-474,-474,,,,,,,,,,-474,,,-474,-474,-474,-474,-474,-474,-474,-474', '-474,-474,,-474,-474,-474,-474,-474,,,,,,,,,,,,,,,,,,,,-474,,,-474,-474', ',-474,-474,,,-474,,-474,,-474,,-474,,,,,,,,-474,,-474,,,-474,-474,-474', '-474,-474,-474,,,,-474,-474,62,63,64,,51,,,,56,57,,,,60,,58,59,61,23', '24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87', '89,90,,,17,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72', '74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65', '66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41,,,92,91,82,50,84,83,86,85', '93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,', ',40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,7,51,,,,56,57', ',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,6,41', '8,9,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,', ',36,,,30,,,52,53,,,54,,32,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73', '78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,369,,,,40,,,,,,,,207,,,,', '79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,23', '24,65,66,,,,,22,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86', '85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,', '369,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,', '56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,,,,,,,', '41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,', ',,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,', ',73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,28', '27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38', '39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,299,,,,40,,,,,,,,207', ',,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61', '23,24,65,66,,,,,22,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87', '89,90,,,17,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72', '74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65', '66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85', '93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279', '88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39', '37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,', '79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246', '247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77', ',,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245', '275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80', '81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,', ',207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58', '59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63', '64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87', '89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,', ',,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72', '74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65', '66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85', '93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279', '88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39', '37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,', '79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246', '247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77', ',,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245', '275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80', '81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,', ',207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58', '59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63', '64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87', '89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,', ',,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72', '74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65', '66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85', '93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279', '88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39', '37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,', '79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246', '247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77', ',,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245', '275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80', '81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,', ',207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58', '59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63', '64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87', '89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,', ',,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72', '74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65', '66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85', '93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279', '88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39', '37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,', '79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246', '247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77', ',,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245', '28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81', '38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,241,,243,,40,,,', ',,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,', '58,59,61,246,247,65,66,,,,,245,28,27,88,87,89,90,,,,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,445,53,,,54,,241,,243,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,28,27,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,449,52,53,,,54,,241,,243,,40,,,,,,,,207', ',,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61', '246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,276,,,92,91,82,50', '84,83,86,85,93,94,,80,81,,,280,,215,219,224,225,226,221,223,231,232', '227,228,,208,209,,,229,230,273,,,204,,,52,53,,,54,,,,212,,218,,214,213', '210,211,222,220,216,,217,,,79,72,74,75,76,77,,,,73,78,62,63,64,233,51', ',,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,', ',,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,', ',,,,,,,,,,200,,,204,469,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74', '75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66', ',,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40', ',,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60', ',58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,62,63', '64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90', ',,17,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,', ',,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75', '76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,', ',22,28,27,88,87,89,90,,,17,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94', ',80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,', ',,,,,18,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,', '58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,153,164', '154,177,150,170,160,159,180,181,175,158,157,152,178,182,183,162,151', '165,169,171,163,156,,,172,179,174,173,166,176,161,149,168,167,,,,,,148', '155,146,147,144,145,109,111,,,110,,,,,,,139,140,,137,121,122,123,,126', '128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120,138,136,135', '131,132,127,125,118,,119,,,143,79,,,-249,-249,-249,,-249,,,78,-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,254', ',-249,-249,,,-249,,-249,,-249,,-249,,,,,,,,-249,,,,,-249,-249,-249,-249', '-249,-249,,,,-249,-249,-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', ',,,-478,-478,-479,-479,-479,,-479,,,,-479,-479,,,,-479,,-479,-479,-479', '-479,-479,-479,-479,,,,,-479,-479,-479,-479,-479,-479,-479,,,,,,,,,', '-479,,,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,,-479,-479', '-479,-479,-479,,,,,,,,,,,,,,,,,,,,-479,,,-479,-479,,-479,-479,,,-479', ',-479,,-479,,-479,,,,,,,,-479,,,,,-479,-479,-479,-479,-479,-479,,,,-479', '-479,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,28', '27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38', '39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,299,,,,40,,,,,,,,207', ',,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61', '246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50', '84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52', '53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,', '51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90', ',,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,', ',,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75', '76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,', ',,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40', ',,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60', ',58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,', '204,,,52,53,,,54,,560,,243,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73', '78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279', '88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39', '37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,564,,243,,40,,,,,,,,207', ',,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61', '246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50', '84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52', '53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,', '51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17', ',,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,', ',,,,,,,,200,,,204,,,52,53,,,54,,584,,243,,40,,,,,,,,18,,,,,79,72,74', '75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66', ',,,,245,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94', ',80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,299,,,,40', ',,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60', ',58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,', '204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62', '63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79', '72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247', '65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86', '85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,', ',,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279', '88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39', '37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,369,,,,40,,,,,,,,207,', ',,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61', '246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50', '84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52', '53,,,54,,612,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64', ',51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89', '90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,', ',,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74', '75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66', ',,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40', ',,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60', ',58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,', '204,,,52,53,,,54,,628,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,28,27,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,299,,,,40,,,,,,,,207,,,,', '79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246', '247,65,66,,,,,245,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',299,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,', ',56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,', ',,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,', ',,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77', ',,,73,78,153,164,154,177,150,170,160,159,180,181,175,158,157,152,178', '182,183,162,151,165,169,171,163,156,,,172,179,174,173,166,176,161,149', '168,167,,,,,,148,155,146,147,144,145,109,111,,,110,,,,,,,139,140,,137', '121,122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133', ',120,138,136,135,131,132,127,125,118,,119,,,143,79,,,62,63,64,,51,,', '78,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,', ',,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,', ',,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75', '76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,', ',,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,679,,', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,,,,,,,,41,,,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,', '204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62', '63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89', '90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,', ',,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74', '75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66', ',,,,22,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94', ',80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,', ',,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60', ',58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,', '204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62', '63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79', '72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247', '65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86', '85,93,94,,80,81,,,280,,,,,,,,,,,,,,,,,,,,273,,,270,,,52,53,,,54,,697', ',698,,,,,,,,,699,,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77', ',,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245', '275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80', '81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,', ',207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58', '59,61,246,247,65,66,,,,,245,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82', '50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,', '52,53,,,54,,560,,243,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62', '63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79', '72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247', '65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86', '85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,', ',,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77', ',,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28', '27,88,87,89,90,,,17,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81', '38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,18', ',,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61', '246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50', '84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52', '53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,', '51,,,,56,57,,,,60,,58,59,61,23,24,65,66,,,,,22,28,27,88,87,89,90,,,', ',,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,', ',,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76', '77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,', '245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94', ',80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,', ',,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60', ',58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,', '204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62', '63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88', '87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37', ',,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79', '72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247', '65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86', '85,93,94,,80,81,,,280,,215,219,224,225,226,221,223,231,232,227,228,', '208,209,,,229,230,772,,,204,,,52,53,,,54,,,,212,,218,,214,213,210,211', '222,220,216,,217,,,79,72,74,75,76,77,,,,73,78,62,63,64,233,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,780,,243,,40,,,,,,,,207,,,,,79,72,74,75', '76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,', ',,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,786,,243', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,788,,243,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,', ',73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275', '279,88,87,89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86,85,93,94,,80,81', ',,280,,215,219,224,225,226,221,223,231,232,227,228,,208,209,,,229,230', '772,,,204,,,52,53,,,54,,,,212,,218,,214,213,210,211,222,220,216,,217', ',,79,72,74,75,76,77,,,,73,78,62,63,64,233,51,,,,56,57,,,,60,,58,59,61', '23,24,65,66,,,,,22,28,27,88,87,89,90,,,17,,,,,,,41,,,92,91,82,50,84', '83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53', ',,54,,,,,,40,,,,,,,,18,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,', ',,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,', ',,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,', ',,,,,,,,,200,,,204,,,52,53,,,54,,802,,,,40,,,,,,,,207,,,,,79,72,74,75', '76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,', ',,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40', ',,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60', ',58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92', '91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,', '204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62', '63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88', '87,89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86,85,93,94,,80,81,,,280,', ',,,,,,,,,,,,,,,,,,273,,,270,,,52,53,,,54,,821,,820,,,,,,,,,,,,,,,79', '72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247', '65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86', '85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,', ',,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56', '57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,', ',,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,', ',,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77', ',,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245', '275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80', '81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40,,,,,,', ',207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58', '59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91', '82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204', ',,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63', '64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87', '89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86,85,93,94,,80,81,,,280,,215', '219,224,225,226,221,223,231,232,227,228,,208,209,,,229,230,772,,,204', ',,52,53,,,54,,,,212,,218,,214,213,210,211,222,220,216,,217,,,79,72,74', '75,76,77,,,,73,78,62,63,64,233,51,,,,56,57,,,,60,,58,59,61,246,247,65', '66,,,,,245,28,27,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,299,,', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,276', ',,92,91,82,50,84,83,86,85,93,94,,80,81,,,280,,215,219,224,225,226,221', '223,231,232,227,228,,208,209,,,229,230,772,,,204,,,52,53,,,54,,,,212', ',218,,214,213,210,211,222,220,216,,217,,,79,72,74,75,76,77,,,,73,78', '62,63,64,233,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279', '88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93,94,,80,81,38,39', '37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,864,,243,,40,,,,,,,,207', ',,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57,,,,60,,58,59,61', '246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50', '84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52', '53,,,54,,867,,243,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63', '64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87', '89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86,85,93,94,,80,81,,,280,,215', '219,224,225,226,221,223,231,232,227,228,,208,209,,,229,230,772,,,204', ',,52,53,,,54,,,,212,,218,,214,213,210,211,222,220,216,,217,,,79,72,74', '75,76,77,,,,73,78,62,63,64,233,51,,,,56,57,,,,60,,58,59,61,246,247,65', '66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85', '93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,', ',40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51,,,,56,57', ',,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41', ',,92,91,82,50,84,83,86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200', ',,204,,,52,53,,,54,,,,,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78', '62,63,64,,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279', '88,87,89,90,,,,,,,,,,276,,,92,91,82,50,84,83,86,85,93,94,,80,81,,,280', ',215,219,224,225,226,221,223,231,232,227,228,,208,209,,,229,230,772', ',,204,,,52,53,,,54,,,,212,,218,,214,213,210,211,222,220,216,,217,,,79', '72,74,75,76,77,,,,73,78,62,63,64,233,51,,,,56,57,,,,60,,58,59,61,246', '247,65,66,,,,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83', '86,85,93,94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54', ',889,,243,,40,,,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,62,63,64,,51', ',,,56,57,,,,60,,58,59,61,246,247,65,66,,,,,245,275,279,88,87,89,90,', ',,,,,,,,276,,,92,91,82,50,84,83,86,85,93,94,,80,81,,,280,,215,219,224', '225,226,221,223,231,232,227,228,,208,209,,,229,230,772,,,204,,,52,53', ',,54,,,,212,,218,,214,213,210,211,222,220,216,,217,,,79,72,74,75,76', '77,,,,73,78,62,63,64,233,51,,,,56,57,,,,60,,58,59,61,246,247,65,66,', ',,,245,275,279,88,87,89,90,,,,,,,,,,41,,,92,91,82,50,84,83,86,85,93', '94,,80,81,38,39,37,,,,,,,,,,,,,,,,,,,,200,,,204,,,52,53,,,54,,,,,,40', ',,,,,,,207,,,,,79,72,74,75,76,77,,,,73,78,153,164,154,177,150,170,160', '159,180,181,175,158,157,152,178,182,183,162,151,165,169,171,163,156', ',,172,179,174,336,335,337,334,149,168,167,,,,,,148,155,146,147,332,333', '330,111,84,83,331,85,,,,,,139,140,,137,121,122,123,,126,128,,,124,,', ',,141,142,129,130,,,,,,341,,,,,,,,134,133,,120,138,136,135,131,132,127', '125,118,,119,,,143,153,164,154,177,150,170,160,159,180,181,175,158,157', '152,178,182,183,162,151,165,169,171,163,156,,,172,179,174,173,166,176', '161,149,168,167,,,,,,148,155,146,147,144,145,109,111,,,110,,,,,,,139', '140,,137,121,122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,', ',134,133,,120,138,136,135,131,132,127,125,118,,119,,,143,215,219,224', '225,226,221,223,231,232,227,228,,208,209,,,229,230,,,,-215,,,,,,,,,', ',212,,218,,214,213,210,211,222,220,216,,217,,,,,,,,,,,,,,,,,233,,-215', '215,219,224,225,226,221,223,231,232,227,228,,208,209,,,229,230,,,,,', ',,,,,,,,,212,,218,,214,213,210,211,222,220,216,,217,,,,,,,,550,379,', ',551,,,,,233,556,139,140,,137,121,122,123,,126,128,,,124,,,,,141,142', '129,130,,,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127,125,118,,119', '632,385,143,,633,,,,,,,139,140,,137,121,122,123,,126,128,,,124,,,,,141', '142,129,130,,,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127,125,118', ',119,635,385,143,,636,,,,,,,139,140,,137,121,122,123,,126,128,,,124', ',,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127', '125,118,,119,433,379,143,,434,,,,,,,139,140,,137,121,122,123,,126,128', ',,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120,138,136,135,131', '132,127,125,118,,119,550,379,143,,551,,,,,,,139,140,,137,121,122,123', ',126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120,138,136', '135,131,132,127,125,118,,119,552,385,143,,553,,,,,,,139,140,,137,121', '122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120', '138,136,135,131,132,127,125,118,,119,,,143,215,219,224,225,226,221,223', '231,232,227,228,,208,209,,,229,230,,,,,,,,,,,,,,,212,,218,,214,213,210', '211,222,220,216,,217,,,,,,,433,379,,,434,,,,,291,233,139,140,,137,121', '122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120', '138,136,135,131,132,127,125,118,,119,433,379,143,,434,,,,,,,139,140', ',137,121,122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134', '133,,120,138,136,135,131,132,127,125,118,,119,376,379,143,,377,,,,,', ',139,140,,137,121,122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,', ',,,,,,134,133,,120,138,136,135,131,132,127,125,118,,119,857,379,143', ',858,,,,,,,139,140,,137,121,122,123,,126,128,,,124,,,,,141,142,129,130', ',,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127,125,118,,119,597,385', '143,,598,,,,,,,139,140,,137,121,122,123,,126,128,,,124,,,,,141,142,129', '130,,,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127,125,118,,119,859', '385,143,,860,,,,,,,139,140,,137,121,122,123,,126,128,,,124,,,,,141,142', '129,130,,,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127,125,118,,119', '594,379,143,,595,,,,,,,139,140,,137,121,122,123,,126,128,,,124,,,,,141', '142,129,130,,,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127,125,118', ',119,630,379,143,,631,,,,,,,139,140,,137,121,122,123,,126,128,,,124', ',,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120,138,136,135,131,132,127', '125,118,,119,552,385,143,,553,,,,,,,139,140,,137,121,122,123,,126,128', ',,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120,138,136,135,131', '132,127,125,118,,119,433,379,143,,434,,,,,,,139,140,,137,121,122,123', ',126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120,138,136', '135,131,132,127,125,118,,119,381,385,143,,383,,,,,,,139,140,,137,121', '122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134,133,,120', '138,136,135,131,132,127,125,118,,119,433,379,143,,434,,,,,,,139,140', ',137,121,122,123,,126,128,,,124,,,,,141,142,129,130,,,,,,,,,,,,,,134', '133,,120,138,136,135,131,132,127,125,118,,119,,,143,215,219,224,225', '226,221,223,231,232,227,228,,208,209,,,229,230,,,,,,,,,,,,,,,212,,218', ',214,213,210,211,222,220,216,,217,,215,219,224,225,226,221,223,231,232', '227,228,,208,209,291,233,229,230,,,,,,,,,,,,,,,212,,218,,214,213,210', '211,222,220,216,,217,,,,,,,,,,,,,,,,,233' ] racc_action_table = arr = ::Array.new(24171, 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 = [ '383,512,512,518,518,306,316,383,383,383,326,377,440,383,383,633,383', '591,70,440,347,574,307,627,345,313,70,334,631,322,333,615,615,322,334', '383,383,333,383,383,383,383,383,798,727,881,550,630,632,743,500,332', '551,362,377,574,591,377,332,603,603,440,594,383,383,383,383,383,383', '383,383,383,383,383,383,383,383,633,55,383,383,383,347,383,345,345,345', '383,363,512,383,518,550,491,512,383,368,383,551,383,383,383,383,383', '383,383,381,383,316,383,632,603,326,381,381,381,306,633,306,381,381', '306,381,383,383,594,383,313,383,383,631,381,326,307,627,307,627,326', '307,627,492,381,381,594,381,381,381,381,381,630,632,743,500,201,798', '727,798,727,744,798,727,55,277,311,594,311,446,594,595,381,381,381,381', '381,381,381,381,381,381,381,381,381,381,26,711,381,381,381,371,381,491', '711,491,381,199,491,381,394,528,201,446,381,346,381,375,381,381,381', '381,381,381,381,432,381,381,381,803,382,803,432,432,432,858,277,432', '432,432,582,432,381,381,595,381,711,381,381,184,492,432,492,199,447', '492,394,26,277,344,432,432,595,432,432,432,432,432,744,343,744,528,528', '744,772,346,346,346,755,26,402,528,582,595,858,348,595,693,447,283,331', '858,15,15,403,635,858,331,330,432,858,50,3,404,424,330,432,3,50,50,50', '432,432,50,50,50,14,50,858,344,344,344,405,755,755,755,755,50,50,343', '343,343,283,693,432,283,50,50,424,50,50,50,50,50,635,348,348,348,432', '774,432,635,310,432,335,775,635,310,646,14,635,335,14,646,50,50,50,50', '50,50,50,50,50,50,50,50,50,50,635,597,50,50,50,773,640,50,37,37,50,640', '773,50,50,35,50,429,50,878,50,773,50,50,50,50,50,50,50,435,50,320,50', '540,321,376,435,435,435,870,870,435,435,435,857,435,50,50,50,50,597', '50,25,339,438,435,439,597,35,25,339,35,597,859,435,435,597,435,435,435', '435,435,511,280,280,848,540,511,376,540,320,376,503,321,597,297,441', '320,297,503,321,442,320,857,419,321,320,721,503,321,857,337,108,435', '721,857,108,108,337,857,435,782,859,721,320,435,435,321,13,859,848,848', '848,848,859,13,419,857,859,42,419,419,419,419,13,448,42,753,435,753', '753,753,753,271,450,42,859,553,553,553,271,553,435,451,435,553,553,435', '303,271,553,303,553,553,553,553,553,553,553,301,758,758,301,553,553', '553,553,553,553,553,420,455,753,753,753,753,783,298,401,553,298,460', '553,553,553,553,553,553,553,553,553,553,336,553,553,553,553,553,784', '336,522,522,420,522,522,522,420,420,420,420,401,294,294,865,401,401', '787,553,553,892,553,553,470,553,553,305,305,553,636,553,9,553,473,553', '645,636,645,645,645,645,636,553,800,801,636,95,553,553,553,553,553,553', '487,493,494,553,553,552,552,552,400,552,806,808,553,552,552,526,531', '809,552,810,552,552,552,552,552,552,552,645,645,645,645,552,552,552', '552,552,552,552,813,814,400,543,871,547,400,400,8,552,41,554,552,552', '552,552,552,552,552,552,552,552,860,552,552,552,552,552,272,860,274', '872,561,876,860,272,286,274,860,563,876,566,568,286,272,576,274,552', '552,876,552,552,286,552,552,577,826,552,825,552,583,552,873,552,817', '825,817,817,817,817,586,552,36,593,825,596,552,552,552,552,552,552,599', '314,601,552,552,60,60,60,314,60,602,604,552,60,60,34,607,314,60,817', '60,60,60,60,60,60,60,817,817,817,817,60,60,60,60,60,60,60,608,611,60', '617,623,625,626,366,874,60,629,833,60,60,60,60,60,60,60,60,60,60,638', '60,60,60,60,60,366,366,366,366,366,366,366,366,366,366,366,770,366,366', '324,643,366,366,770,60,647,324,60,648,649,60,60,770,655,60,324,660,366', '663,366,60,366,366,366,366,366,366,366,60,366,665,20,678,60,60,60,60', '60,60,764,198,836,60,60,837,60,366,198,366,696,60,97,97,97,97,97,198', '202,771,97,97,203,700,701,97,771,97,97,97,97,97,97,97,702,771,1,705', '97,97,97,97,97,97,97,709,710,97,4,4,4,4,4,97,97,97,97,97,97,97,97,97', '97,97,97,97,97,598,97,97,97,97,97,459,598,712,854,855,716,598,459,718', '719,598,350,350,350,350,350,459,720,856,97,732,735,97,12,239,97,97,240', '11,97,244,97,253,746,264,97,514,200,514,514,514,514,266,97,267,268,10', '273,97,97,97,97,97,97,275,276,279,97,97,821,821,821,284,821,285,97,288', '821,821,750,292,293,821,514,821,821,821,821,821,821,821,514,514,514', '514,821,821,821,821,821,821,821,106,106,106,106,106,296,751,300,302', '821,312,315,821,821,821,821,821,821,821,821,821,821,317,821,821,,,821', '422,422,422,422,422,422,422,422,,422,422,,,,,,422,422,,821,,,821,,,821', '821,,,821,,,422,,422,,422,422,422,422,422,422,422,,422,,,,821,821,821', '821,821,821,,,,821,821,,697,697,697,821,697,,,,697,697,,,,697,,697,697', '697,697,697,697,697,,,,,697,697,697,697,697,697,697,,,,,,,,555,,697', ',,697,697,697,697,697,697,697,697,697,697,,697,697,,,697,555,555,555', '555,555,555,555,555,555,555,555,,555,555,,,555,555,,697,,,697,,,697', '697,,,697,,,555,,555,,555,555,555,555,555,555,555,,555,,,,697,697,697', '697,697,697,,,,697,697,,,555,,697,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,414,414,414,414,414,414', '414,,,414,414,,,,,,414,414,,30,,,30,,,30,30,,,30,,30,414,,414,30,414', '414,414,414,414,414,414,30,414,,,,30,30,30,30,30,30,,,,30,30,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,415,415,415,415,415,415,415', ',,415,415,,,,,,415,415,,737,,,737,,,737,737,,,737,,737,415,,415,737', '415,415,415,415,415,415,415,737,415,,,,737,737,737,737,737,737,,,,737', '737,736,736,736,736,736,736,,,,736,736,,,,736,,736,736,736,736,736,736', '736,,,,,736,736,736,736,736,736,736,,,736,,,,,,736,736,736,736,736,736', '736,736,736,736,736,736,736,736,,736,736,736,736,736,416,416,416,416', '416,416,416,,,416,416,,,,,,416,416,,736,,,736,,,736,736,,,736,,736,416', ',416,736,416,416,416,416,416,416,416,736,416,,,,736,736,736,736,736', '736,,,,736,736,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,398', '398,398,398,398,398,398,398,398,398,398,,398,398,,,398,398,,606,,,606', ',,606,606,,,606,,606,398,,398,606,398,398,398,398,398,398,398,606,398', ',,,606,606,606,606,606,606,,,,606,606,589,589,589,589,589,589,,,,589', '589,,,,589,,589,589,589,589,589,589,589,,,,,589,589,589,589,589,589', '589,,,589,,,,,,589,589,589,589,589,589,589,589,589,589,589,589,589,589', ',589,589,589,589,589,417,417,417,417,417,417,417,,,417,417,,,,,,417', '417,,589,,,589,,,589,589,,,589,,589,417,,417,589,417,417,417,417,417', '417,417,589,417,,,,589,589,589,589,589,589,,,,589,589,186,186,186,186', '186,186,,,,186,186,,,,186,,186,186,186,186,186,186,186,,,,,186,186,186', '186,186,186,186,,,186,,,,,,186,186,186,186,186,186,186,186,186,186,186', '186,186,186,,186,186,186,186,186,411,,,,,,,,,,,,,,,,411,411,,186,,,186', ',,186,186,,,186,,186,411,,411,186,411,411,411,411,,,411,186,411,,,,186', '186,186,186,186,186,,,,186,186,187,187,187,187,187,187,,,,187,187,,', ',187,,187,187,187,187,187,187,187,,,,,187,187,187,187,187,187,187,,', '187,,,,,,187,187,187,187,187,187,187,187,187,187,187,187,187,187,,187', '187,187,187,187,418,418,418,418,418,418,418,,,418,418,,,,,,418,418,', '187,,,187,,,187,187,,,187,,187,418,,418,187,418,418,418,418,418,418', '418,187,418,,,,187,187,187,187,187,187,,,,187,187,588,588,588,588,588', '588,,,,588,588,,,,588,,588,588,588,588,588,588,588,,,,,588,588,588,588', '588,588,588,,,588,,,,,,588,588,588,588,588,588,588,588,588,588,588,588', '588,588,,588,588,588,588,588,399,399,399,399,399,399,399,399,399,399', '399,,399,399,,,399,399,,588,,,588,,,588,588,,,588,,588,399,,399,588', '399,399,399,399,399,399,399,588,399,,,,588,588,588,588,588,588,,,,588', '588,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,559,559,559,559,559,559,559,,559,559,559,559,559,413,,,,,,,,,,,', ',,,,413,413,,559,,,559,,,559,559,,,559,,559,413,,413,559,413,413,413', '413,,,413,559,413,,,,559,559,559,559,559,559,,,,559,559,724,724,724', '724,724,724,,,,724,724,,,,724,,724,724,724,724,724,724,724,,,,,724,724', '724,724,724,724,724,,,724,,,,,,724,724,724,724,724,724,724,724,724,724', '724,724,724,724,,724,724,724,724,724,421,421,421,421,421,421,421,,,421', '421,,,,,,421,421,,724,,,724,,,724,724,,,724,,724,421,,421,724,421,421', '421,421,421,421,421,724,421,,,,724,724,724,724,724,724,,,,724,724,706', '706,706,706,706,706,,,,706,706,,,,706,,706,706,706,706,706,706,706,', ',,,706,706,706,706,706,706,706,,,706,,,,,,706,706,706,706,706,706,706', '706,706,706,706,706,706,706,,706,706,706,706,706,410,,,,,,,,,,,,,,,', '410,410,,706,,,706,,,706,706,,,706,,706,410,,410,706,410,410,410,410', ',,410,706,410,,,,706,706,706,706,706,706,,,,706,706,0,0,0,0,0,0,,,,0', '0,,,,0,,0,0,0,0,0,0,0,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0', '0,0,0,0,,0,0,0,0,0,409,409,409,409,409,409,409,,,409,409,,,,,,409,409', ',0,,,0,,,0,0,,,0,,0,409,,409,0,409,409,409,409,409,409,409,0,409,,,', '0,0,0,0,0,0,,,,0,0,852,852,852,852,852,852,,,,852,852,,,,852,,852,852', '852,852,852,852,852,,,,,852,852,852,852,852,852,852,,,852,,,,,,852,852', '852,852,852,852,852,852,852,852,852,852,852,852,,852,852,852,852,852', '412,,,,,,,,,,,,,,,,412,412,,852,,,852,,,852,852,,,852,,852,412,,412', '852,412,412,412,412,,,412,852,412,,,,852,852,852,852,852,852,,,,852', '852,270,270,270,270,270,270,,,,270,270,,,,270,,270,270,270,270,270,270', '270,,,,,270,270,270,270,270,270,270,,,270,,,,,,270,270,270,270,270,270', '270,270,270,270,270,270,270,270,,270,270,270,270,270,406,,,,,,,,,,,', ',,,,406,406,,270,,,270,,,270,270,,,270,,270,406,,406,270,406,406,406', '406,,,,270,,,,,270,270,270,270,270,270,,,,270,270,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,407,,,,,,,,,,,,,,,,407,407,,265,,,265,', ',265,265,,,265,,265,407,,407,265,407,407,407,407,,,,265,,,,,265,265', '265,265,265,265,,,,265,265,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,204,204,204,204,204,204,204,204,,204,204', '204,204,204,408,,,,,,,,,,,,,,,,408,408,,204,,,204,,,204,204,,,204,,204', '408,,,204,408,408,408,408,,,,204,,,,,204,204,204,204,204,204,,,,204', '204,51,51,51,51,51,51,,,,51,51,,,,51,,51,51,51,51,51,51,51,,,,,51,51', '51,51,51,51,51,,,51,,,,,,51,51,51,51,51,51,51,51,51,51,51,51,51,51,', '51,51,51,51,51,,,,,,,,,,,,,,,,,,,,51,,,51,,,51,51,,,51,,51,,,,51,,,', ',,,,51,,,,,51,51,51,51,51,51,,,,51,51,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,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,845,845,845,845,845,,,,845,845,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,513,513,513,513,513,513,,,,513,513,,,,513,,513,513,513,513,513', '513,513,,,,,513,513,513,513,513,513,513,,,513,,,,,,513,513,513,513,513', '513,513,513,513,513,513,513,513,513,,513,513,513,513,513,,,,,,,,,,,', ',,,,,,,,513,,,513,,,513,513,,,513,,513,,,,513,,,,,,,,513,,,,,513,513', '513,513,513,513,,,,513,513,838,838,838,838,838,838,,,,838,838,,,,838', ',838,838,838,838,838,838,838,,,,,838,838,838,838,838,838,838,,,838,', ',,,,838,838,838,838,838,838,838,838,838,838,838,838,838,838,,838,838', '838,838,838,,,,,,,,,,,,,,,,,,,,838,,,838,,,838,838,,,838,,838,,,,838', ',,,,,,,838,,,,,838,838,838,838,838,838,,,,838,838,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', '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,639,639,639,639,639,639,,,,639,639,,,,639,,639,639', '639,639,639,639,639,,,,,639,639,639,639,639,639,639,,,639,,,,,,639,639', '639,639,639,639,639,639,639,639,639,639,639,639,,639,639,639,639,639', ',,,,,,,,,,,,,,,,,,,639,,,639,,,639,639,,,639,,639,,,,639,,,,,,,,639', ',,,,639,639,639,639,639,639,,,,639,639,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,490,490,490', '490,490,490,,,,490,490,,,,490,,490,490,490,490,490,490,490,,,,,490,490', '490,490,490,490,490,,,490,,,,,,490,490,490,490,490,490,490,490,490,490', '490,490,490,490,,490,490,490,490,490,,,,,,,,,,,,,,,,,,,,490,,,490,,', '490,490,,,490,,490,,,,490,,,,,,,,490,,,,,490,490,490,490,490,490,,,', '490,490,748,748,748,748,748,748,,,,748,748,,,,748,,748,748,748,748,748', '748,748,,,,,748,748,748,748,748,748,748,,,748,,,,,,748,748,748,748,748', '748,748,748,748,748,748,748,748,748,,748,748,748,748,748,,,,,,,,,,,', ',,,,,,,,748,,,748,,,748,748,,,748,,748,,,,748,,,,,,,,748,,,,,748,748', '748,748,748,748,,,,748,748,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,486,486,486,486,486', '486,,,,486,486,,,,486,,486,486,486,486,486,486,486,,,,,486,486,486,486', '486,486,486,,,486,,,,,,486,486,486,486,486,486,486,486,486,486,486,486', '486,486,,486,486,486,486,486,,,,,,,,,,,,,,,,,,,,486,,,486,,,486,486', ',,486,,486,,,,486,,,,,,,,486,,,,,486,486,486,486,486,486,,,,486,486', '369,369,369,,369,,,,369,369,,,,369,,369,369,369,369,369,369,369,,,,', '369,369,369,369,369,369,369,,,,,,,,,,369,,,369,369,369,369,369,369,369', '369,369,369,,369,369,369,369,369,,,,,,,,,,,,,,,,,,,,369,,,369,,,369', '369,,,369,,,,,,369,,,,,,,,369,,,,,369,369,369,369,369,369,,,,369,369', '5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,5,5,5,5,5,5,5,,,5,,,,,,5,5', '5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,,,,5,,,5,,,5,5,,', '5,,5,,,,5,,,,,,,,5,,,,,5,5,5,5,5,5,,,,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6', '6,6,6,6,6,6,6,6,6,6,6,,,6,6,6,6,6,6,6,6,6,6,,,,,,6,6,6,6,6,6,6,6,6,', '6,,,,,,,6,6,,6,6,6,6,,6,6,,,6,,,,,6,6,6,6,,,,,,,,,,,,,,6,6,,6,6,6,6', '6,6,6,6,6,,6,,,6,6,,,,,,,,,,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7', '7,7,7,7,7,,,7,7,7,7,7,7,7,7,7,7,,,,,,7,7,7,7,7,7,7,7,,,7,,,,,,,7,7,', '7,7,7,7,,7,7,,,7,,,,,7,7,7,7,,,,,,,,,,,,,,7,7,,7,7,7,7,7,7,7,7,7,,7', ',,7,7,,,17,17,17,,17,,,7,17,17,,,,17,,17,17,17,17,17,17,17,,,,,17,17', '17,17,17,17,17,,,17,,,,,,,17,,,17,17,17,17,17,17,17,17,17,17,,17,17', '17,17,17,,,,,,,,,,,,,,,,,,,,17,,,17,,,17,17,,,17,,,,,,17,,,,,,,,17,', ',,,17,17,17,17,17,17,,,,17,17,18,18,18,,18,,,,18,18,,,,18,,18,18,18', '18,18,18,18,,,,,18,18,18,18,18,18,18,,,,,,,,,,18,,,18,18,18,18,18,18', '18,18,18,18,,18,18,18,18,18,,,,,,,,,,,,,,,,,,,,18,,,18,,,18,18,,,18', ',,,,,18,,,,,,,,18,,,,,18,18,18,18,18,18,,,,18,18,22,22,22,,22,,,,22', '22,,,,22,,22,22,22,22,22,22,22,,,,,22,22,22,22,22,22,22,,,,,,,,,,22', ',,22,22,22,22,22,22,22,22,22,22,,22,22,22,22,22,,,,,,,,,,,,,,,,,,,,22', ',,22,,,22,22,,,22,,22,,22,,22,,,,,,,,22,,,,,22,22,22,22,22,22,,,,22', '22,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,24,24,24,,24,,,,24,24,,,,24,,24,24,24,24,24', '24,24,,,,,24,24,24,24,24,24,24,,,,,,,,,,24,,,24,24,24,24,24,24,24,24', '24,24,,24,24,24,24,24,,,,,,,,,,,,,,,,,,,,24,,,24,,,24,24,,,24,,24,,24', ',24,,,,,,,,24,,,,,24,24,24,24,24,24,,,,24,24,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,27', '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,,28,28,28,28,28,,', ',,,,,,,,,,,,,,,,,28,,,28,28,,28,28,,,28,,28,,28,,28,,,,,,,,28,,,,,28', '28,28,28,28,28,,,,28,28,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,,828,828,828,828,828,828,828,828,828,828,828,,828', '828,,,828,828,31,,,31,,,31,31,,,31,,31,,828,,828,,828,828,828,828,828', '828,828,,828,,,31,31,31,31,31,31,,,,31,31,32,32,32,828,32,828,,,32,32', ',,,32,,32,32,32,32,32,32,32,,,,,32,32,32,32,32,32,32,,,,,,,,,,32,,,32', '32,32,32,32,32,32,32,32,32,,32,32,,,32,,694,694,694,694,694,694,694', '694,694,694,694,,694,694,,,694,694,32,,,32,,,32,32,,,32,,,,694,,694', ',694,694,694,694,694,694,694,,694,,,32,32,32,32,32,32,,,,32,32,38,38', '38,694,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,39,39,39,,39,,,,39,39,,,,39,,39,39,39,39,39,39,39,,,', ',39,39,39,39,39,39,39,,,,,,,,,,39,,,39,39,39,39,39,39,39,39,39,39,,39', '39,39,39,39,,,,,,,,,,,,,,,,,,,,39,,,39,,,39,39,,,39,,,,,,39,,,,,,,,39', ',,,,39,39,39,39,39,39,,,,39,39,40,40,40,,40,,,,40,40,,,,40,,40,40,40', '40,40,40,40,,,,,40,40,40,40,40,40,40,,,,,,,,,,40,,,40,40,40,40,40,40', '40,40,40,40,,40,40,40,40,40,,,,,,,,,,,,,,,,,,,,40,,,40,,,40,40,,,40', ',,,,,40,,,,,,,,40,,,,,40,40,40,40,40,40,,,,40,40,52,52,52,,52,,,,52', '52,,,,52,,52,52,52,52,52,52,52,,,,,52,52,52,52,52,52,52,,,52,,,,,,,52', ',,52,52,52,52,52,52,52,52,52,52,,52,52,52,52,52,,,,,,,,,,,,,,,,,,,,52', ',,52,,,52,52,,,52,,,,,,52,,,,,,,,52,,,,,52,52,52,52,52,52,,,,52,52,53', '53,53,,53,,,,53,53,,,,53,,53,53,53,53,53,53,53,,,,,53,53,53,53,53,53', '53,,,,,,,,,,53,,,53,53,53,53,53,53,53,53,53,53,,53,53,53,53,53,,,,,', ',,,,,,,,,,,,,,53,,,53,,,53,53,,,53,,53,,,,53,,,,,,,,53,,,,,53,53,53', '53,53,53,,,,53,53,54,54,54,,54,,,,54,54,,,,54,,54,54,54,54,54,54,54', ',,,,54,54,54,54,54,54,54,,,,,,,,,,54,,,54,54,54,54,54,54,54,54,54,54', ',54,54,54,54,54,,,,,,,,,,,,,,,,,,,,54,,,54,,,54,54,,,54,,,,,,54,,,,', ',,,54,,,,,54,54,54,54,54,54,,,,54,54,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,57,57,57,,57', ',,,57,57,,,,57,,57,57,57,57,57,57,57,,,,,57,57,57,57,57,57,57,,,57,', ',,,,,57,,,57,57,57,57,57,57,57,57,57,57,,57,57,57,57,57,,,,,,,,,,,,', ',,,,,,,57,,,57,,,57,57,,,57,,,,,,57,,,,,,,,57,,,,,57,57,57,57,57,57', ',,,57,57,61,61,61,,61,,,,61,61,,,,61,,61,61,61,61,61,61,61,,,,,61,61', '61,61,61,61,61,,,,,,,,,,61,,,61,61,61,61,61,61,61,61,61,61,,61,61,,', '61,,468,468,468,468,468,468,468,468,468,468,468,,468,468,,,468,468,61', ',,61,,,61,61,,,61,,61,,468,,468,,468,468,468,468,468,468,468,,468,,', '61,61,61,61,61,61,,,,61,61,62,62,62,468,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,,689,689,689,689,689,689,689,689,689,689,689', ',689,689,,62,689,689,62,,,62,,,62,62,,,62,,,,689,,689,,689,689,689,689', '689,689,689,,689,,,62,62,62,62,62,62,,,,62,62,63,63,63,689,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,,687,687,687,687,687,687', '687,687,687,687,687,,687,687,,,687,687,63,,,63,,,63,63,,,63,,,,687,', '687,,687,687,687,687,687,687,687,,687,,,63,63,63,63,63,63,,,,63,63,82', '82,82,687,82,,,,82,82,,,,82,,82,82,82,82,82,82,82,,82,,,82,82,82,82', '82,82,82,,,,,,,,,,82,,,82,82,82,82,82,82,82,82,82,82,,82,82,82,82,82', ',,,,,,,,,,,,,,,,,,,82,,,82,82,,82,82,,,82,,82,,82,,82,,,,,,,,82,,82', ',,82,82,82,82,82,82,,,,82,82,86,86,86,,86,,,,86,86,,,,86,,86,86,86,86', '86,86,86,,86,,,86,86,86,86,86,86,86,,,,,,,,,,86,,,86,86,86,86,86,86', '86,86,86,86,,86,86,86,86,86,,,,,,,,,,,,,,,,,,,,86,,,86,86,,86,86,,,86', ',86,,86,,86,,,,,,,,86,,86,,,86,86,86,86,86,86,,,,86,86,101,101,101,', '101,,,,101,101,,,,101,,101,101,101,101,101,101,101,,,,,101,101,101,101', '101,101,101,,,101,,,,,,,101,,,101,101,101,101,101,101,101,101,101,101', ',101,101,101,101,101,,,,,,,,,,,,,,,,,,,,101,,,101,,,101,101,,,101,,', ',,,101,,,,,,,,101,,,,,101,101,101,101,101,101,,,,101,101,102,102,102', ',102,,,,102,102,,,,102,,102,102,102,102,102,102,102,,,,,102,102,102', '102,102,102,102,,,102,,,,,,,102,,,102,102,102,102,102,102,102,102,102', '102,,102,102,102,102,102,,,,,,,,,,,,,,,,,,,,102,,,102,,,102,102,,,102', ',,,,,102,,,,,,,,102,,,,,102,102,102,102,102,102,,,,102,102,103,103,103', ',103,,,,103,103,,,,103,,103,103,103,103,103,103,103,,,,,103,103,103', '103,103,103,103,,,103,,,,,,,103,,,103,103,103,103,103,103,103,103,103', '103,,103,103,103,103,103,,,,,,,,,,,,,,,,,,,,103,,,103,,,103,103,,,103', ',,,,,103,,,,,,,,103,,,,,103,103,103,103,103,103,,,,103,103,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,105,105,105,,,,105', '105,188,188,188,,188,,,,188,188,,,,188,,188,188,188,188,188,188,188', ',,,,188,188,188,188,188,188,188,,,,,,,,,,188,,,188,188,188,188,188,188', '188,188,188,188,,188,188,188,188,188,,,,,,,,,,,,,,,,,,,,188,,,188,,', '188,188,,,188,,188,,,,188,,,,,,,,188,,,,,188,188,188,188,188,188,,,', '188,188,189,189,189,,189,,,,189,189,,,,189,,189,189,189,189,189,189', '189,,,,,189,189,189,189,189,189,189,,,,,,,,,,189,,,189,189,189,189,189', '189,189,189,189,189,,189,189,189,189,189,,,,,,,,,,,,,,,,,,,,189,,,189', ',,189,189,,,189,,189,,,,189,,,,,,,,189,,,,,189,189,189,189,189,189,', ',,189,189,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,,,,,,,,190,,,,,190,190,190,190,190,190,,,,190', '190,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,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,194,,,,194', '194,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,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', '195,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,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', '196,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,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,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,210,210,210,,210,,,,210,210,,,,210,,210,210,210,210,210,210,210', ',,,,210,210,210,210,210,210,210,,,,,,,,,,210,,,210,210,210,210,210,210', '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,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,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,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,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,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,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,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,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,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,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,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,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,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,263,269,269,269,,269,,,,269,269,,,,269,,269,269,269,269,269', '269,269,,,,,269,269,269,269,269,269,269,,,,,,,,,,269,,,269,269,269,269', '269,269,269,269,269,269,,269,269,,,269,,684,684,684,684,684,684,684', '684,684,684,684,,684,684,,,684,684,269,,,269,,,269,269,,,269,,,,684', ',684,,684,684,684,684,684,684,684,,684,,,269,269,269,269,269,269,,,', '269,269,290,290,290,684,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,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,,,,,,,,299,,,,,299,299,299,299,299,299,,,,299', '299,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,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,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,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,,,,,,,,,,,,,,357,357,,357', '357,357,357,357,357,357,357,357,,357,,,357,357,,,378,378,378,,378,,', '357,378,378,,,,378,,378,378,378,378,378,378,378,,,,,378,378,378,378', '378,378,378,,,,,,,,,,378,,,378,378,378,378,378,378,378,378,378,378,', '378,378,378,378,378,,,,,,,,,,,,,,,,,,,,378,,,378,378,,378,378,,,378', ',378,,378,,378,,,,,,,,378,,,,,378,378,378,378,378,378,,,,378,378,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', '386,386,386,,386,,,,386,386,,,,386,,386,386,386,386,386,386,386,,,,', '386,386,386,386,386,386,386,,,,,,,,,,386,,,386,386,386,386,386,386,386', '386,386,386,,386,386,386,386,386,,,,,,,,,,,,,,,,,,,,386,,,386,386,,386', '386,,,386,,386,,386,,386,,,,,,,,386,,,,,386,386,386,386,386,386,,,,386', '386,393,393,393,,393,,,,393,393,,,,393,,393,393,393,393,393,393,393', ',,,,393,393,393,393,393,393,393,,,,,,,,,,393,,,393,393,393,393,393,393', '393,393,393,393,,393,393,393,393,393,,,,,,,,,,,,,,,,,,,,393,,,393,,', '393,393,,,393,,393,,,,393,,,,,,,,393,,,,,393,393,393,393,393,393,,,', '393,393,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,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,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', '396,396,396,396,,396,396,396,396,396,,,,,,,,,,,,,,,,,,,,396,,,396,,', '396,396,,,396,,,,,,396,,,,,,,,396,,,,,396,396,396,396,396,396,,,,396', '396,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,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,426,426,,,,,,,,,,,,,,,,,,,,426,,,426,,', '426,426,,,426,,426,,426,,426,,,,,,,,426,,,,,426,426,426,426,426,426', ',,,426,426,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,,,,,428,428,428,428,428,428', ',,,428,428,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,431,431,,431,431,431,431,431,,,,,,,,,,,,,,,,,,,,431,,,431', ',,431,431,,,431,,,,,,431,,,,,,,,431,,,,,431,431,431,431,431,431,,,,431', '431,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,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,463,463,463,,463,,,,463,463,,,,463,,463,463,463,463,463,463', '463,,,,,463,463,463,463,463,463,463,,,,,,,,,,463,,,463,463,463,463,463', '463,463,463,463,463,,463,463,463,463,463,,,,,,,,,,,,,,,,,,,,463,,,463', ',,463,463,,,463,,,,,,463,,,,,,,,463,,,,,463,463,463,463,463,463,,,,463', '463,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,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,,,,464', '464,465,465,465,,465,,,,465,465,,,,465,,465,465,465,465,465,465,465', ',,,,465,465,465,465,465,465,465,,,,,,,,,,465,,,465,465,465,465,465,465', '465,465,465,465,,465,465,465,465,465,,,,,,,,,,,,,,,,,,,,465,,,465,,', '465,465,,,465,,,,,,465,,,,,,,,465,,,,,465,465,465,465,465,465,,,,465', '465,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', '469,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,471,476,476,476,,476,,,,476,476,,,,476,,476,476,476,476,476,476', '476,,,,,476,476,476,476,476,476,476,,,,,,,,,,476,,,476,476,476,476,476', '476,476,476,476,476,,476,476,476,476,476,,,,,,,,,,,,,,,,,,,,476,,,476', ',,476,476,,,476,,476,,,,476,,,,,,,,476,,,,,476,476,476,476,476,476,', ',,476,476,479,479,479,,479,,,,479,479,,,,479,,479,479,479,479,479,479', '479,,,,,479,479,479,479,479,479,479,,,,,,,,,,479,,,479,479,479,479,479', '479,479,479,479,479,,479,479,479,479,479,,,,,,,,,,,,,,,,,,,,479,,,479', ',,479,479,,,479,,,,,,479,,,,,,,,479,,,,,479,479,479,479,479,479,,,,479', '479,482,482,482,,482,,,,482,482,,,,482,,482,482,482,482,482,482,482', ',,,,482,482,482,482,482,482,482,,,,,,,,,,482,,,482,482,482,482,482,482', '482,482,482,482,,482,482,482,482,482,,,,,,,,,,,,,,,,,,,,482,,,482,,', '482,482,,,482,,,,,,482,,,,,,,,482,,,,,482,482,482,482,482,482,,,,482', '482,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,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,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,506,506,506,', ',,506,506,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,510,510,510,,510,510,510,510,510,,,,,,,,,,,,,,,,,,,,510', ',,510,,,510,510,,,510,,,,,,510,,,,,,,,510,,,,,510,510,510,510,510,510', ',,,510,510,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,534,534,534,534,534,534,534,,534,,,534,534,,,537,537,537,,537', ',,534,537,537,,,,537,,537,537,537,537,537,537,537,,,,,537,537,537,537', '537,537,537,,,,,,,,,,537,,,537,537,537,537,537,537,537,537,537,537,', '537,537,537,537,537,,,,,,,,,,,,,,,,,,,,537,,,537,,,537,537,,,537,,,', ',,537,,,,,,,,537,,,,,537,537,537,537,537,537,,,,537,537,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,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,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,549,549,549', ',549,,,,549,549,,,,549,,549,549,549,549,549,549,549,,,,,549,549,549', '549,549,549,549,,,,,,,,,,549,,,549,549,549,549,549,549,549,549,549,549', ',549,549,549,549,549,,,,,,,,,,,,,,,,,,,,549,,,549,,,549,549,,,549,,', ',,,549,,,,,,,,549,,,,,549,549,549,549,549,549,,,,549,549,556,556,556', ',556,,,,556,556,,,,556,,556,556,556,556,556,556,556,,,,,556,556,556', '556,556,556,556,,,,,,,,,,556,,,556,556,556,556,556,556,556,556,556,556', ',556,556,556,556,556,,,,,,,,,,,,,,,,,,,,556,,,556,,,556,556,,,556,,', ',,,556,,,,,,,,556,,,,,556,556,556,556,556,556,,,,556,556,557,557,557', ',557,,,,557,557,,,,557,,557,557,557,557,557,557,557,,,,,557,557,557', '557,557,557,557,,,,,,,,,,557,,,557,557,557,557,557,557,557,557,557,557', ',557,557,,,557,,,,,,,,,,,,,,,,,,,,557,,,557,,,557,557,,,557,,557,,557', ',,,,,,,,557,,,,,,557,557,557,557,557,557,,,,557,557,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,560,560,,560', '560,560,560,560,,,,,,,,,,,,,,,,,,,,560,,,560,,,560,560,,,560,,,,,,560', ',,,,,,,560,,,,,560,560,560,560,560,560,,,,560,560,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,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,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,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,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,,,,612,612,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,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,679,679,679', ',679,,,,679,679,,,,679,,679,679,679,679,679,679,679,,,,,679,679,679', '679,679,679,679,,,,,,,,,,679,,,679,679,679,679,679,679,679,679,679,679', ',679,679,679,679,679,,,,,,,,,,,,,,,,,,,,679,,,679,,,679,679,,,679,,', ',,,679,,,,,,,,679,,,,,679,679,679,679,679,679,,,,679,679,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,690,690,690', ',690,,,,690,690,,,,690,,690,690,690,690,690,690,690,,,,,690,690,690', '690,690,690,690,,,,,,,,,,690,,,690,690,690,690,690,690,690,690,690,690', ',690,690,690,690,690,,,,,,,,,,,,,,,,,,,,690,,,690,,,690,690,,,690,,', ',,,690,,,,,,,,690,,,,,690,690,690,690,690,690,,,,690,690,691,691,691', ',691,,,,691,691,,,,691,,691,691,691,691,691,691,691,,,,,691,691,691', '691,691,691,691,,,,,,,,,,691,,,691,691,691,691,691,691,691,691,691,691', ',691,691,691,691,691,,,,,,,,,,,,,,,,,,,,691,,,691,,,691,691,,,691,,', ',,,691,,,,,,,,691,,,,,691,691,691,691,691,691,,,,691,691,692,692,692', ',692,,,,692,692,,,,692,,692,692,692,692,692,692,692,,,,,692,692,692', '692,692,692,692,,,,,,,,,,692,,,692,692,692,692,692,692,692,692,692,692', ',692,692,692,692,692,,,,,,,,,,,,,,,,,,,,692,,,692,,,692,692,,,692,,', ',,,692,,,,,,,,692,,,,,692,692,692,692,692,692,,,,692,692,698,698,698', ',698,,,,698,698,,,,698,,698,698,698,698,698,698,698,,,,,698,698,698', '698,698,698,698,,,,,,,,,,698,,,698,698,698,698,698,698,698,698,698,698', ',698,698,,,698,,237,237,237,237,237,237,237,237,237,237,237,,237,237', ',,237,237,698,,,698,,,698,698,,,698,,,,237,,237,,237,237,237,237,237', '237,237,,237,,,698,698,698,698,698,698,,,,698,698,704,704,704,237,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,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,713,715,715', '715,,715,,,,715,715,,,,715,,715,715,715,715,715,715,715,,,,,715,715', '715,715,715,715,715,,,,,,,,,,715,,,715,715,715,715,715,715,715,715,715', '715,,715,715,715,715,715,,,,,,,,,,,,,,,,,,,,715,,,715,,,715,715,,,715', ',715,,715,,715,,,,,,,,715,,,,,715,715,715,715,715,715,,,,715,715,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,,682,682,682,682,682,682,682,682,682,682,682', ',682,682,,,682,682,728,,,728,,,728,728,,,728,,,,682,,682,,682,682,682', '682,682,682,682,,682,,,728,728,728,728,728,728,,,,728,728,734,734,734', '682,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,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,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,,,,,,,,759,,,,,759,759,759,759,759,759,,,,759,759,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,769,769,769', ',769,,,,769,769,,,,769,,769,769,769,769,769,769,769,,,,,769,769,769', '769,769,769,769,,,,,,,,,,769,,,769,769,769,769,769,769,769,769,769,769', ',769,769,,,769,,,,,,,,,,,,,,,,,,,,769,,,769,,,769,769,,,769,,769,,769', ',,,,,,,,,,,,,,769,769,769,769,769,769,,,,769,769,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,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,788,788,788,,788,', ',,788,788,,,,788,,788,788,788,788,788,788,788,,,,,788,788,788,788,788', '788,788,,,,,,,,,,788,,,788,788,788,788,788,788,788,788,788,788,,788', '788,788,788,788,,,,,,,,,,,,,,,,,,,,788,,,788,,,788,788,,,788,,,,,,788', ',,,,,,,788,,,,,788,788,788,788,788,788,,,,788,788,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,820,820,820,,820,', ',,820,820,,,,820,,820,820,820,820,820,820,820,,,,,820,820,820,820,820', '820,820,,,,,,,,,,820,,,820,820,820,820,820,820,820,820,820,820,,820', '820,,,820,,677,677,677,677,677,677,677,677,677,677,677,,677,677,,,677', '677,820,,,820,,,820,820,,,820,,,,677,,677,,677,677,677,677,677,677,677', ',677,,,820,820,820,820,820,820,,,,820,820,822,822,822,677,822,,,,822', '822,,,,822,,822,822,822,822,822,822,822,,,,,822,822,822,822,822,822', '822,,,,,,,,,,822,,,822,822,822,822,822,822,822,822,822,822,,822,822', '822,822,822,,,,,,,,,,,,,,,,,,,,822,,,822,,,822,822,,,822,,822,,,,822', ',,,,,,,822,,,,,822,822,822,822,822,822,,,,822,822,827,827,827,,827,', ',,827,827,,,,827,,827,827,827,827,827,827,827,,,,,827,827,827,827,827', '827,827,,,,,,,,,,827,,,827,827,827,827,827,827,827,827,827,827,,827', '827,,,827,,374,374,374,374,374,374,374,374,374,374,374,,374,374,,,374', '374,827,,,827,,,827,827,,,827,,,,374,,374,,374,374,374,374,374,374,374', ',374,,,827,827,827,827,827,827,,,,827,827,832,832,832,374,832,,,,832', '832,,,,832,,832,832,832,832,832,832,832,,,,,832,832,832,832,832,832', '832,,,,,,,,,,832,,,832,832,832,832,832,832,832,832,832,832,,832,832', '832,832,832,,,,,,,,,,,,,,,,,,,,832,,,832,,,832,832,,,832,,832,,832,', '832,,,,,,,,832,,,,,832,832,832,832,832,832,,,,832,832,835,835,835,,835', ',,,835,835,,,,835,,835,835,835,835,835,835,835,,,,,835,835,835,835,835', '835,835,,,,,,,,,,835,,,835,835,835,835,835,835,835,835,835,835,,835', '835,835,835,835,,,,,,,,,,,,,,,,,,,,835,,,835,,,835,835,,,835,,835,,835', ',835,,,,,,,,835,,,,,835,835,835,835,835,835,,,,835,835,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,,767,767,767,767,767,767,767,767,767,767,767,,767,767', ',,767,767,861,,,861,,,861,861,,,861,,,,767,,767,,767,767,767,767,767', '767,767,,767,,,861,861,861,861,861,861,,,,861,861,864,864,864,767,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,864,864,864,864,,,,864,864,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,875,875,875,,875,', ',,875,875,,,,875,,875,875,875,875,875,875,875,,,,,875,875,875,875,875', '875,875,,,,,,,,,,875,,,875,875,875,875,875,875,875,875,875,875,,875', '875,,,875,,388,388,388,388,388,388,388,388,388,388,388,,388,388,,,388', '388,875,,,875,,,875,875,,,875,,,,388,,388,,388,388,388,388,388,388,388', ',388,,,875,875,875,875,875,875,,,,875,875,880,880,880,388,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,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,,600,600,600,600,600,600,600,600,600,600,600,,600,600,,,600', '600,886,,,886,,,886,886,,,886,,,,600,,600,,600,600,600,600,600,600,600', ',600,,,886,886,886,886,886,886,,,,886,886,889,889,889,600,889,,,,889', '889,,,,889,,889,889,889,889,889,889,889,,,,,889,889,889,889,889,889', '889,,,,,,,,,,889,,,889,889,889,889,889,889,889,889,889,889,,889,889', '889,889,889,,,,,,,,,,,,,,,,,,,,889,,,889,,,889,889,,,889,,,,,,889,,', ',,,,,889,,,,,889,889,889,889,889,889,,,,889,889,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,64,64,,64,64,,,64,,,,,64,64,64,64,,,,,,64,,,,,,,,64,64,,64,64', '64,64,64,64,64,64,64,,64,,,64,664,664,664,664,664,664,664,664,664,664', '664,664,664,664,664,664,664,664,664,664,664,664,664,664,,,664,664,664', '664,664,664,664,664,664,664,,,,,,664,664,664,664,664,664,664,664,,,664', ',,,,,,664,664,,664,664,664,664,,664,664,,,664,,,,,664,664,664,664,,', ',,,,,,,,,,,664,664,,664,664,664,664,664,664,664,664,664,,664,,,664,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,,,,,,,,,,,,,,,,,581', ',581,423,423,423,423,423,423,423,423,423,423,423,,423,423,,,423,423', ',,,,,,,,,,,,,,423,,423,,423,423,423,423,423,423,423,,423,,,,,,,,391', '391,,,391,,,,,423,423,391,391,,391,391,391,391,,391,391,,,391,,,,,391', '391,391,391,,,,,,,,,,,,,,391,391,,391,391,391,391,391,391,391,391,391', ',391,499,499,391,,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,505,505,499,,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,507,507,505,,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,466,466,507,,466,,,,,,,466,466,,466,466', '466,466,,466,466,,,466,,,,,466,466,466,466,,,,,,,,,,,,,,466,466,,466', '466,466,466,466,466,466,466,466,,466,467,467,466,,467,,,,,,,467,467', ',467,467,467,467,,467,467,,,467,,,,,467,467,467,467,,,,,,,,,,,,,,467', '467,,467,467,467,467,467,467,467,467,467,,467,,,467,731,731,731,731', '731,731,731,731,731,731,731,,731,731,,,731,731,,,,,,,,,,,,,,,731,,731', ',731,731,731,731,731,731,731,,731,,,,,,,251,251,,,251,,,,,731,731,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,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,192,192', '252,,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,823', '823,192,,823,,,,,,,823,823,,823,823,823,823,,823,823,,,823,,,,,823,823', '823,823,,,,,,,,,,,,,,823,823,,823,823,823,823,823,823,823,823,823,,823', '458,458,823,,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,824,824,458,,824,,,,,,,824,824,,824,824,824,824,,824,824,,,824', ',,,,824,824,824,824,,,,,,,,,,,,,,824,824,,824,824,824,824,824,824,824', '824,824,,824,457,457,824,,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,498,498,457,,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,392,392,498,,392,,,,,,,392,392,,392,392', '392,392,,392,392,,,392,,,,,392,392,392,392,,,,,,,,,,,,,,392,392,,392', '392,392,392,392,392,392,392,392,,392,578,578,392,,578,,,,,,,578,578', ',578,578,578,578,,578,578,,,578,,,,,578,578,578,578,,,,,,,,,,,,,,578', '578,,578,578,578,578,578,578,578,578,578,,578,193,193,578,,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,579,579,193', ',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', '480,480,480,480,480,480,480,480,480,480,480,,480,480,,,480,480,,,,,', ',,,,,,,,,480,,480,,480,480,480,480,480,480,480,,480,,19,19,19,19,19', '19,19,19,19,19,19,,19,19,480,480,19,19,,,,,,,,,,,,,,,19,,19,,19,19,19', '19,19,19,19,,19,,,,,,,,,,,,,,,,,19' ] racc_action_check = arr = ::Array.new(24171, 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 = [ 2575, 903, nil, 166, 877, 4872, 4992, 5112, 565, 497, 857, 839, 880, 409, 220, 244, nil, 5224, 5344, 24046, 832, nil, 5464, 5584, 5704, 343, 158, 5824, 5944, nil, 1244, 6064, 6184, nil, 636, 297, 684, 315, 6304, 6424, 6544, 552, 420, nil, nil, nil, nil, nil, nil, nil, 288, 3180, 6664, 6784, 6904, 53, 7024, 7144, nil, nil, 750, 7264, 7384, 7504, 22608, nil, nil, nil, nil, nil, -94, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 7624, nil, nil, nil, 7744, nil, nil, nil, nil, nil, nil, nil, nil, 620, nil, 877, nil, nil, nil, 7864, 7984, 8104, 8224, 8344, 994, nil, 416, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 110, nil, 1849, 1970, 8464, 8584, 8704, 8824, 23421, 23893, 8944, 9064, 9184, nil, 794, 111, 924, 70, 756, 806, 3059, nil, nil, 9304, 9424, 9544, 9664, 9784, 9904, 10024, 10144, 10264, 10384, 10504, 10624, 10744, 10864, 10984, 11104, 11224, 11344, 11464, 11584, 11704, 11824, 11944, 12064, 12184, 12304, 12424, nil, nil, nil, 19489, nil, 838, 841, 12544, nil, 12664, 886, nil, nil, nil, nil, nil, nil, 23303, 23362, 879, 12784, 12904, nil, nil, nil, nil, nil, nil, nil, 13024, 887, 2938, 895, 897, 859, 13144, 2817, 434, 619, 934, 621, 908, 872, 137, nil, 910, 380, nil, nil, 193, 939, 941, 627, nil, 943, nil, 13264, nil, 1003, 1002, 551, nil, 914, 327, 429, 13384, 948, 411, 931, 400, nil, 565, -7, 10, 13504, 13624, 216, 149, 914, 1, 674, 990, -18, 1030, nil, nil, 371, 374, -20, nil, 753, nil, 9, 13744, nil, nil, 211, 203, -23, -44, -47, 267, 493, 392, nil, 344, nil, 13864, nil, 199, 189, -33, 145, -37, 215, nil, 913, nil, nil, nil, nil, nil, nil, 13984, nil, nil, nil, nil, -56, -21, nil, nil, 750, nil, -30, 4752, nil, 62, nil, nil, 21409, 113, 317, -72, 14096, nil, nil, 106, 131, 0, nil, 14216, 14336, nil, 22129, nil, nil, 22895, 23775, 14456, 114, 14576, 14696, 14816, 1607, 2091, 572, 490, 204, 218, 227, 246, 2817, 2938, 3059, 2575, 2454, 1849, 2696, 2212, 1244, 1365, 1486, 1728, 1970, 396, 482, 2333, 997, 22829, 220, nil, 14936, nil, 15056, 256, nil, 15176, 212, nil, nil, 394, nil, nil, 332, 298, -62, 325, 429, nil, nil, 15296, 95, 170, 413, nil, 422, 392, nil, nil, nil, 459, 15416, 23657, 23539, 866, 470, nil, nil, 15536, 15656, 15776, 23131, 23190, 7265, 15896, 583, 16016, nil, 484, nil, nil, 16136, nil, nil, 16256, 24000, nil, 16376, nil, nil, nil, 4632, 615, nil, nil, 4269, 67, 114, 612, 620, 4148, 16496, 16616, 23716, 22954, 26, nil, nil, 373, nil, 23013, 16736, 23072, nil, nil, 16856, 314, -34, 3543, 927, nil, nil, nil, -32, nil, nil, nil, 524, nil, nil, nil, 520, nil, 141, nil, nil, 516, nil, nil, 16976, nil, nil, 17088, 17208, nil, 315, 17328, 17448, 575, nil, nil, 17568, 577, nil, 17688, -37, -31, 630, 510, 585, 1118, 17808, 17928, nil, 2212, 18048, 571, nil, 620, 18168, nil, 622, nil, 611, nil, nil, nil, nil, nil, -50, nil, 623, 633, 23834, 23952, 18288, 22765, 143, 599, 18408, nil, 648, nil, 2091, 1728, nil, -70, nil, 647, 38, 144, 654, 341, 860, 661, 22369, 686, 694, 24, 750, nil, 1607, 637, 701, nil, nil, 699, 18528, nil, nil, 18, nil, 774, nil, nil, nil, nil, nil, 780, nil, 781, 665, 11, 18648, 704, 23, 4, 24, -9, 18768, 257, 529, nil, 716, 4027, 248, nil, nil, 819, 3906, 560, 222, 707, 710, 711, nil, nil, nil, nil, nil, 712, nil, nil, nil, nil, 795, nil, nil, 797, 22717, 771, nil, nil, nil, nil, nil, 3422, nil, nil, nil, nil, nil, 21169, 734, 18888, 19008, nil, 19969, nil, 13145, nil, nil, 7505, nil, 7385, 19128, 19248, 19368, 191, 6185, nil, 751, 1118, 19488, nil, 785, 882, 775, nil, 19608, 778, 2454, nil, nil, 826, 827, 110, 915, 19728, nil, 19848, 819, nil, 861, 840, 948, 388, nil, nil, 2333, nil, nil, 32, 19968, nil, nil, 23238, 951, nil, 20088, 952, 1486, 1365, nil, nil, 20208, 4511, nil, 25, 132, nil, 964, nil, 4390, nil, 1000, 915, nil, 453, nil, 216, nil, nil, 439, 20328, nil, nil, nil, nil, 758, nil, nil, 21769, 20448, 20568, 750, 812, 208, 296, 210, 246, nil, nil, nil, nil, 20688, nil, 367, 464, 447, nil, 20808, 465, 20928, nil, nil, nil, nil, nil, 3785, nil, nil, nil, 31, nil, 608, 609, 21048, 202, nil, nil, 628, nil, 551, 518, 520, nil, nil, 539, 537, nil, nil, 680, nil, nil, 21168, 997, 21288, 23480, 23598, 649, 625, 21408, 6065, nil, nil, nil, 21528, 670, nil, 21648, 743, 865, 3664, nil, nil, nil, nil, nil, nil, 3301, nil, nil, 391, nil, nil, nil, 2696, nil, 817, 848, 867, 384, 197, 403, 613, 21768, nil, nil, 21888, 462, nil, 22008, nil, nil, 391, 660, 570, 718, 697, 22128, 624, nil, 258, nil, 22248, -81, nil, nil, nil, nil, 22368, nil, nil, 22488, nil, nil, 468, nil ] racc_action_default = [ -4, -497, -1, -485, -5, -497, -497, -497, -497, -497, -497, -497, -497, -497, -271, -32, -33, -497, -497, -38, -40, -41, -282, -315, -316, -45, -249, -361, -285, -58, -4, -62, -67, -68, -497, -428, -497, -497, -497, -497, -497, -487, -214, -264, -265, -266, -267, -268, -269, -270, -475, -4, -497, -496, -467, -288, -497, -497, -292, -295, -485, -497, -497, -497, -497, -317, -318, -381, -382, -383, -384, -385, -399, -388, -401, -401, -392, -397, -411, -401, -413, -414, -417, -418, -419, -420, -421, -422, -423, -424, -425, -426, -427, -430, -431, -497, -3, -486, -492, -493, -494, -497, -497, -497, -497, -497, -6, -8, -497, -93, -94, -95, -96, -97, -98, -99, -100, -101, -105, -106, -107, -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, -13, -102, -4, -4, -497, -497, -497, -496, -497, -497, -497, -497, -497, -36, -497, -428, -497, -271, -497, -497, -4, -37, -206, -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, -351, -353, -42, -215, -228, -258, -258, -497, -236, -497, -259, -282, -315, -316, -470, -43, -44, -497, -497, -50, -496, -497, -287, -356, -362, -364, -56, -360, -57, -497, -58, -4, -497, -497, -63, -65, -4, -72, -497, -497, -79, -285, -487, -497, -319, -361, -497, -66, -70, -278, -415, -416, -497, -191, -192, -207, -497, -488, -373, -497, -274, -216, -487, -489, -489, -497, -497, -489, -497, -489, -289, -39, -497, -497, -497, -497, -485, -497, -486, -428, -497, -497, -271, -497, -331, -332, -88, -89, -497, -91, -497, -271, -497, -497, -428, -308, -93, -94, -131, -132, -148, -153, -160, -163, -310, -497, -465, -497, -386, -497, -497, -497, -497, -497, -497, 894, -7, -495, -14, -15, -16, -17, -18, -497, -10, -11, -12, -103, -497, -497, -21, -29, -171, -259, -497, -497, -22, -30, -31, -23, -173, -497, -476, -477, -226, -478, -479, -476, -249, -477, -359, -481, -482, -28, -180, -34, -35, -497, -497, -496, -278, -497, -497, -497, -181, -182, -183, -184, -185, -186, -187, -188, -193, -194, -195, -196, -197, -198, -199, -200, -201, -202, -203, -204, -205, -208, -209, -210, -211, -497, -347, -229, -497, -231, -497, -258, -256, -497, -249, -476, -477, -249, -48, -51, -497, -487, -487, -258, -228, -250, -251, -252, -347, -347, -497, -284, -497, -59, -276, -71, -64, -497, -496, -497, -497, -78, -497, -415, -416, -497, -497, -497, -497, -497, -212, -497, -496, -496, -273, -487, -217, -218, -491, -490, -220, -491, -487, -280, -491, -469, -281, -468, -4, -320, -321, -322, -4, -497, -497, -497, -497, -4, -497, -496, -497, -497, -278, -301, -88, -89, -90, -497, -496, -497, -304, -432, -497, -497, -497, -4, -445, -312, -483, -484, -487, -387, -400, -403, -497, -405, -389, -402, -497, -391, -497, -394, -396, -497, -412, -9, -497, -19, -20, -497, -497, -263, -279, -497, -497, -52, -227, -357, -497, -54, -358, -497, -476, -477, -480, -277, -497, -171, -497, -497, -349, -4, -497, -258, -257, -260, -497, -471, -497, -235, -497, -472, -46, -354, -47, -355, -347, -222, -497, -497, -497, -497, -497, -38, -497, -258, -497, -248, -497, -254, -4, -4, -283, -59, -69, -497, -476, -477, -226, -75, -77, -497, -179, -189, -190, -497, -496, -329, -4, -374, -496, -375, -376, -497, -497, -260, -221, -496, -323, -496, -293, -324, -325, -326, -296, -497, -299, -497, -367, -497, -497, -497, -476, -477, -480, -277, -497, -88, -89, -92, -497, -4, -497, -434, -306, -497, -4, -445, -497, -464, -464, -464, -444, -446, -447, -448, -449, -450, -451, -454, -456, -457, -459, -460, -461, -497, -497, -497, -404, -407, -408, -409, -410, -4, -390, -393, -395, -398, -104, -172, -261, -497, -497, -25, -175, -26, -176, -53, -27, -177, -55, -178, -497, -497, -497, -279, -213, -333, -335, -345, -497, -348, -497, -497, -258, -233, -497, -258, -4, -223, -224, -226, -226, -487, -497, -497, -241, -497, -258, -253, -497, -497, -497, -73, -286, -2, -4, -380, -330, -497, -497, -378, -275, -487, -497, -327, -497, -497, -4, -4, -298, -300, -497, -4, -369, -279, -497, -279, -497, -433, -4, -309, -497, -487, -436, -497, -440, -497, -442, -443, -497, -497, -458, -462, -313, -466, -497, -262, -24, -174, -497, -336, -80, -497, -497, -87, -344, -497, -346, -350, -352, -230, -497, -232, -497, -497, -258, -238, -497, -258, -497, -247, -255, -363, -365, -379, -4, -377, -219, -290, -497, -291, -497, -497, -497, -496, -302, -305, -497, -311, -497, -464, -464, -452, -463, -464, -497, -455, -453, -445, -406, -334, -497, -341, -496, -497, -497, -86, -497, -497, -258, -49, -225, -237, -497, -258, -243, -497, -258, -373, -4, -294, -297, -368, -366, -370, -371, -4, -307, -435, -497, -438, -439, -441, -4, -337, -340, -497, -497, -82, -84, -83, -85, -497, -343, -234, -497, -258, -239, -497, -242, -372, -496, -497, -464, -497, -497, -497, -81, -342, -258, -244, -497, -258, -328, -303, -437, -314, -497, -339, -240, -497, -245, -338, -258, -246 ] clist = [ '35,300,306,307,268,35,310,338,494,470,440,278,278,107,185,10,96,650', '117,117,10,565,293,437,115,115,644,240,240,240,35,271,271,112,112,604', '100,732,257,261,205,278,278,278,281,10,504,352,353,354,355,35,365,372', '238,238,238,618,622,303,438,313,328,328,328,106,10,266,242,242,242,264', '565,311,571,309,318,573,754,756,757,559,810,815,813,296,520,737,197', '529,634,112,845,100,486,490,639,35,236,249,250,344,345,588,589,35,348', '475,478,326,329,483,10,485,748,513,514,239,239,239,10,290,664,294,817', '378,382,305,305,696,700,305,424,446,447,627,842,427,608,375,727,342', '343,346,528,347,666,671,650,301,751,809,811,723,574,534,1,350,357,319', '184,587,443,586,718,356,253,260,262,340,302,304,305,305,305,305,815', '872,97,317,508,339,735,515,432,435,35,35,473,308,623,736,,,,,,,,,,10', '10,,35,,,,,,364,370,373,,,,387,,,10,386,,,296,,,,,,637,,706,,,,,,,,', '849,850,,,851,,,,,278,,,,,491,492,,,,240,240,,,,,35,389,390,240,271', '35,674,,,,,605,610,,,10,454,,368,368,10,442,238,,257,,261,882,,,238', ',565,,,242,242,450,884,,,264,455,565,242,804,264,,685,,,,688,,,650,', ',493,378,382,567,,,852,439,444,,,,609,711,,,448,,554,,100,,,,,,441,239', '571,573,,,,460,,239,509,,,,,533,,,,843,117,,,,,,115,474,,,305,305,,', ',112,,,,,,,599,2,,548,,,,512,,599,,,,593,,,,,,725,,518,,729,741,,,,386', ',605,267,605,,296,,,565,,,561,599,,,,,,599,,,,,,,629,13,,,,583,13,,', '638,,640,,703,,,,,198,198,,,,198,198,198,,,565,,,13,272,272,,714,,,', '643,386,35,,296,,35,585,,,386,35,,13,198,198,844,10,198,198,,10,198', '314,324,324,10,709,710,35,,794,294,,543,576,577,,547,,619,619,386,,10', '296,695,,386,,,,,278,296,,603,676,,13,641,642,117,198,198,198,198,13', '115,611,869,,,271,,35,614,112,,681,683,,368,,686,,,,570,,10,572,,,362', '363,744,305,,,,561,838,,35,35,,626,,,,,267,,665,779,,,781,10,10,,35', '762,,605,746,548,712,789,,750,,,,,,10,,,,,,,,,,,13,13,198,198,198,198', ',35,198,198,198,,35,,,,,,13,,,,10,,,267,,10,,,267,,,,,,,,,35,,747,,', '605,278,278,752,798,831,,,834,,10,,,,,112,,,,,,770,770,,198,198,766', ',,305,35,,278,198,,13,774,776,,272,13,,787,806,,10,,,35,863,,,770,,866', ',,868,,,35,35,,10,,35,819,795,,,,,35,278,,10,10,,198,198,10,599,,785', ',,879,10,,,,14,,271,856,,14,198,,888,,619,890,,,,,,,,,198,,893,,783', ',,35,,,14,274,274,278,278,,,,305,,278,784,10,,796,,,,,,,14,,770,770', ',873,,,,770,316,325,325,808,,,,853,854,865,35,198,,278,862,,,35,,,,', ',386,35,10,296,278,,,,,10,770,,,14,,278,10,,,,,14,,,770,877,,615,,,', '617,,,,770,625,,,887,198,,,,,,,,,,891,198,,,,,,,,,,,,,198,,,,,,,,,,', ',,,,,,13,,,,13,,,,,13,,198,,,,,,,,701,198,14,14,,198,,,13,,,,,,,,,,', ',14,,,,,,,,,719,720,,,,,,198,198,,,,198,,,,,,726,,,,,272,,13,,,,,,,', ',,,,,,,,,,,,,198,,,,,,14,,13,13,274,14,,,,,,,,,,,,,,,13,,,,,,,,,,,764', ',,,,,,,,,,,,,,,,198,,,,,13,,,,,13,,,,,,,,782,,,,,,,,,,,,,,,,,,793,13', ',,,,,,,,198,,800,801,,,,803,,,,,,,,,,771,771,,,,,,,,13,,,,,,,,,,,,,', ',,,,13,,,,771,,,,,,198,,13,13,,,837,13,,,,,,,13,,,,,,,,,,,,,,,,,,,,', '272,,,,,,,,,,,,,,,870,,,,,,,871,,,13,,,,,,,,,,,,,14,,,,14,,,,,14,,,', '771,771,198,,,,,771,,,,,,,14,,,,13,,,,12,670,,13,,12,,,,,13,,,,,,,,', '771,,,,,,,,,,,12,,,771,,,274,,14,,,,,,771,,,,,,,12,,,,,,,,,,,,,,,,14', '14,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,12,,,,,,,,12,,,,,,,,,,,,,14,,,,,14', ',,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,,,,,,,,,,,,,,773,773,,,,,,', ',14,12,12,206,,,,237,237,237,,,,,,,,,14,12,,,773,287,288,289,,,,,14', '14,,,,14,,,237,237,,,14,,,,,,,,,,,,,,,,,,,,,274,,,,,,,,,,,,,,,,,12,', ',,,12,,,14,,,,,,,,,,,,,,,,,,,,,,,,,,773,773,,,,,,773,,,,,,,,,,,14,,', ',,,,14,,,,,,,14,,,,,,,,,773,,,,,,,,,,,,,,773,,,,366,237,374,237,,,388', '773,,,,,,,,,,,,206,398,399,400,401,402,403,404,405,406,407,408,409,410', '411,412,413,414,415,416,417,418,419,420,421,422,423,,,,,,,,237,,237', ',,,,,,,,,,237,237,,,,,,,,237,,,,,,,,,,,,,,,,,,,,,,,,,,,468,,,,,,,,,480', ',,,,,,,,,,,,,,,,12,,,,12,,,,,12,,,,,,,,,,,,,,,,,,12,,,,,,,,,,,,,,,,', ',,,,,,,,,237,367,371,,,,,,,,,,,,,,,,,,12,,,,237,,388,555,374,,,,,,,', ',,,,,,,,,,,,,12,12,,,,429,,430,237,,237,,,237,,,,,12,,,,,,,,,581,,,', ',,,,,,,237,,,,,,,600,601,602,,,,12,,237,,,12,,237,,,237,,,237,,,,,,', ',,,,,,,237,237,,,,12,,,,,237,,,,,,,,,,,,,,,,,,,,,,,,,,,,,26,12,677,237', ',26,682,684,,,,687,,,689,,539,26,26,12,,694,26,26,26,237,,,,237,26,12', '12,,,,12,,,,,,,12,,237,,,,237,,26,26,26,,,26,26,,,26,,,,,,,,,,,,,563', ',566,,731,569,,,,,,,,,,,12,,,582,237,,,,26,,,,26,26,26,26,26,,,,,,,', ',,,,,607,,,,,613,,,566,,,613,,,,12,,,,,,,12,,,367,237,767,,12,,,,,,', ',682,684,687,,,,,,,,,,,,237,,,,,,,,,237,,237,,,,,678,26,26,26,26,26', '26,,,26,26,26,,,,,,,,26,237,,702,,,,705,,,,,,,,,,,,,237,,,563,,,,716', ',767,,,,,,,,,,,,828,,,,,,237,,237,26,26,,,,,,,,26,,26,,237,,,26,,,,', '742,,,,,,,,,,,,237,,,,,,,,,,237,,,237,,,,,,,,26,26,,,,,,,,,,,,,,,,,765', '26,,237,,,237,,,,,,,,,26,,,,237,,,,,,566,,,237,,,,,,,,566,,,,,,,,,,', ',,,,,,,,,,,,,,613,,,,,,26,,,,,,,,,,,,,816,,,,,,,,,,,,,,,,,,,,,,,,,,', '833,,836,,,,,,,,,,26,,,,841,,,,,,,26,,,,,,,,,,,,,26,,,,,,,,,,563,,,566', ',,,26,,,,26,,,,,26,,26,,,,,,,,,26,,,,26,878,,26,881,,,,,,,,,,,,,566', ',,,,,,,,892,,,,,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' ] racc_goto_table = arr = ::Array.new(2846, 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 = [ '41,19,13,13,39,41,13,44,79,4,29,52,52,11,11,14,8,126,49,49,14,131,3', '32,48,48,83,56,56,56,41,41,41,45,45,5,82,77,57,57,15,52,52,52,40,14', '42,13,13,13,13,41,21,21,26,26,26,78,78,56,53,41,41,41,41,9,14,37,60', '60,60,36,131,8,58,89,14,58,125,125,125,33,124,128,124,26,117,90,23,117', '91,45,92,82,76,76,93,41,28,28,28,114,114,33,33,41,114,55,55,43,43,55', '14,55,94,95,96,54,54,54,14,51,97,23,98,30,30,23,23,99,100,23,102,104', '105,106,107,59,108,19,109,112,113,115,116,118,119,120,126,54,121,123', '127,6,34,50,1,9,24,16,12,61,62,64,65,9,31,31,31,72,73,74,23,23,23,23', '128,124,10,80,81,84,5,85,30,30,41,41,86,87,79,88,,,,,,,,,,14,14,,41', ',,,,,15,15,15,,,,15,,,14,45,,,26,,,,,,42,,33,,,,,,,,,125,125,,,125,', ',,,52,,,,,13,13,,,,56,56,,,,,41,23,23,56,41,41,117,,,,,53,53,,,14,40', ',54,54,14,26,26,,57,,57,77,,,26,,131,,,60,60,37,125,,,36,37,131,60,78', '36,,32,,,,32,,,126,,,8,30,30,59,,,83,28,28,,,,21,29,,,28,,19,,82,,,', ',,54,54,58,58,,,,51,,54,82,,,,,11,,,,5,49,,,,,,48,51,,,23,23,,,,45,', ',,,,,30,2,,57,,,,23,,30,,,,19,,,,,,53,,23,,53,76,,,,45,,53,2,53,,26', ',,131,,,56,30,,,,,,30,,,,,,,19,18,,,,56,18,,,19,,13,,59,,,,,18,18,,', ',18,18,18,,,131,,,18,18,18,,59,,,,3,45,41,,26,,41,60,,,45,41,,18,18', '18,79,14,18,18,,14,18,18,18,18,14,30,30,41,,76,23,,31,51,51,,31,,82', '82,45,,14,26,39,,45,,,,,52,26,,23,11,,18,82,82,49,18,18,18,18,18,48', '51,4,,,41,,41,51,45,,15,15,,54,,15,,,,31,,14,31,,,2,2,13,23,,,,56,76', ',41,41,,54,,,,,2,,51,59,,,59,14,14,,41,44,,53,3,57,26,59,,3,,,,,,14', ',,,,,,,,,,18,18,18,18,18,18,,41,18,18,18,,41,,,,,,18,,,,14,,,2,,14,', ',2,,,,,,,,,41,,82,,,53,52,52,82,13,59,,,59,,14,,,,,45,,,,,,41,41,,18', '18,15,,,23,41,,52,18,,18,14,14,,18,18,,56,3,,14,,,41,59,,,41,,59,,,59', ',,41,41,,14,,41,39,14,,,,,41,52,,14,14,,18,18,14,30,,60,,,59,14,,,,20', ',41,19,,20,18,,59,,82,59,,,,,,,,,18,,59,,51,,,41,,,20,20,20,52,52,,', ',23,,52,54,14,,51,,,,,,,20,,41,41,,3,,,,41,20,20,20,51,,,,14,14,56,41', '18,,52,14,,,41,,,,,,45,41,14,26,52,,,,,14,41,,,20,,52,14,,,,,20,,,41', '14,,2,,,,2,,,,41,2,,,14,18,,,,,,,,,,14,18,,,,,,,,,,,,,18,,,,,,,,,,,', ',,,,,18,,,,18,,,,,18,,18,,,,,,,,2,18,20,20,,18,,,18,,,,,,,,,,,,20,,', ',,,,,,2,2,,,,,,18,18,,,,18,,,,,,2,,,,,18,,18,,,,,,,,,,,,,,,,,,,,,18', ',,,,,20,,18,18,20,20,,,,,,,,,,,,,,,18,,,,,,,,,,,2,,,,,,,,,,,,,,,,,18', ',,,,18,,,,,18,,,,,,,,2,,,,,,,,,,,,,,,,,,2,18,,,,,,,,,18,,2,2,,,,2,,', ',,,,,,,18,18,,,,,,,,18,,,,,,,,,,,,,,,,,,18,,,,18,,,,,,18,,18,18,,,2', '18,,,,,,,18,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,2,,,,,,,2,,,18,,,,', ',,,,,,,,20,,,,20,,,,,20,,,,18,18,18,,,,,18,,,,,,,20,,,,18,,,,17,20,', '18,,17,,,,,18,,,,,,,,,18,,,,,,,,,,,17,,,18,,,20,,20,,,,,,18,,,,,,,17', ',,,,,,,,,,,,,,,20,20,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,17,,,,,,,,17,,,,', ',,,,,,,,20,,,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,,,,,,,,,', ',,,,20,20,,,,,,,,20,17,17,25,,,,25,25,25,,,,,,,,,20,17,,,20,25,25,25', ',,,,20,20,,,,20,,,25,25,,,20,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,,,,', '17,,,,,17,,,20,,,,,,,,,,,,,,,,,,,,,,,,,,20,20,,,,,,20,,,,,,,,,,,20,', ',,,,,20,,,,,,,20,,,,,,,,,20,,,,,,,,,,,,,,20,,,,25,25,25,25,,,25,20,', ',,,,,,,,,,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,,,,,,,,,,,,,,,,,17,,,,17,,,,,17,,,', ',,,,,,,,,,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,25,22,22,,,,,,,,,,,,,,,,,', '17,,,,25,,25,25,25,,,,,,,,,,,,,,,,,,,,,17,17,,,,22,,22,25,,25,,,25,', ',,,17,,,,,,,,,25,,,,,,,,,,,25,,,,,,,25,25,25,,,,17,,25,,,17,,25,,,25', ',,25,,,,,,,,,,,,,,25,25,,,,17,,,,,25,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', '17,25,25,,35,25,25,,,,25,,,25,,22,35,35,17,,25,35,35,35,25,,,,25,35', '17,17,,,,17,,,,,,,17,,25,,,,25,,35,35,35,,,35,35,,,35,,,,,,,,,,,,,22', ',22,,25,22,,,,,,,,,,,17,,,22,25,,,,35,,,,35,35,35,35,35,,,,,,,,,,,,', '22,,,,,22,,,22,,,22,,,,17,,,,,,,17,,,22,25,25,,17,,,,,,,,25,25,25,,', ',,,,,,,,,25,,,,,,,,,25,,25,,,,,22,35,35,35,35,35,35,,,35,35,35,,,,,', ',,35,25,,22,,,,22,,,,,,,,,,,,,25,,,22,,,,22,,25,,,,,,,,,,,,25,,,,,,25', ',25,35,35,,,,,,,,35,,35,,25,,,35,,,,,22,,,,,,,,,,,,25,,,,,,,,,,25,,', '25,,,,,,,,35,35,,,,,,,,,,,,,,,,,22,35,,25,,,25,,,,,,,,,35,,,,25,,,,', ',22,,,25,,,,,,,,22,,,,,,,,,,,,,,,,,,,,,,,,,22,,,,,,35,,,,,,,,,,,,,22', ',,,,,,,,,,,,,,,,,,,,,,,,,,22,,22,,,,,,,,,,35,,,,22,,,,,,,35,,,,,,,,', ',,,,35,,,,,,,,,,22,,,22,,,,35,,,,35,,,,,35,,35,,,,,,,,,35,,,,35,22,', '35,22,,,,,,,,,,,,,22,,,,,,,,,22,,,,,35,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(2846, 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, 156, 392, -29, -283, -435, -451, nil, 13, 60, 175, 7, 153, -54, 15, 22, 98, 1288, 446, -52, 767, -136, 1640, 71, 51, 1458, 32, nil, 76, -244, -67, 140, -230, -343, -282, 1993, 41, 37, nil, -27, 12, 0, -276, 47, -57, 27, nil, nil, 18, 12, -206, 80, -20, -194, 95, -190, 5, 12, -358, -103, 46, -284, -93, nil, -282, -423, nil, nil, nil, nil, nil, nil, 105, 116, 116, nil, -212, -578, -434, -303, 118, -146, 33, -488, 117, -156, -106, 131, -427, 16, -535, -411, -712, -412, -528, -214, -222, -393, -638, -428, -427, nil, -102, nil, -125, -125, -361, -667, -333, -468, nil, nil, 71, 70, 27, 67, -202, -257, 68, -376, -376, -495, nil, -602, -671, -569, -497, -601, -672, nil, nil, -407 ] racc_goto_default = [ nil, nil, 292, nil, nil, 733, nil, 3, nil, 4, 312, nil, nil, nil, 202, 16, 11, 203, 286, nil, 201, nil, 244, 15, nil, 19, 20, 21, nil, 25, 596, nil, nil, nil, nil, 277, 29, nil, 31, 34, 33, 199, 323, nil, 114, 380, 113, 116, 68, 69, nil, nil, 42, 295, 297, nil, 298, 544, 545, 425, 562, nil, nil, 255, nil, nil, 43, 44, 45, 46, 47, 48, 49, nil, 256, 55, nil, nil, nil, nil, nil, nil, 487, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, 384, nil, nil, nil, nil, nil, nil, 67, 70, 71, nil, nil, nil, nil, 525, nil, nil, nil, 646, 647, 648, 649, nil, 812, 656, 657, 660, 663, 248 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 132, :_reduce_1, 4, 134, :_reduce_2, 2, 133, :_reduce_3, 0, 138, :_reduce_4, 1, 138, :_reduce_5, 2, 138, :_reduce_6, 3, 138, :_reduce_7, 0, 155, :_reduce_8, 4, 140, :_reduce_9, 3, 140, :_reduce_10, 3, 140, :_reduce_11, 3, 140, :_reduce_12, 2, 140, :_reduce_13, 3, 140, :_reduce_14, 3, 140, :_reduce_15, 3, 140, :_reduce_16, 3, 140, :_reduce_17, 3, 140, :_reduce_18, 4, 140, :_reduce_19, 4, 140, :_reduce_20, 3, 140, :_reduce_21, 3, 140, :_reduce_22, 3, 140, :_reduce_23, 6, 140, :_reduce_24, 5, 140, :_reduce_25, 5, 140, :_reduce_26, 5, 140, :_reduce_27, 3, 140, :_reduce_28, 3, 140, :_reduce_29, 3, 140, :_reduce_30, 3, 140, :_reduce_31, 1, 140, :_reduce_none, 1, 154, :_reduce_none, 3, 154, :_reduce_34, 3, 154, :_reduce_35, 2, 154, :_reduce_36, 2, 154, :_reduce_37, 1, 154, :_reduce_none, 1, 144, :_reduce_none, 1, 146, :_reduce_none, 1, 146, :_reduce_none, 2, 146, :_reduce_42, 2, 146, :_reduce_43, 2, 146, :_reduce_44, 1, 158, :_reduce_none, 4, 158, :_reduce_46, 4, 158, :_reduce_47, 0, 165, :_reduce_48, 5, 163, :_reduce_49, 2, 157, :_reduce_50, 3, 157, :_reduce_51, 4, 157, :_reduce_52, 5, 157, :_reduce_53, 4, 157, :_reduce_54, 5, 157, :_reduce_55, 2, 157, :_reduce_56, 2, 157, :_reduce_57, 1, 147, :_reduce_58, 3, 147, :_reduce_59, 1, 168, :_reduce_60, 3, 168, :_reduce_61, 1, 167, :_reduce_62, 2, 167, :_reduce_63, 3, 167, :_reduce_64, 2, 167, :_reduce_65, 2, 167, :_reduce_66, 1, 167, :_reduce_67, 1, 170, :_reduce_none, 3, 170, :_reduce_69, 2, 169, :_reduce_70, 3, 169, :_reduce_71, 1, 171, :_reduce_72, 4, 171, :_reduce_73, 3, 171, :_reduce_74, 3, 171, :_reduce_75, 3, 171, :_reduce_76, 3, 171, :_reduce_77, 2, 171, :_reduce_78, 1, 171, :_reduce_79, 1, 145, :_reduce_80, 4, 145, :_reduce_81, 3, 145, :_reduce_82, 3, 145, :_reduce_83, 3, 145, :_reduce_84, 3, 145, :_reduce_85, 2, 145, :_reduce_86, 1, 145, :_reduce_87, 1, 173, :_reduce_88, 1, 173, :_reduce_none, 2, 174, :_reduce_90, 1, 174, :_reduce_91, 3, 174, :_reduce_92, 1, 175, :_reduce_none, 1, 175, :_reduce_none, 1, 175, :_reduce_none, 1, 175, :_reduce_none, 1, 175, :_reduce_none, 1, 178, :_reduce_98, 1, 178, :_reduce_none, 1, 142, :_reduce_none, 1, 142, :_reduce_none, 1, 143, :_reduce_102, 0, 181, :_reduce_103, 4, 143, :_reduce_104, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 3, 156, :_reduce_171, 5, 156, :_reduce_172, 3, 156, :_reduce_173, 6, 156, :_reduce_174, 5, 156, :_reduce_175, 5, 156, :_reduce_176, 5, 156, :_reduce_177, 5, 156, :_reduce_178, 4, 156, :_reduce_179, 3, 156, :_reduce_180, 3, 156, :_reduce_181, 3, 156, :_reduce_182, 3, 156, :_reduce_183, 3, 156, :_reduce_184, 3, 156, :_reduce_185, 3, 156, :_reduce_186, 3, 156, :_reduce_187, 3, 156, :_reduce_188, 4, 156, :_reduce_189, 4, 156, :_reduce_190, 2, 156, :_reduce_191, 2, 156, :_reduce_192, 3, 156, :_reduce_193, 3, 156, :_reduce_194, 3, 156, :_reduce_195, 3, 156, :_reduce_196, 3, 156, :_reduce_197, 3, 156, :_reduce_198, 3, 156, :_reduce_199, 3, 156, :_reduce_200, 3, 156, :_reduce_201, 3, 156, :_reduce_202, 3, 156, :_reduce_203, 3, 156, :_reduce_204, 3, 156, :_reduce_205, 2, 156, :_reduce_206, 2, 156, :_reduce_207, 3, 156, :_reduce_208, 3, 156, :_reduce_209, 3, 156, :_reduce_210, 3, 156, :_reduce_211, 3, 156, :_reduce_212, 5, 156, :_reduce_213, 1, 156, :_reduce_none, 1, 153, :_reduce_none, 1, 150, :_reduce_none, 2, 150, :_reduce_217, 2, 150, :_reduce_218, 5, 150, :_reduce_219, 2, 150, :_reduce_220, 3, 150, :_reduce_221, 3, 188, :_reduce_222, 4, 188, :_reduce_223, 4, 188, :_reduce_224, 6, 188, :_reduce_225, 0, 189, :_reduce_226, 1, 189, :_reduce_none, 1, 159, :_reduce_228, 2, 159, :_reduce_229, 5, 159, :_reduce_230, 2, 159, :_reduce_231, 5, 159, :_reduce_232, 4, 159, :_reduce_233, 7, 159, :_reduce_234, 3, 159, :_reduce_235, 1, 159, :_reduce_236, 4, 192, :_reduce_237, 3, 192, :_reduce_238, 5, 192, :_reduce_239, 7, 192, :_reduce_240, 2, 192, :_reduce_241, 5, 192, :_reduce_242, 4, 192, :_reduce_243, 6, 192, :_reduce_244, 7, 192, :_reduce_245, 9, 192, :_reduce_246, 3, 192, :_reduce_247, 1, 192, :_reduce_248, 0, 194, :_reduce_249, 2, 162, :_reduce_250, 1, 193, :_reduce_251, 0, 195, :_reduce_252, 3, 193, :_reduce_253, 0, 196, :_reduce_254, 4, 193, :_reduce_255, 2, 191, :_reduce_256, 2, 190, :_reduce_257, 0, 190, :_reduce_258, 1, 185, :_reduce_259, 3, 185, :_reduce_260, 3, 152, :_reduce_261, 4, 152, :_reduce_262, 2, 152, :_reduce_263, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_272, 3, 183, :_reduce_273, 0, 217, :_reduce_274, 5, 183, :_reduce_275, 3, 183, :_reduce_276, 3, 183, :_reduce_277, 2, 183, :_reduce_278, 4, 183, :_reduce_279, 3, 183, :_reduce_280, 3, 183, :_reduce_281, 1, 183, :_reduce_282, 4, 183, :_reduce_283, 3, 183, :_reduce_284, 1, 183, :_reduce_285, 5, 183, :_reduce_286, 2, 183, :_reduce_287, 1, 183, :_reduce_none, 2, 183, :_reduce_289, 6, 183, :_reduce_290, 6, 183, :_reduce_291, 0, 218, :_reduce_292, 0, 219, :_reduce_293, 7, 183, :_reduce_294, 0, 220, :_reduce_295, 0, 221, :_reduce_296, 7, 183, :_reduce_297, 5, 183, :_reduce_298, 4, 183, :_reduce_299, 5, 183, :_reduce_300, 0, 222, :_reduce_301, 0, 223, :_reduce_302, 9, 183, :_reduce_303, 0, 224, :_reduce_304, 6, 183, :_reduce_305, 0, 225, :_reduce_306, 7, 183, :_reduce_307, 0, 226, :_reduce_308, 5, 183, :_reduce_309, 0, 227, :_reduce_310, 6, 183, :_reduce_311, 0, 228, :_reduce_312, 0, 229, :_reduce_313, 9, 183, :_reduce_314, 1, 183, :_reduce_315, 1, 183, :_reduce_316, 1, 183, :_reduce_317, 1, 183, :_reduce_318, 1, 149, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 2, 207, :_reduce_323, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 208, :_reduce_none, 5, 208, :_reduce_328, 1, 136, :_reduce_none, 2, 136, :_reduce_330, 1, 211, :_reduce_none, 1, 211, :_reduce_none, 1, 230, :_reduce_333, 3, 230, :_reduce_334, 1, 231, :_reduce_none, 2, 231, :_reduce_none, 4, 231, :_reduce_337, 7, 231, :_reduce_338, 6, 231, :_reduce_339, 4, 231, :_reduce_340, 3, 231, :_reduce_341, 5, 231, :_reduce_342, 4, 231, :_reduce_343, 2, 231, :_reduce_344, 1, 231, :_reduce_345, 2, 231, :_reduce_346, 0, 164, :_reduce_347, 2, 164, :_reduce_348, 1, 164, :_reduce_349, 3, 164, :_reduce_350, 0, 233, :_reduce_351, 5, 232, :_reduce_352, 2, 160, :_reduce_353, 4, 160, :_reduce_354, 4, 160, :_reduce_355, 2, 206, :_reduce_356, 4, 206, :_reduce_357, 4, 206, :_reduce_358, 3, 206, :_reduce_359, 2, 206, :_reduce_360, 1, 206, :_reduce_361, 0, 235, :_reduce_362, 5, 205, :_reduce_363, 0, 236, :_reduce_364, 5, 205, :_reduce_365, 5, 210, :_reduce_366, 1, 237, :_reduce_none, 4, 237, :_reduce_368, 2, 237, :_reduce_369, 1, 238, :_reduce_370, 1, 238, :_reduce_none, 6, 135, :_reduce_372, 0, 135, :_reduce_373, 1, 239, :_reduce_374, 1, 239, :_reduce_none, 1, 239, :_reduce_none, 2, 240, :_reduce_377, 1, 240, :_reduce_none, 2, 137, :_reduce_379, 1, 137, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 198, :_reduce_384, 1, 242, :_reduce_385, 2, 242, :_reduce_386, 3, 243, :_reduce_387, 1, 243, :_reduce_388, 3, 199, :_reduce_389, 4, 200, :_reduce_390, 3, 201, :_reduce_391, 0, 246, :_reduce_392, 3, 246, :_reduce_393, 1, 247, :_reduce_394, 2, 247, :_reduce_395, 3, 202, :_reduce_396, 0, 249, :_reduce_397, 3, 249, :_reduce_398, 0, 244, :_reduce_399, 2, 244, :_reduce_400, 0, 245, :_reduce_401, 2, 245, :_reduce_402, 1, 248, :_reduce_403, 2, 248, :_reduce_404, 0, 251, :_reduce_405, 4, 248, :_reduce_406, 1, 250, :_reduce_407, 1, 250, :_reduce_408, 1, 250, :_reduce_409, 1, 250, :_reduce_none, 1, 179, :_reduce_411, 3, 180, :_reduce_412, 1, 241, :_reduce_413, 1, 241, :_reduce_414, 2, 241, :_reduce_415, 2, 241, :_reduce_416, 1, 172, :_reduce_417, 1, 172, :_reduce_418, 1, 172, :_reduce_419, 1, 172, :_reduce_420, 1, 172, :_reduce_421, 1, 172, :_reduce_422, 1, 172, :_reduce_423, 1, 172, :_reduce_424, 1, 172, :_reduce_425, 1, 172, :_reduce_426, 1, 172, :_reduce_427, 1, 203, :_reduce_428, 1, 148, :_reduce_429, 1, 151, :_reduce_430, 1, 151, :_reduce_431, 1, 212, :_reduce_432, 3, 212, :_reduce_433, 2, 212, :_reduce_434, 4, 214, :_reduce_435, 2, 214, :_reduce_436, 6, 252, :_reduce_437, 4, 252, :_reduce_438, 4, 252, :_reduce_439, 2, 252, :_reduce_440, 4, 252, :_reduce_441, 2, 252, :_reduce_442, 2, 252, :_reduce_443, 1, 252, :_reduce_444, 0, 252, :_reduce_445, 1, 258, :_reduce_446, 1, 258, :_reduce_447, 1, 258, :_reduce_448, 1, 258, :_reduce_449, 1, 258, :_reduce_450, 1, 253, :_reduce_451, 3, 253, :_reduce_452, 3, 259, :_reduce_453, 1, 254, :_reduce_454, 3, 254, :_reduce_455, 1, 260, :_reduce_none, 1, 260, :_reduce_none, 2, 255, :_reduce_458, 1, 255, :_reduce_459, 1, 261, :_reduce_none, 1, 261, :_reduce_none, 2, 257, :_reduce_462, 2, 256, :_reduce_463, 0, 256, :_reduce_464, 1, 215, :_reduce_none, 4, 215, :_reduce_466, 0, 204, :_reduce_467, 2, 204, :_reduce_468, 2, 204, :_reduce_469, 1, 187, :_reduce_470, 3, 187, :_reduce_471, 3, 262, :_reduce_472, 1, 166, :_reduce_none, 1, 166, :_reduce_none, 1, 166, :_reduce_none, 1, 161, :_reduce_none, 1, 161, :_reduce_none, 1, 161, :_reduce_none, 1, 161, :_reduce_none, 1, 234, :_reduce_none, 1, 234, :_reduce_none, 1, 234, :_reduce_none, 1, 216, :_reduce_none, 1, 216, :_reduce_none, 0, 139, :_reduce_none, 1, 139, :_reduce_none, 0, 182, :_reduce_none, 1, 182, :_reduce_none, 0, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 213, :_reduce_492, 1, 213, :_reduce_none, 1, 141, :_reduce_none, 2, 141, :_reduce_none, 0, 184, :_reduce_496 ] racc_reduce_n = 497 racc_shift_n = 894 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, :tUPLUS => 60, :tUMINUS => 61, :tUNARY_NUM => 62, :tPOW => 63, :tCMP => 64, :tEQ => 65, :tEQQ => 66, :tNEQ => 67, :tGEQ => 68, :tLEQ => 69, :tANDOP => 70, :tOROP => 71, :tMATCH => 72, :tNMATCH => 73, :tDOT => 74, :tDOT2 => 75, :tDOT3 => 76, :tAREF => 77, :tASET => 78, :tLSHFT => 79, :tRSHFT => 80, :tCOLON2 => 81, :tCOLON3 => 82, :tOP_ASGN => 83, :tASSOC => 84, :tLPAREN => 85, :tLPAREN2 => 86, :tRPAREN => 87, :tLPAREN_ARG => 88, :tLBRACK => 89, :tLBRACK2 => 90, :tRBRACK => 91, :tLBRACE => 92, :tLBRACE_ARG => 93, :tSTAR => 94, :tSTAR2 => 95, :tAMPER => 96, :tAMPER2 => 97, :tTILDE => 98, :tPERCENT => 99, :tDIVIDE => 100, :tPLUS => 101, :tMINUS => 102, :tLT => 103, :tGT => 104, :tPIPE => 105, :tBANG => 106, :tCARET => 107, :tLCURLY => 108, :tRCURLY => 109, :tBACK_REF2 => 110, :tSYMBEG => 111, :tSTRING_BEG => 112, :tXSTRING_BEG => 113, :tREGEXP_BEG => 114, :tWORDS_BEG => 115, :tQWORDS_BEG => 116, :tSTRING_DBEG => 117, :tSTRING_DVAR => 118, :tSTRING_END => 119, :tSTRING => 120, :tSYMBOL => 121, :tREGEXP_OPT => 122, :tNL => 123, :tEH => 124, :tCOLON => 125, :tCOMMA => 126, :tSPACE => 127, :tSEMI => 128, :tEQL => 129, :tLOWEST => 130 } racc_nt_base = 131 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tREGEXP_OPT", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tEQL", "tLOWEST", "$start", "program", "compstmt", "bodystmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "opt_terms", "stmt", "terms", "fitem", "undef_list", "expr_value", "lhs", "command_call", "mlhs", "var_lhs", "primary_value", "aref_args", "backref", "mrhs", "arg_value", "expr", "@1", "arg", "command", "block_command", "call_args", "block_call", "operation2", "command_args", "cmd_brace_block", "opt_block_var", "@2", "operation", "mlhs_basic", "mlhs_entry", "mlhs_head", "mlhs_item", "mlhs_node", "variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@3", "opt_nl", "primary", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "call_args2", "open_args", "@4", "@5", "@6", "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", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "block_par", "block_var", "do_block", "@20", "operation3", "@21", "@22", "when_args", "cases", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "word_list", "word", "string_content", "qword_list", "string_dvar", "@23", "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", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) result = val[0] result end def _reduce_2(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_3(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_4(val, _values, result) result = [] result end def _reduce_5(val, _values, result) result = [ val[0] ] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end def _reduce_7(val, _values, result) result = val[0] << val[2] result end def _reduce_8(val, _values, result) @lexer.state = :expr_fname result end def _reduce_9(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_10(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_11(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_12(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_13(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_14(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_15(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_16(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_17(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_18(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_19(val, _values, result) if @context.indirectly_in_def? diagnostic :error, :begin_in_method, nil, val[0] end result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_20(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end def _reduce_21(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_22(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_23(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_25(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_26(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_27(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_28(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_29(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_30(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_31(val, _values, result) result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end # reduce 32 omitted # reduce 33 omitted def _reduce_34(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_35(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_36(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_37(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 38 omitted # reduce 39 omitted # reduce 40 omitted # reduce 41 omitted def _reduce_42(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_43(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_44(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end # reduce 45 omitted def _reduce_46(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_47(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_48(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_49(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_50(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_51(val, _values, result) lparen_t, args, rparen_t = val[1] method_call = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) begin_t, block_args, body, end_t = val[2] result = @builder.block(method_call, begin_t, block_args, body, end_t) result end def _reduce_52(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_53(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, block_args, body, end_t = val[4] result = @builder.block(method_call, begin_t, block_args, body, end_t) result end def _reduce_54(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_55(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, block_args, body, end_t = val[4] result = @builder.block(method_call, begin_t, block_args, body, end_t) result end def _reduce_56(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_57(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:yield, val[0], lparen_t, args, rparen_t) result end def _reduce_58(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_59(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_60(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_61(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_62(val, _values, result) result = val[0] result end def _reduce_63(val, _values, result) result = val[0] << val[1] result end def _reduce_64(val, _values, result) result = val[0] << @builder.splat(val[1], val[2]) result end def _reduce_65(val, _values, result) result = val[0] << @builder.splat(val[1]) result end def _reduce_66(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_67(val, _values, result) result = [ @builder.splat(val[0]) ] result end # reduce 68 omitted def _reduce_69(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_70(val, _values, result) result = [ val[0] ] result end def _reduce_71(val, _values, result) result = val[0] << val[1] result end def _reduce_72(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_73(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_74(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_75(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_76(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_77(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_78(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_79(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_80(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_81(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_82(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_83(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_84(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_85(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_86(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_87(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_88(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 89 omitted def _reduce_90(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_91(val, _values, result) result = @builder.const(val[0]) result end def _reduce_92(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 93 omitted # reduce 94 omitted # reduce 95 omitted # reduce 96 omitted # reduce 97 omitted def _reduce_98(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 99 omitted # reduce 100 omitted # reduce 101 omitted def _reduce_102(val, _values, result) result = [ val[0] ] result end def _reduce_103(val, _values, result) @lexer.state = :expr_fname result end def _reduce_104(val, _values, result) result = val[0] << val[3] result end # reduce 105 omitted # reduce 106 omitted # reduce 107 omitted # 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 def _reduce_171(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_172(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) result end def _reduce_173(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_174(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_175(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_176(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_177(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_178(val, _values, result) diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] result end def _reduce_179(val, _values, result) diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] result end def _reduce_180(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_181(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_182(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_183(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_184(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_185(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_186(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_187(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_188(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_189(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) result end def _reduce_190(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) result end def _reduce_191(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_192(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_193(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_194(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_195(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_196(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_197(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_198(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_199(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_200(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_201(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_202(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_203(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_204(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_205(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_207(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_208(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_213(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[3], val[4]) result end # reduce 214 omitted # reduce 215 omitted # reduce 216 omitted def _reduce_217(val, _values, result) result = [ val[0] ] result end def _reduce_218(val, _values, result) result = val[0] result end def _reduce_219(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_220(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_221(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_222(val, _values, result) result = [ val[0], [], val[2] ] result end def _reduce_223(val, _values, result) result = [ val[0], val[1], val[3] ] result end def _reduce_224(val, _values, result) result = [ val[0], [ val[1] ], val[3] ] result end def _reduce_225(val, _values, result) result = [ val[0], val[1] << val[3], val[5] ] result end def _reduce_226(val, _values, result) result = [ nil, [], nil ] result end # reduce 227 omitted def _reduce_228(val, _values, result) result = [ val[0] ] result end def _reduce_229(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_230(val, _values, result) result = val[0].concat( [ @builder.splat(val[2], val[3]), *val[4] ]) result end def _reduce_231(val, _values, result) result = [ @builder.associate(nil, val[0], nil), *val[1] ] result end def _reduce_232(val, _values, result) result = [ @builder.associate(nil, val[0], nil), @builder.splat(val[2], val[3]), *val[4] ] result end def _reduce_233(val, _values, result) result = val[0].concat( [ @builder.associate(nil, val[2], nil), *val[3] ]) result end def _reduce_234(val, _values, result) result = val[0].concat( [ @builder.associate(nil, val[2], nil), @builder.splat(val[4], val[5]), *val[6] ]) result end def _reduce_235(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[2] ] result end def _reduce_236(val, _values, result) result = [ val[0] ] result end def _reduce_237(val, _values, result) result = [ val[0], *val[2].concat(val[3]) ] result end def _reduce_238(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_239(val, _values, result) result = [ val[0], @builder.splat(val[2], val[3]), *val[4] ] result end def _reduce_240(val, _values, result) result = [ val[0], *val[2]. push(@builder.splat(val[4], val[5])). concat(val[6]) ] result end def _reduce_241(val, _values, result) result = [ @builder.associate(nil, val[0], nil), *val[1] ] result end def _reduce_242(val, _values, result) result = [ @builder.associate(nil, val[0], nil), @builder.splat(val[2], val[3]), *val[4] ] result end def _reduce_243(val, _values, result) result = [ val[0], @builder.associate(nil, val[2], nil), *val[3] ] result end def _reduce_244(val, _values, result) result = [ val[0], *val[2]. push(@builder.associate(nil, val[4], nil)). concat(val[5]) ] result end def _reduce_245(val, _values, result) result = [ val[0], @builder.associate(nil, val[2], nil), @builder.splat(val[4], val[5]), *val[6] ] result end def _reduce_246(val, _values, result) result = [ val[0], *val[2]. push(@builder.associate(nil, val[4], nil)). push(@builder.splat(val[6], val[7])). concat(val[8]) ] result end def _reduce_247(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[2] ] result end def _reduce_248(val, _values, result) result = [ val[0] ] result end def _reduce_249(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) result end def _reduce_250(val, _values, result) @lexer.cmdarg = val[0] result = val[1] result end def _reduce_251(val, _values, result) result = [ nil, val[0], nil ] result end def _reduce_252(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_253(val, _values, result) result = [ val[0], [], val[2] ] result end def _reduce_254(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_255(val, _values, result) result = [ val[0], val[1], val[3] ] result end def _reduce_256(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_257(val, _values, result) result = [ val[1] ] result end def _reduce_258(val, _values, result) result = [] result end def _reduce_259(val, _values, result) result = [ val[0] ] result end def _reduce_260(val, _values, result) result = val[0] << val[2] result end def _reduce_261(val, _values, result) result = val[0] << val[2] result end def _reduce_262(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_263(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end # reduce 264 omitted # reduce 265 omitted # reduce 266 omitted # reduce 267 omitted # reduce 268 omitted # reduce 269 omitted # reduce 270 omitted # reduce 271 omitted def _reduce_272(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_273(val, _values, result) result = @builder.begin_keyword(val[0], val[1], val[2]) result end def _reduce_274(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_275(val, _values, result) result = @builder.begin(val[0], val[1], val[4]) result end def _reduce_276(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_277(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_278(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_279(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_280(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_281(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_282(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_283(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_284(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_285(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_286(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_287(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 288 omitted def _reduce_289(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_290(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_291(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) result end def _reduce_292(val, _values, result) @lexer.cond.push(true) result end def _reduce_293(val, _values, result) @lexer.cond.pop result end def _reduce_294(val, _values, result) result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_295(val, _values, result) @lexer.cond.push(true) result end def _reduce_296(val, _values, result) @lexer.cond.pop result end def _reduce_297(val, _values, result) result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_298(val, _values, result) when_bodies = val[3][0..-2] else_t, else_body = val[3][-1] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_299(val, _values, result) when_bodies = val[2][0..-2] else_t, else_body = val[2][-1] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_300(val, _values, result) result = @builder.case(val[0], nil, [], val[2], val[3], val[4]) result end def _reduce_301(val, _values, result) @lexer.cond.push(true) result end def _reduce_302(val, _values, result) @lexer.cond.pop result end def _reduce_303(val, _values, result) result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_304(val, _values, result) @static_env.extend_static @context.push(:class) result end def _reduce_305(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @static_env.unextend @context.pop result end def _reduce_306(val, _values, result) @static_env.extend_static @context.push(:sclass) result end def _reduce_307(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @static_env.unextend @context.pop result end def _reduce_308(val, _values, result) @static_env.extend_static result end def _reduce_309(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @static_env.unextend result end def _reduce_310(val, _values, result) @static_env.extend_static @context.push(:def) result end def _reduce_311(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @static_env.unextend @context.pop result end def _reduce_312(val, _values, result) @lexer.state = :expr_fname result end def _reduce_313(val, _values, result) @static_env.extend_static @context.push(:defs) result end def _reduce_314(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @static_env.unextend @context.pop result end def _reduce_315(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_316(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_317(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_318(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 319 omitted # reduce 320 omitted # reduce 321 omitted # reduce 322 omitted def _reduce_323(val, _values, result) result = val[1] result end # reduce 324 omitted # reduce 325 omitted # reduce 326 omitted # reduce 327 omitted def _reduce_328(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 329 omitted def _reduce_330(val, _values, result) result = val result end # reduce 331 omitted # reduce 332 omitted def _reduce_333(val, _values, result) result = [ @builder.arg_expr(val[0]) ] result end def _reduce_334(val, _values, result) result = val[0] << @builder.arg_expr(val[2]) result end # reduce 335 omitted # reduce 336 omitted def _reduce_337(val, _values, result) result = val[0]. push(@builder.blockarg_expr(val[2], val[3])) result end def _reduce_338(val, _values, result) result = val[0]. push(@builder.restarg_expr(val[2], val[3])). push(@builder.blockarg_expr(val[5], val[6])) result end def _reduce_339(val, _values, result) result = val[0]. push(@builder.restarg_expr(val[2])). push(@builder.blockarg_expr(val[4], val[5])) result end def _reduce_340(val, _values, result) result = val[0]. push(@builder.restarg_expr(val[2], val[3])) result end def _reduce_341(val, _values, result) result = val[0]. push(@builder.restarg_expr(val[2])) result end def _reduce_342(val, _values, result) result = [ @builder.restarg_expr(val[0], val[1]), @builder.blockarg_expr(val[3], val[4]) ] result end def _reduce_343(val, _values, result) result = [ @builder.restarg_expr(val[0]), @builder.blockarg_expr(val[2], val[3]) ] result end def _reduce_344(val, _values, result) result = [ @builder.restarg_expr(val[0], val[1]) ] result end def _reduce_345(val, _values, result) result = [ @builder.restarg_expr(val[0]) ] result end def _reduce_346(val, _values, result) result = [ @builder.blockarg_expr(val[0], val[1]) ] result end def _reduce_347(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_348(val, _values, result) result = @builder.args(val[0], [], val[1]) result end def _reduce_349(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_350(val, _values, result) result = @builder.args(val[0], val[1], val[2], false) result end def _reduce_351(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_352(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_353(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_354(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_355(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_356(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_357(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_358(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_359(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_360(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_361(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_362(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_363(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_364(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_365(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_366(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end # reduce 367 omitted def _reduce_368(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_369(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_370(val, _values, result) result = [ val[0] ] result end # reduce 371 omitted def _reduce_372(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_373(val, _values, result) result = [] result end def _reduce_374(val, _values, result) result = [ val[0] ] result end # reduce 375 omitted # reduce 376 omitted def _reduce_377(val, _values, result) result = [ val[0], val[1] ] result end # reduce 378 omitted def _reduce_379(val, _values, result) result = [ val[0], val[1] ] result end # reduce 380 omitted # reduce 381 omitted # reduce 382 omitted # reduce 383 omitted def _reduce_384(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_385(val, _values, result) result = [ val[0] ] result end def _reduce_386(val, _values, result) result = val[0] << val[1] result end def _reduce_387(val, _values, result) result = @builder.string_compose(val[0], val[1], val[2]) result end def _reduce_388(val, _values, result) result = @builder.string(val[0]) result end def _reduce_389(val, _values, result) result = @builder.xstring_compose(val[0], val[1], val[2]) result end def _reduce_390(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_391(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_392(val, _values, result) result = [] result end def _reduce_393(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_394(val, _values, result) result = [ val[0] ] result end def _reduce_395(val, _values, result) result = val[0] << val[1] result end def _reduce_396(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_397(val, _values, result) result = [] result end def _reduce_398(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_399(val, _values, result) result = [] result end def _reduce_400(val, _values, result) result = val[0] << val[1] result end def _reduce_401(val, _values, result) result = [] result end def _reduce_402(val, _values, result) result = val[0] << val[1] result end def _reduce_403(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_404(val, _values, result) result = val[1] result end def _reduce_405(val, _values, result) @lexer.cond.push(false) @lexer.cmdarg.push(false) result end def _reduce_406(val, _values, result) @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_407(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_408(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_409(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 410 omitted def _reduce_411(val, _values, result) result = @builder.symbol(val[0]) result end def _reduce_412(val, _values, result) result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_413(val, _values, result) result = @builder.integer(val[0]) result end def _reduce_414(val, _values, result) result = @builder.float(val[0]) result end def _reduce_415(val, _values, result) num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_416(val, _values, result) num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_417(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_418(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_419(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_420(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_421(val, _values, result) result = @builder.const(val[0]) result end def _reduce_422(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_423(val, _values, result) result = @builder.self(val[0]) result end def _reduce_424(val, _values, result) result = @builder.true(val[0]) result end def _reduce_425(val, _values, result) result = @builder.false(val[0]) result end def _reduce_426(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_427(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_428(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_429(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_430(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_431(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_432(val, _values, result) result = nil result end def _reduce_433(val, _values, result) result = [ val[0], val[1] ] result end def _reduce_434(val, _values, result) yyerrok result = nil result end def _reduce_435(val, _values, result) result = @builder.args(val[0], val[1], val[3]) @lexer.state = :expr_beg result end def _reduce_436(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_437(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_438(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_439(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_440(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_441(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_442(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_443(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_444(val, _values, result) result = [ val[0] ] result end def _reduce_445(val, _values, result) result = [] result end def _reduce_446(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_447(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_448(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_449(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end def _reduce_450(val, _values, result) @static_env.declare val[0][0] result = @builder.arg(val[0]) result end def _reduce_451(val, _values, result) result = [ val[0] ] result end def _reduce_452(val, _values, result) result = val[0] << val[2] result end def _reduce_453(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_454(val, _values, result) result = [ val[0] ] result end def _reduce_455(val, _values, result) result = val[0] << val[2] result end # reduce 456 omitted # reduce 457 omitted def _reduce_458(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_459(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 460 omitted # reduce 461 omitted def _reduce_462(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_463(val, _values, result) result = [ val[1] ] result end def _reduce_464(val, _values, result) result = [] result end # reduce 465 omitted def _reduce_466(val, _values, result) result = val[1] result end def _reduce_467(val, _values, result) result = [] result end def _reduce_468(val, _values, result) result = val[0] result end def _reduce_469(val, _values, result) result = @builder.pair_list_18(val[0]) result end def _reduce_470(val, _values, result) result = [ val[0] ] result end def _reduce_471(val, _values, result) result = val[0] << val[2] result end def _reduce_472(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end # reduce 473 omitted # reduce 474 omitted # reduce 475 omitted # reduce 476 omitted # reduce 477 omitted # reduce 478 omitted # reduce 479 omitted # reduce 480 omitted # reduce 481 omitted # reduce 482 omitted # reduce 483 omitted # reduce 484 omitted # reduce 485 omitted # reduce 486 omitted # reduce 487 omitted # reduce 488 omitted # reduce 489 omitted # reduce 490 omitted # reduce 491 omitted def _reduce_492(val, _values, result) yyerrok result end # reduce 493 omitted # reduce 494 omitted # reduce 495 omitted def _reduce_496(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby18 end # module Parser parser-2.7.0.2/lib/parser/runner/0000755000004100000410000000000013617025313016560 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/runner/ruby_rewrite.rb0000644000004100000410000000422413617025313021631 0ustar www-datawww-data# frozen_string_literal: true require 'parser/runner' require 'tempfile' module Parser class Runner::RubyRewrite < Runner def initialize super @rewriters = [] @modify = false end private def runner_name 'ruby-rewrite' end def setup_option_parsing(opts) super(opts) opts.on '-l file', '--load', 'Load a rewriter' do |file| load_and_discover(file) end opts.on '-m', '--modify', 'Assume rewriters normally modify AST' do @modify = true end end def load_and_discover(file) load file const_name = File.basename(file). sub(/\.rb$/, ''). gsub(/(^|_)([a-z])/) do |m| "#{$2.upcase}" end @rewriters << Object.const_get(const_name) end def process(initial_buffer) buffer = initial_buffer original_name = buffer.name @rewriters.each do |rewriter_class| @parser.reset ast = @parser.parse(buffer) rewriter = rewriter_class.new new_source = rewriter.rewrite(buffer, ast) new_buffer = Source::Buffer.new(initial_buffer.name + '|after ' + rewriter_class.name) new_buffer.source = new_source @parser.reset new_ast = @parser.parse(new_buffer) if !@modify && ast != new_ast $stderr.puts 'ASTs do not match:' old = Tempfile.new('old') old.write ast.inspect + "\n"; old.flush new = Tempfile.new('new') new.write new_ast.inspect + "\n"; new.flush IO.popen("diff -u #{old.path} #{new.path}") do |io| diff = io.read. sub(/^---.*/, "--- #{buffer.name}"). sub(/^\+\+\+.*/, "+++ #{new_buffer.name}") $stderr.write diff end exit 1 end buffer = new_buffer end if File.exist?(original_name) File.open(original_name, 'w') do |file| file.write buffer.source end else if input_size > 1 puts "Rewritten content of #{buffer.name}:" end puts buffer.source end end end end parser-2.7.0.2/lib/parser/runner/ruby_parse.rb0000644000004100000410000000732213617025313021264 0ustar www-datawww-data# frozen_string_literal: true require 'parser/runner' require 'parser/color' require 'parser/lexer/explanation' require 'json' module Parser class Runner::RubyParse < Parser::Runner class LocationProcessor < Parser::AST::Processor def process(node) if node p node source_line_no = nil source_line = '' hilight_line = '' print_line = lambda do unless hilight_line.empty? puts hilight_line. gsub(/[a-z_]+/) { |m| Color.yellow(m, bold: true) }. gsub(/[~.]+/) { |m| Color.magenta(m, bold: true) } hilight_line = '' end end print_source = lambda do |range| source_line = range.source_line puts Color.green(source_line) source_line end (node.loc || {}).to_hash. sort_by do |name, range| [(range ? range.line : 0), (name == :expression ? 1 : 0)] end. each do |name, range| next if range.nil? if source_line_no != range.line print_line.call() source_line = print_source.call(range) source_line_no = range.line end beg_col = range.begin.column if beg_col + range.length > source_line.length multiline = true range_length = source_line.length - beg_col + 3 else multiline = false range_length = range.length end length = range_length + 1 + name.length end_col = beg_col + length if beg_col > 0 col_range = (beg_col - 1)...end_col else col_range = beg_col...end_col end if hilight_line.length < end_col hilight_line = hilight_line.ljust(end_col) end if hilight_line[col_range] =~ /^\s*$/ if multiline tail = ('~' * (source_line.length - beg_col)) + '...' else tail = '~' * range_length end tail = ' ' + tail if beg_col > 0 hilight_line[col_range] = tail + " #{name}" else print_line.call redo end end print_line.call end super end end def initialize super @locate = false @emit_ruby = false @emit_json = false end private def runner_name 'ruby-parse' end def setup_option_parsing(opts) super(opts) opts.on '-L', '--locate', 'Explain how source maps for AST nodes are laid out' do |v| @locate = v end opts.on '-E', '--explain', 'Explain how the source is tokenized' do ENV['RACC_DEBUG'] = '1' Lexer.send :include, Lexer::Explanation end opts.on '--emit-ruby', 'Emit S-expressions as valid Ruby code' do @emit_ruby = true end opts.on '--emit-json', 'Emit S-expressions as valid JSON' do @emit_json = true end end def process_all_input if input_size > 1 puts "Using #{@parser_class} to parse #{input_size} files." end super end def process(buffer) ast = @parser.parse(buffer) if @locate LocationProcessor.new.process(ast) elsif !@benchmark if @emit_ruby puts ast.inspect elsif @emit_json puts(ast ? JSON.generate(ast.to_sexp_array) : nil) else puts ast.to_s end end end end end parser-2.7.0.2/lib/parser/ruby19.y0000644000004100000410000022777013617025313016613 0ustar www-datawww-dataclass Parser::Ruby19 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 tUPLUS tUMINUS tUNARY_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 tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { result = @builder.preexe(val[0], val[1], val[2], val[3]) } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt { result = [ val[0] ] } | stmts terms stmt { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_call { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { diagnostic :error, :const_reassignment, nil, val[3] } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_call { @builder.op_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL arg_value { result = @builder.multi_assign(val[0], val[1], val[2]) } | mlhs tEQL mrhs { result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | expr command_asgn: lhs tEQL command_call { result = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL command_asgn { result = @builder.assign(val[0], val[1], val[2]) } expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command block_command: block_call | block_call tDOT operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | block_call tCOLON2 operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } command: operation command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | operation command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tDOT operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tDOT operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) } | var_lhs tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] } | tCOLON3 tCONSTANT tOP_ASGN arg { diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] } | backref tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM tINTEGER tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) } | tUNARY_NUM tFLOAT tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) } call_args { @lexer.cmdarg = val[0] result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN bodystmt kEND { result = @builder.begin_keyword(val[0], val[1], val[2]) } | tLPAREN_ARG { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } expr { @lexer.state = :expr_endarg } opt_nl tRPAREN { @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | operation brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.push_cmdarg @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.push_cmdarg } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { @static_env.declare val[0][0] result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { @static_env.declare val[3][0] result = val[0]. push(@builder.restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { @static_env.declare val[3][0] result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.restarg(val[0]), *val[2] ] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_f_block_arg { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_arg { result = [ val[0] ] } opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: # nothing { result = [] } | tSEMI bv_decls { result = val[1] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist lambda_body { result = [ val[1], val[2] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call tCOLON2 operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } method_call: operation paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value tDOT paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } | kDO { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = @builder.string_compose(val[0], val[1], val[2]) } | tSTRING { result = @builder.string(val[0]) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = @builder.xstring_compose(val[0], val[1], val[2]) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cond.push(false) @lexer.cmdarg.push(false) } compstmt tRCURLY { @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: tINTEGER { result = @builder.integer(val[0]) } | tFLOAT { result = @builder.float(val[0]) } | tUNARY_NUM tINTEGER =tLOWEST { num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } | tUNARY_NUM tFLOAT =tLOWEST { num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: term { result = nil } | tLT expr_value term { result = [ val[0], val[1] ] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | f_args term { result = @builder.args(nil, val[0], nil) } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_arg { result = [ val[0] ] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER f_arg_item: f_norm_arg { @static_env.declare val[0][0] result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_opt: tIDENTIFIER tEQL arg_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: tIDENTIFIER tEQL primary_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | # nothing { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } 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 { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 19 end def default_encoding Encoding::BINARY end parser-2.7.0.2/lib/parser/ruby25.rb0000644000004100000410000076725213617025313016747 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby25 < Parser::Base def version 25 end def default_encoding Encoding::UTF_8 end ##### State transition tables begin ### clist = [ '-584,579,-110,-108,220,-102,-103,-584,-584,-584,274,-107,274,-584,-584', '222,-584,274,799,622,212,213,212,213,-88,-584,579,-102,819,-108,620', '274,-103,-106,-74,-105,-584,-584,906,-584,-584,-584,-584,-584,-109,-109', '223,579,908,986,-104,-101,-110,798,-105,-107,223,-106,-104,579,579,-110', '538,575,574,537,-584,-584,-584,-584,-584,-584,-584,-584,-584,-584,-584', '-584,-584,-584,-581,269,-584,-584,-584,621,646,725,842,811,-584,212', '213,-584,-581,269,619,273,-584,273,-584,407,-584,-584,273,-584,-584', '-584,-584,-584,-580,-584,-584,-584,-96,-94,223,799,273,115,-110,-108', '-580,-102,114,-110,-108,-584,-102,-107,-584,-584,-584,-584,-107,-584', '-93,818,-99,-584,-584,-584,-584,-106,115,-584,-584,845,-584,114,-103', '-106,798,-105,-100,-103,-106,-584,-105,-95,-95,-101,-109,-96,-98,115', '-97,-109,-584,-584,114,-584,-584,-584,-584,-584,-104,115,115,115,-96', '-104,114,114,114,223,910,212,213,-97,-98,115,115,212,213,394,114,114', '-584,-584,-584,-584,-584,-584,-584,-584,-584,-584,-584,-584,-584,-584', '913,641,-584,-584,-584,218,646,607,-96,914,-584,-96,267,-584,-95,917', '525,-490,-584,220,-584,-96,-584,-584,-490,-584,-584,-584,-584,-584,115', '-584,-584,-584,559,114,556,555,554,223,557,-489,-580,-97,-98,607,538', '-584,-489,540,-584,-584,-584,-97,-95,-584,921,-95,-107,-584,-584,-584', '-584,-106,-584,-584,-584,-95,-584,115,219,609,608,-109,114,223,-110', '-584,-584,-584,-584,759,-490,-97,-98,115,-97,-98,-584,-584,114,-584', '-584,-584,-584,-584,-97,-98,559,-272,556,555,554,607,557,607,-489,115', '607,609,608,605,114,93,94,811,838,586,-584,-584,-584,-584,-584,-584', '-584,-584,-584,-584,-584,-584,-584,-584,93,94,-584,-584,-584,592,787', '-584,-488,593,-584,607,772,-584,-584,-488,-584,607,-584,958,-584,223', '-584,-584,607,-584,-584,-584,-584,-584,785,-584,-584,-584,786,609,608', '609,608,605,609,608,610,607,1025,757,772,-584,956,-491,-584,-584,-584', '-584,673,-584,-491,-584,-296,95,96,-497,-584,-106,923,-296,-296,-296', '702,-104,-296,-296,-296,-488,-296,609,608,612,95,96,926,609,608,614', '-296,-296,-296,-105,609,608,623,-107,640,-95,-296,-296,641,-296,-296', '-296,-296,-296,864,-104,928,-496,930,609,608,618,842,811,-496,-494,-491', '-492,-498,457,-102,932,-494,-496,-492,223,-296,-296,-296,-296,-296,-296', '-296,-296,-296,-296,-296,-296,-296,-296,934,-96,-296,-296,-296,-98,788', '-296,640,538,-296,-105,540,-296,-296,-107,-296,-493,-296,639,-296,-104', '-296,-296,-493,-296,-296,-296,-296,-296,-296,-296,-496,-296,323,-103', '-110,-296,-296,-296,-494,322,-492,-296,-296,538,-296,-296,540,638,-296', '-296,-296,-296,-486,-296,223,-296,-578,212,213,-486,-296,-108,-498,-105', '-296,-296,-497,-296,-296,-296,-296,-296,958,1003,963,218,746,-297,974', '-483,-493,263,633,218,-297,1003,-483,977,1003,111,267,631,982,-297,-296', '-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-486', '-94,-296,-296,-296,-93,645,-486,983,-486,-296,-103,-578,-296,984,-102', '-486,525,-296,987,-296,900,-296,-296,900,-296,-296,-296,-296,-296,-483', '-296,219,-296,-297,-578,-483,-483,-483,-483,219,900,-483,-483,-483,218', '-483,-296,243,992,-296,-296,595,-99,-483,-296,-483,-483,-483,958,214', '597,-296,-108,-100,-486,-483,-483,702,-483,-483,-483,-483,-483,-109', '-297,997,999,1001,218,240,1003,-297,1003,242,241,589,238,239,243,243', '-297,243,243,1003,587,-483,-483,-483,-483,-483,-483,-483,-483,-483,-483', '-483,-483,-483,-483,219,218,-483,-483,-483,-287,-483,-483,528,223,-483', '223,-287,-483,-483,624,-483,455,-483,627,-483,-287,-483,-483,223,-483', '-483,-483,-483,-483,-297,-483,-486,-483,219,-88,676,223,692,-486,-486', '-486,81,531,-486,-486,-486,-483,-486,211,-483,-483,-483,-483,82,-483', '-486,-483,-486,-486,-486,687,-483,-483,83,210,219,692,-486,-486,-287', '-486,-486,-486,-486,-486,260,261,404,-296,693,218,223,406,405,695,-296', '699,518,702,559,-581,556,555,554,-296,557,516,-486,-486,-486,-486,-486', '-486,-486,-486,-486,-486,-486,-486,-486,-486,259,258,-486,-486,-486', '703,-486,-486,705,707,-486,709,958,-486,-486,711,-486,717,-486,718,-486', '719,-486,-486,905,-486,-486,-486,-486,-486,-296,-486,-296,-486,219,721', '1018,-296,-296,-296,599,726,727,-296,-296,586,-296,-486,729,591,-486', '-486,-486,-486,590,-486,396,-486,-584,746,586,756,-486,-486,650,-269', '-296,-296,760,-296,-296,-296,-296,-296,761,-270,500,-495,542,-296,773', '541,223,487,-495,243,-296,487,526,223,790,-581,791,-495,263,-296,-296', '-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-296,-584', '629,-296,-296,-296,796,645,-584,801,498,-296,500,-580,-296,522,630,-584', '687,-296,223,-296,269,-296,-296,269,-296,-296,-296,-296,-296,-288,-296', '-495,-296,-296,-584,269,-288,-288,-288,223,-581,-288,-288,-288,218,-288', '-296,269,687,-296,-296,454,-296,278,-296,-288,-288,-288,243,-580,455', '-296,-108,811,-584,-288,-288,519,-288,-288,-288,-288,-288,223,-333,223', '218,836,218,634,223,-333,811,976,844,981,209,223,512,511,-333,223,597', '-73,979,-288,-288,-288,-288,-288,-288,-288,-288,-288,-288,-288,-288', '-288,-288,219,218,-288,-288,-288,243,124,-288,217,124,-288,223,243,-288', '-288,-577,-288,215,-288,500,-288,853,-288,-288,498,-288,-288,-288,-288', '-288,-333,-288,219,-288,219,496,-271,240,218,487,223,242,241,222,240', '976,459,-288,242,241,-288,-288,-288,-288,597,-288,-252,-288,863,458', '456,867,-288,-252,-252,-252,219,-483,-252,-252,-252,900,-252,687,-483', '883,-269,564,887,-577,564,-252,-252,-483,891,892,702,567,894,896,567', '898,-252,-252,900,-252,-252,-252,-252,-252,900,223,-577,219,559,,556', '555,554,564,557,751,752,,,753,109,110,,567,575,574,,575,574,568,,243', '568,,,,-483,-252,,-303,,,,,-252,562,-303,-303,-303,269,-252,-303,-303', '-303,,-303,575,574,,,,568,,240,,-303,-303,242,241,,238,239,-252,-252', ',-303,-303,,-303,-303,-303,-303,-303,,,,,-252,,,-252,,,,559,-252,556', '555,554,,557,,-252,,,-303,-303,-303,-303,-303,-303,-303,-303,-303,-303', '-303,-303,-303,-303,,,-303,-303,-303,,,-303,,278,-303,,711,-303,-303', ',-303,,-303,,-303,714,-303,-303,,-303,-303,-303,-303,-303,,-303,-252', '-303,118,119,120,121,122,-252,-252,-252,,,-252,-252,-252,-303,-252,', '-303,-303,,-303,,-303,,-252,-252,-252,,949,-303,556,555,554,,557,-252', '-252,,-252,-252,-252,-252,-252,559,,556,555,554,559,557,556,555,554', '559,557,556,555,554,949,557,556,555,554,,557,-252,-252,-252,-252,-252', '-252,-252,-252,-252,-252,-252,-252,-252,-252,,711,-252,-252,-252,,711', '-252,,269,-252,711,,-252,-252,714,-252,,-252,,-252,,-252,-252,,-252', '-252,-252,-252,-252,,-252,-252,-252,559,,556,555,554,564,557,118,119', '120,121,122,,-252,,567,-252,-252,-586,-252,,-252,,,,-586,-586,-586,-252', ',-586,-586,-586,,-586,243,559,562,556,555,554,,557,-586,-586,-586,-586', ',575,574,,253,254,568,-586,-586,,-586,-586,-586,-586,-586,559,,556,555', '554,240,557,246,,242,241,711,238,239,,,244,,245,,,,-586,-586,-586,-586', '-586,-586,-586,-586,-586,-586,-586,-586,-586,-586,,711,-586,-586,-586', ',,-586,,,-586,,,-586,-586,,-586,,-586,,-586,,-586,-586,,-586,-586,-586', '-586,-586,,-586,-586,-586,,,559,,556,555,554,,557,,,,,-586,,,-586,-586', '-586,-586,,-586,-413,-586,,,,,-586,-413,-413,-413,,,-413,-413,-413,243', '-413,711,118,119,120,121,122,,,-413,-413,-413,,,,253,254,,,,-413,-413', ',-413,-413,-413,-413,-413,,,,240,,246,,242,241,,238,239,,,244,,245,118', '119,120,121,122,-413,-413,-413,-413,-413,-413,-413,-413,-413,-413,-413', '-413,-413,-413,,,-413,-413,-413,,,-413,,269,-413,,,-413,-413,,-413,', '-413,,-413,,-413,-413,,-413,-413,-413,-413,-413,,-413,-413,-413,559', ',556,555,554,564,557,,,,,,,-413,,567,-413,-413,-585,-413,,-413,,,,-585', '-585,-585,-413,,-585,-585,-585,,-585,243,,562,,,,,,-585,-585,-585,-585', ',575,574,,253,254,568,-585,-585,,-585,-585,-585,-585,-585,,,,,,240,', ',,242,241,,238,239,,,,,,,,,-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,296,70', '71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102', '104,105,,,19,,,,,635,8,46,298,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,243,247,248,249,250,260,261,255,256,251,252,,236', '237,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239', '259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,257,,-244', ',,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74', ',,,,,75,28,27,103,102,104,105,,,19,,,,,635,8,46,298,10,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248,249,250,260,261', '255,256,251,252,,236,237,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246', '45,242,241,,238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,', ',,,82,90,,257,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10', '107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248', '249,250,260,261,255,256,251,252,,236,237,,,253,254,,40,,,33,,,59,60', ',,61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,223,257,,,,,63,,83,95,96,296,70,71,72,9,58', ',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,', ',19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,243,247,248,249,250,260,261,255,256,251,252,,236,237,,,253', '254,,40,,,300,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258', '244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,257,,,,,63,,83,95', '96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28', '27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,243,247,248,249,250,260,261,255,256,251', '252,,236,237,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241', ',238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,257', ',,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73', '74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248,249,250,260,261', '255,256,251,252,,236,237,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246', '45,242,241,,238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,', ',,,82,90,,257,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10', '107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248', '249,250,260,261,255,256,251,252,,236,237,,,253,254,,40,,,300,,,59,60', ',,61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,257,,,,,63,,83,95,96,296,70,71,72,9,58,,', ',64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19', ',,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42', '43,41,243,247,248,249,250,260,261,255,256,251,252,,236,237,,,253,254', ',40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244,20', '245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,257,,,,,63,,83,95,96,296', '70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,243,-605,-605,-605,-605,260,261,,,-605,-605,,,,', ',253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259', '258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95', '96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28', '27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,243,247,248,249,250,260,261,255,256,251', '252,,-605,-605,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241', ',238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,', ',,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73', '74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,243,-605,-605,-605,-605,260', '261,,,-605,-605,,,,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242', '241,,238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90', ',,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31', '73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,-605,-605,-605,-605', '260,261,,,-605,-605,,,,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246', '45,242,241,,238,239,259,258,244,20,245,,,,91,81,84,85,,86,88,87,89,', ',,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67', '69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,247,248,249', '250,260,261,255,256,251,252,,-605,-605,,,253,254,,40,,,33,,,59,60,,', '61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', '8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', '243,-605,-605,-605,-605,260,261,,,-605,-605,,,,,,253,254,,40,,,33,,', '59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58', ',,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,', ',19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,243,247,248,249,250,260,261,255,,251,252,,,,,,253,254,,40,', ',33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244,20,245', ',,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72', '9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104', '105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110,', '93,94,42,43,41,243,-605,-605,-605,-605,260,261,,,-605,-605,,,,,,253', '254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244', '20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296', '70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,243,-605,-605,-605,-605,260,261,,,-605,-605,,,,', ',253,254,,40,,,300,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259', '258,244,20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95', '96,5,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,19,,,,,,8,46,7,10,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,243,247,248,249,250,260,261,,,251,252,,,,,,253', '254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,259,258,244', '20,245,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296', '70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,243,,,,,,,,,,,,,,,,253,254,,40,,,33,,,59,60,,,61', ',35,240,,246,45,242,241,,238,239,,,,20,,,,,91,81,84,85,,86,88,87,89', ',,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67', '69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,243,,,,,,,,,,,', ',,,,253,254,,40,,,33,,,59,60,,,61,,35,240,,246,45,242,241,,238,239,', ',,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70', '71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102', '104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,', ',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,5', '70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,8,46,7,10,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45', ',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96', '296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35', ',,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83', '95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75', '28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97,57,99,98', '100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60', ',,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,', ',,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73', '74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33', ',,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30', '31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107,106', '108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,', '40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10', '107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,', ',,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86', '88,87,89,,,,,82,90,,,,,,,63,,83,95,96,296,70,71,72,9,58,,,,64,65,,,', '68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46', '298,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,', ',,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89', ',,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73', '74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57', '99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,', ',,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99', '98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59', '60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75', '28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,', '101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61', ',,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318', '103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58', '83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93', '94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,', ',,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95', '96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105', ',,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42', '43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233', ',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89', ',,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73', '74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57', '99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,', ',,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99', '98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59', '60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75', '312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,', ',,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72', '63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104', '105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233', ',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89', ',,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73', '74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57', '99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,', ',,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99', '98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59', '60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75', '312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,', ',,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72', '63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285', ',45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,', '285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287', ',285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,223', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75', '312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58', '83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93', '94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,', ',,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95', '96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105', ',,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42', '43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233', ',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,70,71,72,9,58,,,', '64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19', ',,,,,8,46,,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43', '41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,', '91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,70,71,72,9,58,,,', '64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19', ',,,,,8,46,7,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43', '41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,', '91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,', ',,46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,', ',,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233', ',,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,', ',,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,', ',,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,', ',,,,,,,,,,,,,,936,,,234,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106', '108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,', ',,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233,,,,,91,288,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,', ',,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233,,,,,91,288', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,', ',,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233,,,,', '91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,,,319,,', ',,,,,,,,,,,,,,,,,309,,,305,,,59,60,,,61,,304,,,,,,,,,,,,,,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,,,,', ',,,,,,,,,,,309,,,234,,,59,60,,,61,,,559,,556,555,554,564,557,,,,,,,', ',567,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,321,,562,63,,83,95,96,70', '71,72,,58,575,574,,64,65,568,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,942,,,234,,,59,60,,,61,,,,,', ',,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104', '105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', ',,319,,,,,,,,,,,,,,,,,,,,936,,,234,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88', '87,89,,,,,82,90,,,,,,,63,,83,95,96,70,71,72,9,58,,,,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,,10,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,287,,,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,,,,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87', '89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31', '73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57', '99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,', ',75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,115,,,,,114,63,,83,95', '96,70,71,72,,58,,,,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318', '103,102,104,105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,356,,,33,,,59,60,,,61,,35,,,,,,', ',,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95', '96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105', ',,235,,,,,,,313,,,107,106,108,361,57,99,98,362,,101,109,110,,93,94,', ',319,,,,,,,,,,,,,,,,,368,,,363,,,234,,,59,60,,,61,,,,,,,,,,,,,,,,,,', ',91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,313,,,107,106,108,361,57,99,98,362,,101,109,110,,93,94,,,319,', ',,,,,,,,,,,,,,,,,,363,,,234,,,59,60,,,61,,,559,,556,555,554,564,557', ',,,,,,,,567,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,562,63,,83,95,96', '70,71,72,9,58,575,574,,64,65,568,,,68,,66,67,69,30,31,73,74,,,,,,75', '28,27,103,102,104,105,,,19,,,,,,8,46,7,10,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61', ',35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,396', '63,,83,95,96,70,71,72,,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,', '75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105', ',,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43', '41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,', '91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', ',46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,', ',,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96,70,71,72,9,58,,,,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', '8,46,,10,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,', ',,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,670,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,', '107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,', ',,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86', '88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69', '30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,412,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31', '73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,412,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,', ',82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74', ',,,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98', '100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60', ',,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58', '83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104', '105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233', ',,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,', ',,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233', ',,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,', ',,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,', ',,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,,46', ',,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,', ',,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106', '108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,', '228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,223,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,,,59,60,,,61,,412,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316', '73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,313,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,309,,,305', ',,59,60,,,61,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,', ',,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75', '312,318,103,102,104,105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,309,,,305,,,59,60,,,61', ',,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63', '58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104', '105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', ',,319,,,,,,,,,,,,,,,,,,,,309,,,305,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107,106,108', '97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228', ',,234,531,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87', '89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31', '73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97', '57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234', ',,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,', ',75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', ',101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,', '61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27', '103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58', '83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,285,,45', ',,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63', '58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,670,', '285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,', ',,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83', '95,96,70,71,72,9,58,,,,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28', '27,103,102,104,105,,,19,,,,,,8,46,,10,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,59,60,,,61,,35', ',,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72', '63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102', '104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285', ',45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71', '72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103', '102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110', ',93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,', ',,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83', '95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104', '105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94', '42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,764,,,,45,,,,,,', ',,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95', '96,64,65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,', ',19,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43', '41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,', '91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,', ',,46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,', ',,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233', ',,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,', ',,,,,46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233', ',,,,91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64', '65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,287,,,,45,,,,,,,,,233,,,', ',91,81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', ',46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,', ',,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,', ',,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,291,,,,,,233,,,,,91,288', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,670,,,,45,,,291,,,,,,233,,,', ',91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,', ',46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,', ',,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,20,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315', '316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,313,,,107,106', '108,97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,309', ',,305,,,59,60,,,61,,,,,,,,,,,,,,,,,,,,91,81,84,85,,86,88,87,89,,,,,82', '90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,,,,', ',75,28,27,103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100', '290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60', ',,61,,287,,285,,45,,,291,,,,,,233,,,,,91,288,84,85,,86,88,87,89,,,,', '82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,30,31,73,74,', ',,,,75,28,27,103,102,104,105,,,19,,,,,,,46,,,107,106,108,97,57,99,98', '100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60', ',,61,,,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,70', '71,72,63,58,83,95,96,64,65,,,,68,,66,67,69,315,316,73,74,,,,,,75,312', '318,103,102,104,105,,,235,,,,,,,313,,,107,106,108,97,57,99,98,100,,101', '109,110,,93,94,,,319,,,,,,,,,,,,,,,,,,,,309,,,305,,,59,60,,,61,,,559', ',556,555,554,564,557,,,,,,,,,567,,91,81,84,85,,86,88,87,89,,,,,82,90', ',,,,,562,63,,83,95,96,70,71,72,9,58,575,574,,64,65,568,,,68,,66,67,69', '30,31,73,74,,,,,,75,28,27,103,102,104,105,,,19,,,,,,8,46,298,10,107', '106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,,,,,,', ',,,,40,,,33,,,59,60,,,61,,35,,,,45,,,,,,,,,20,,,,,91,81,84,85,,86,88', '87,89,,,,,82,90,,,,,,396,63,,83,95,96,70,71,72,,58,,,,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,,,,,', ',,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84,85', ',86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66,67', '69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,', ',,,,,,,228,,,234,,,59,60,,,61,,,,285,,45,,,291,,,,,,233,,,,,91,288,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,46,', ',107,106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,', ',,,,,,,,,,,,228,,,234,,,59,60,,,61,,670,,285,,45,,,291,,,,,,233,,,,', '91,288,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65', ',,,68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235', ',,,,,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41', ',,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91', '81,84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,', '68,,66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,', ',,,46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,', ',,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,30,31,73,74,,,,,,75,28,27,103,102,104,105,,,235,,,,,,,46,,,107', '106,108,97,57,99,98,100,290,101,109,110,,93,94,42,43,41,,,,,,,,,,,,', ',,,,,,,228,,,234,,,59,60,,,61,,287,,285,,45,,,291,,,,,,233,,,,,91,288', '84,85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68', ',66,67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,', '46,,,107,106,108,97,57,99,98,100,,101,109,110,,93,94,42,43,41,,,,,,', ',,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45,,,,,,,,,233,,,,,91,81,84', '85,,86,88,87,89,,,,,82,90,,,,70,71,72,63,58,83,95,96,64,65,,,,68,,66', '67,69,315,316,73,74,,,,,,75,312,318,103,102,104,105,,,235,,,,,,,313', ',,107,106,108,97,57,99,98,100,,101,109,110,,93,94,,,319,,,,,,,,,,,,', ',,,,,,,309,,,234,,,59,60,,,61,,,559,,556,555,554,564,557,,,,,,,,,567', ',91,81,84,85,,86,88,87,89,,,,,82,90,,,,514,,562,63,,83,95,96,70,71,72', ',58,575,574,,64,65,568,,,68,,66,67,69,315,316,73,74,,,,,,75,312,318', '103,102,104,105,,,235,,,,,,,46,,,107,106,108,97,57,99,98,100,,101,109', '110,,93,94,42,43,41,,,,,,,,,,,,,,,,,,,,228,,,234,,,59,60,,,61,,,,,,45', ',,,,,,,,233,,,,,91,81,84,85,,86,88,87,89,,,,,82,90,,,,,,,63,,83,95,96', '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,,,,,,,,160,161,,157', '139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,,,,,,,,,154', '153,,138,159,156,155,164,151,152,146,144,136,158,137,,,165,91,,,,,,', ',,,,,,,90,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,,,,,,,,160,161', ',157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,,,,,', ',,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137,,,165,91', ',,,,,,,,,,,,,90,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,,,,,', ',,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150', ',,,,,,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137', ',,165,91,,,,,,,,,,,,,,90,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', ',,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149', '150,,,,,,,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158', '137,,,165,91,,,,,,,,,,,,,,90,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', '379,378,380,377,172,191,190,,,,,,171,178,169,170,374,375,376,372,129', '99,98,373,,101,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,', ',,162,163,149,150,,,,,,384,,,,,,,,154,153,,138,159,156,155,164,151,152', '146,144,136,158,137,,,165,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', ',,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149', '150,559,,556,555,554,564,557,,,,,,,154,153,567,138,159,156,155,164,151', '152,146,144,136,158,137,,,165,,,,,,,562,,1010,438,,,1011,,,572,571,575', '574,,160,161,568,157,139,140,141,148,145,147,,,142,143,,,,162,163,149', '150,,,,,,269,,223,,,,,,154,153,,138,159,156,155,164,151,152,146,144', '136,158,137,651,438,165,,652,,,,,,,,160,161,,157,139,140,141,148,145', '147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156', '155,164,151,152,146,144,136,158,137,683,445,165,,684,,,,,,,,160,161', ',157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,', ',,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137,1012', '445,165,,1013,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143', ',,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151', '152,146,144,136,158,137,653,445,165,,654,,,,,,,,160,161,,157,139,140', '141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153', ',138,159,156,155,164,151,152,146,144,136,158,137,485,438,165,,486,,', ',,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150', ',,,,,,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137', '1007,445,165,,1006,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142', '143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164', '151,152,146,144,136,158,137,653,445,165,,654,,,,,,,,160,161,,157,139', '140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154', '153,,138,159,156,155,164,151,152,146,144,136,158,137,737,445,165,,738', ',,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149', '150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136', '158,137,485,438,165,,486,,,,,,,,160,161,,157,139,140,141,148,145,147', ',,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155', '164,151,152,146,144,136,158,137,680,438,165,,681,,,,,,,,160,161,,157', '139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,', ',154,153,,138,159,156,155,164,151,152,146,144,136,158,137,769,445,165', ',768,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162,163', '149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151,152,146,144', '136,158,137,766,438,165,,767,,,,,,,,160,161,,157,139,140,141,148,145', '147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156', '155,164,151,152,146,144,136,158,137,651,438,165,,652,,,,,,,,160,161', ',157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269,', ',,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137,732,438', '165,,733,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,,,,162', '163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151,152,146', '144,136,158,137,434,438,165,,435,,,,,,,,160,161,,157,139,140,141,148', '145,147,,,142,143,,,,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159', '156,155,164,151,152,146,144,136,158,137,441,445,165,,440,,,,,,,,160', '161,,157,139,140,141,148,145,147,,,142,143,,,,162,163,149,150,,,,,,269', ',,,,,,,154,153,,138,159,156,155,164,151,152,146,144,136,158,137,734', '445,165,,735,,,,,,,,160,161,,157,139,140,141,148,145,147,,,142,143,', ',,162,163,149,150,,,,,,269,,,,,,,,154,153,,138,159,156,155,164,151,152', '146,144,136,158,137,,559,165,556,555,554,564,557,,559,,556,555,554,564', '557,567,,,,,,,,567,,559,,556,555,554,564,557,,,,,,562,,,567,,,,,562', '572,571,575,574,,,,568,572,571,575,574,,,,568,562,,559,,556,555,554', '564,557,572,571,575,574,,,,568,567,,559,,556,555,554,564,557,,559,,556', '555,554,564,557,567,,,,,562,,,567,,,,,,572,571,575,574,,,,568,562,,', ',,,,,562,572,571,575,574,,,,568,572,571,575,574,,,559,568,556,555,554', '564,557,559,,556,555,554,564,557,559,567,556,555,554,564,557,559,567', '556,555,554,564,557,,567,,,,,,,567,562,,,,,,,562,,572,571,575,574,,562', ',568,,575,574,,562,,568,,575,574,,,,568,,575,574,,,559,568,556,555,554', '564,557,,559,,556,555,554,564,557,567,,,,,,,,567,,559,,556,555,554,564', '557,,,,,,562,545,,567,,,,,562,572,571,575,574,,,,568,572,571,575,574', ',,,568,562,,,,,,,,,572,571,575,574,,,,568' ] racc_action_table = arr = ::Array.new(24615, 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 = [ '769,886,943,1013,17,939,354,769,769,769,660,1011,62,769,769,19,769,314', '664,392,14,14,604,604,675,769,730,353,697,735,391,26,940,1012,675,1010', '769,769,837,769,769,769,769,769,982,590,947,909,840,947,847,17,357,664', '732,733,19,734,1023,346,345,17,335,702,702,335,769,769,769,769,769,769', '769,769,769,769,769,769,769,769,1013,314,769,769,769,392,769,581,720', '720,769,450,450,769,735,26,391,660,769,62,769,207,769,769,314,769,769', '769,769,769,1012,769,769,769,680,354,604,792,26,886,943,1013,734,939', '886,943,1013,769,939,1011,769,769,441,769,1011,769,353,697,735,441,441', '441,769,769,730,441,441,730,441,730,940,1012,792,1010,590,940,1012,441', '1010,847,806,357,982,732,733,909,734,982,441,441,909,441,441,441,441', '441,1023,346,345,350,680,1023,346,345,350,450,843,600,600,683,681,581', '856,690,690,111,581,856,441,441,441,441,441,441,441,441,441,441,441', '441,441,441,848,767,441,441,441,382,441,617,680,850,441,680,382,441', '806,854,456,380,441,419,441,680,441,441,380,441,441,441,441,441,294', '441,441,441,714,294,714,714,714,855,714,379,683,683,681,386,339,441', '379,339,441,441,653,441,806,441,858,806,767,653,653,653,441,441,653', '653,653,806,653,600,382,617,617,456,600,690,419,653,653,653,653,617', '380,683,681,851,683,681,653,653,851,653,653,653,653,653,683,681,905', '859,905,905,905,615,905,502,379,3,387,386,386,386,3,319,319,912,714', '912,653,653,653,653,653,653,653,653,653,653,653,653,653,653,41,41,653', '653,653,363,653,653,378,363,653,388,860,653,653,378,653,389,653,1016', '653,46,653,653,393,653,653,653,653,653,651,653,653,653,652,615,615,502', '502,502,387,387,387,390,1019,615,636,653,905,377,653,653,653,653,502', '653,377,653,654,319,319,226,653,653,868,654,654,654,869,860,654,654', '654,378,654,388,388,388,41,41,871,389,389,389,654,654,654,651,393,393', '393,652,434,636,654,654,435,654,654,654,654,654,789,636,872,307,873', '390,390,390,994,994,307,376,377,375,227,229,226,875,376,307,375,876', '654,654,654,654,654,654,654,654,654,654,654,654,654,654,877,434,654', '654,654,435,654,654,766,696,654,434,696,654,654,435,654,374,654,433', '654,789,654,654,374,654,654,654,654,654,440,654,307,654,40,227,229,440', '440,440,376,37,375,440,440,336,440,654,336,432,654,654,654,654,373,654', '430,654,362,344,344,373,654,654,39,766,440,440,38,440,440,440,440,440', '907,1020,916,418,920,519,933,372,374,22,418,24,519,1021,372,936,1022', '1,24,418,942,519,440,440,440,440,440,440,440,440,440,440,440,440,440', '440,362,39,440,440,440,38,440,362,945,373,440,39,362,440,946,38,362', '323,440,951,440,952,440,440,953,440,440,440,440,440,97,440,418,440,519', '362,372,97,97,97,24,954,97,97,97,365,97,440,478,955,440,440,365,440', '97,440,97,97,97,957,15,365,440,440,323,362,97,97,965,97,97,97,97,97', '323,593,968,969,970,355,478,971,593,973,478,478,355,478,478,464,465', '593,466,467,1030,355,97,97,97,97,97,97,97,97,97,97,97,97,97,97,365,325', '97,97,97,310,97,97,325,489,97,493,310,97,97,402,97,325,97,408,97,310', '97,97,509,97,97,97,97,97,593,97,100,97,355,510,513,515,978,100,100,100', '79,520,100,100,100,97,100,13,97,97,97,97,79,97,100,97,100,100,100,523', '97,97,79,12,325,532,100,100,310,100,100,100,100,100,44,44,126,684,533', '308,534,126,126,535,684,547,308,548,836,684,836,836,836,684,836,308', '100,100,100,100,100,100,100,100,100,100,100,100,100,100,44,44,100,100', '100,550,100,100,551,552,100,561,993,100,100,836,100,569,100,573,100', '576,100,100,836,100,100,100,100,100,768,100,684,100,308,578,995,768', '768,768,367,582,583,768,768,584,768,100,585,358,100,100,100,100,356', '100,352,100,737,602,351,612,100,100,452,411,768,768,620,768,768,768', '768,768,622,628,340,306,338,738,637,337,333,642,306,327,738,647,324', '655,656,738,657,306,659,738,768,768,768,768,768,768,768,768,768,768', '768,768,768,768,737,413,768,768,768,663,768,737,665,667,768,669,737', '768,320,416,737,677,768,679,768,318,768,768,442,768,768,768,768,768', '57,768,306,768,738,737,682,57,57,57,313,1006,57,57,57,225,57,768,685', '686,768,768,225,768,312,768,57,57,57,689,1007,225,768,768,691,737,57', '57,309,57,57,57,57,57,1009,47,698,935,713,941,420,715,47,722,935,728', '941,10,731,303,302,47,301,935,299,941,57,57,57,57,57,57,57,57,57,57', '57,57,57,57,225,16,57,57,57,462,298,57,16,7,57,740,463,57,57,361,57', '16,57,286,57,744,57,57,283,57,57,57,57,57,47,57,935,57,941,282,763,462', '975,268,765,462,462,235,463,975,231,57,463,463,57,57,57,57,975,57,484', '57,774,230,228,795,57,484,484,484,16,361,484,484,484,1015,484,805,361', '809,812,699,813,361,923,484,484,361,820,821,822,699,826,827,923,829', '484,484,830,484,484,484,484,484,832,835,361,975,930,,930,930,930,930', '930,608,608,,,608,608,608,,930,699,699,,923,923,699,,477,923,,,,361', '484,,28,,,,,484,930,28,28,28,484,484,28,28,28,,28,930,930,,,,930,,477', ',28,28,477,477,,477,477,484,484,,28,28,,28,28,28,28,28,,,,,484,,,484', ',,,562,484,562,562,562,,562,,484,,,28,28,28,28,28,28,28,28,28,28,28', '28,28,28,,,28,28,28,,,28,,28,28,,562,28,28,,28,,28,,28,562,28,28,,28', '28,28,28,28,,28,436,28,332,332,332,332,332,436,436,436,,,436,436,436', '28,436,,28,28,,28,,28,,436,436,436,,891,28,891,891,891,,891,436,436', ',436,436,436,436,436,838,,838,838,838,711,838,711,711,711,992,711,992', '992,992,986,992,986,986,986,,986,436,436,436,436,436,436,436,436,436', '436,436,436,436,436,,838,436,436,436,,711,436,,436,436,992,,436,436', '711,436,,436,,436,,436,436,,436,436,436,436,436,,436,436,436,896,,896', '896,896,896,896,297,297,297,297,297,,436,,896,436,436,446,436,,436,', ',,446,446,446,436,,446,446,446,,446,529,958,896,958,958,958,,958,446', '446,446,446,,896,896,,529,529,896,446,446,,446,446,446,446,446,956,', '956,956,956,529,956,529,,529,529,958,529,529,,,529,,529,,,,446,446,446', '446,446,446,446,446,446,446,446,446,446,446,,956,446,446,446,,,446,', ',446,,,446,446,,446,,446,,446,,446,446,,446,446,446,446,446,,446,446', '446,,,906,,906,906,906,,906,,,,,446,,,446,446,446,446,,446,27,446,,', ',,446,27,27,27,,,27,27,27,482,27,906,6,6,6,6,6,,,27,27,27,,,,482,482', ',,,27,27,,27,27,27,27,27,,,,482,,482,,482,482,,482,482,,,482,,482,507', '507,507,507,507,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,898', ',898,898,898,898,898,,,,,,,27,,898,27,27,445,27,,27,,,,445,445,445,27', ',445,445,445,,445,470,,898,,,,,,445,445,445,445,,898,898,,470,470,898', '445,445,,445,445,445,445,445,,,,,,470,,,,470,470,,470,470,,,,,,,,,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,601,601', '601,601,601,601,,,,601,601,,,,601,,601,601,601,601,601,601,601,,,,,', '601,601,601,601,601,601,601,,,601,,,,,423,601,601,601,601,601,601,601', '601,601,601,601,601,,601,601,601,,601,601,601,601,601,423,423,423,423', '423,423,423,423,423,423,423,,423,423,,,423,423,,601,,,601,,,601,601', ',,601,,601,423,,423,601,423,423,,423,423,423,423,423,601,423,,,,601', '601,601,601,,601,601,601,601,,,,,601,601,,423,,423,,,601,,601,601,601', '349,349,349,349,349,349,,,,349,349,,,,349,,349,349,349,349,349,349,349', ',,,,,349,349,349,349,349,349,349,,,349,,,,,429,349,349,349,349,349,349', '349,349,349,349,349,349,,349,349,349,,349,349,349,349,349,429,429,429', '429,429,429,429,429,429,429,429,,429,429,,,429,429,,349,,,349,,,349', '349,,,349,,349,429,,429,349,429,429,,429,429,429,429,429,349,429,,,', '349,349,349,349,,349,349,349,349,,,,,349,349,,429,,,,,349,,349,349,349', '811,811,811,811,811,811,,,,811,811,,,,811,,811,811,811,811,811,811,811', ',,,,,811,811,811,811,811,811,811,,,811,,,,,,811,811,811,811,811,811', '811,811,811,811,811,811,,811,811,811,,811,811,811,811,811,481,481,481', '481,481,481,481,481,481,481,481,,481,481,,,481,481,,811,,,811,,,811', '811,,,811,,811,481,,481,811,481,481,,481,481,481,481,481,811,481,,,', '811,811,811,811,,811,811,811,811,,,,,811,811,481,481,,,,,811,,811,811', '811,305,305,305,305,305,305,,,,305,305,,,,305,,305,305,305,305,305,305', '305,,,,,,305,305,305,305,305,305,305,,,305,,,,,,305,305,305,305,305', '305,305,305,305,305,305,305,,305,305,305,,305,305,305,305,305,530,530', '530,530,530,530,530,530,530,530,530,,530,530,,,530,530,,305,,,305,,', '305,305,,,305,,305,530,,530,305,530,530,,530,530,530,530,530,305,530', ',,,305,305,305,305,,305,305,305,305,,,,,305,305,,530,,,,,305,,305,305', '305,938,938,938,938,938,938,,,,938,938,,,,938,,938,938,938,938,938,938', '938,,,,,,938,938,938,938,938,938,938,,,938,,,,,,938,938,938,938,938', '938,938,938,938,938,938,938,,938,938,938,,938,938,938,938,938,280,280', '280,280,280,280,280,280,280,280,280,,280,280,,,280,280,,938,,,938,,', '938,938,,,938,,938,280,,280,938,280,280,,280,280,280,280,280,938,280', ',,,938,938,938,938,,938,938,938,938,,,,,938,938,,280,,,,,938,,938,938', '938,755,755,755,755,755,755,,,,755,755,,,,755,,755,755,755,755,755,755', '755,,,,,,755,755,755,755,755,755,755,,,755,,,,,,755,755,755,755,755', '755,755,755,755,755,755,755,,755,755,755,,755,755,755,755,755,771,771', '771,771,771,771,771,771,771,771,771,,771,771,,,771,771,,755,,,755,,', '755,755,,,755,,755,771,,771,755,771,771,,771,771,771,771,771,755,771', ',,,755,755,755,755,,755,755,755,755,,,,,755,755,,771,,,,,755,,755,755', '755,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,865,865', '865,865,865,865,865,865,865,865,865,,865,865,,,865,865,,300,,,300,,', '300,300,,,300,,300,865,,865,300,865,865,,865,865,865,865,865,300,865', ',,,300,300,300,300,,300,300,300,300,,,,,300,300,,865,,,,,300,,300,300', '300,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,21,21', '21,21,21,21,21,21,21,21,21,,21,21,,,21,21,,745,,,745,,,745,745,,,745', ',745,21,,21,745,21,21,,21,21,21,21,21,745,21,,,,745,745,745,745,,745', '745,745,745,,,,,745,745,,21,,,,,745,,745,745,745,800,800,800,800,800', '800,,,,800,800,,,,800,,800,800,800,800,800,800,800,,,,,,800,800,800', '800,800,800,800,,,800,,,,,,800,800,800,800,800,800,800,800,800,800,800', '800,,800,800,800,,800,800,800,800,800,473,473,473,473,473,473,473,,', '473,473,,,,,,473,473,,800,,,800,,,800,800,,,800,,800,473,,473,800,473', '473,,473,473,473,473,473,800,473,,,,800,800,800,800,,800,800,800,800', ',,,,800,800,,,,,,,800,,800,800,800,348,348,348,348,348,348,,,,348,348', ',,,348,,348,348,348,348,348,348,348,,,,,,348,348,348,348,348,348,348', ',,348,,,,,,348,348,348,348,348,348,348,348,348,348,348,348,,348,348', '348,,348,348,348,348,348,460,460,460,460,460,460,460,460,460,460,460', ',460,460,,,460,460,,348,,,348,,,348,348,,,348,,348,460,,460,348,460', '460,,460,460,460,460,460,348,460,,,,348,348,348,348,,348,348,348,348', ',,,,348,348,,,,,,,348,,348,348,348,852,852,852,852,852,852,,,,852,852', ',,,852,,852,852,852,852,852,852,852,,,,,,852,852,852,852,852,852,852', ',,852,,,,,,852,852,852,852,852,852,852,852,852,852,852,852,,852,852', '852,,852,852,852,852,852,474,474,474,474,474,474,474,,,474,474,,,,,', '474,474,,852,,,852,,,852,852,,,852,,852,474,,474,852,474,474,,474,474', '474,474,474,852,474,,,,852,852,852,852,,852,852,852,852,,,,,852,852', ',,,,,,852,,852,852,852,890,890,890,890,890,890,,,,890,890,,,,890,,890', '890,890,890,890,890,890,,,,,,890,890,890,890,890,890,890,,,890,,,,,', '890,890,890,890,890,890,890,890,890,890,890,890,,890,890,890,,890,890', '890,890,890,475,475,475,475,475,475,475,,,475,475,,,,,,475,475,,890', ',,890,,,890,890,,,890,,890,475,,475,890,475,475,,475,475,475,475,475', '890,475,,,,890,890,890,890,,890,890,890,890,,,,,890,890,,,,,,,890,,890', '890,890,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,461', '461,461,461,461,461,461,461,461,461,461,,461,461,,,461,461,,741,,,741', ',,741,741,,,741,,741,461,,461,741,461,461,,461,461,461,461,461,741,461', ',,,741,741,741,741,,741,741,741,741,,,,,741,741,,,,,,,741,,741,741,741', '736,736,736,736,736,736,,,,736,736,,,,736,,736,736,736,736,736,736,736', ',,,,,736,736,736,736,736,736,736,,,736,,,,,,736,736,736,736,736,736', '736,736,736,736,736,736,,736,736,736,,736,736,736,736,736,476,476,476', '476,476,476,476,,,476,476,,,,,,476,476,,736,,,736,,,736,736,,,736,,736', '476,,476,736,476,476,,476,476,476,476,476,736,476,,,,736,736,736,736', ',736,736,736,736,,,,,736,736,,,,,,,736,,736,736,736,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,480,480,480,480,480,480,480', '480,,480,480,,,,,,480,480,,234,,,234,,,234,234,,,234,,234,480,,480,234', '480,480,,480,480,480,480,480,234,480,,,,234,234,234,234,,234,234,234', '234,,,,,234,234,,,,,,,234,,234,234,234,846,846,846,846,846,846,,,,846', '846,,,,846,,846,846,846,846,846,846,846,,,,,,846,846,846,846,846,846', '846,,,846,,,,,,846,846,846,846,846,846,846,846,846,846,846,846,,846', '846,846,,846,846,846,846,846,471,471,471,471,471,471,471,,,471,471,', ',,,,471,471,,846,,,846,,,846,846,,,846,,846,471,,471,846,471,471,,471', '471,471,471,471,846,471,,,,846,846,846,846,,846,846,846,846,,,,,846', '846,,,,,,,846,,846,846,846,33,33,33,33,33,33,,,,33,33,,,,33,,33,33,33', '33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33', '33,33,33,33,33,,33,33,33,,33,33,33,33,33,472,472,472,472,472,472,472', ',,472,472,,,,,,472,472,,33,,,33,,,33,33,,,33,,33,472,,472,33,472,472', ',472,472,472,472,472,33,472,,,,33,33,33,33,,33,33,33,33,,,,,33,33,,', ',,,,33,,33,33,33,0,0,0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0', '0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,479,479,479', '479,479,479,479,,,479,479,,,,,,479,479,,0,,,0,,,0,0,,,0,,0,479,,479', '0,479,479,,479,479,479,479,479,0,479,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,,', ',,,0,,0,0,0,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,577', '468,,,,,,,,,,,,,,,,468,468,,577,,,577,,,577,577,,,577,,577,468,,468', '577,468,468,,468,468,,,,577,,,,,577,577,577,577,,577,577,577,577,,,', ',577,577,,,,,,,577,,577,577,577,889,889,889,889,889,889,,,,889,889,', ',,889,,889,889,889,889,889,889,889,,,,,,889,889,889,889,889,889,889', ',,889,,,,,,889,889,889,889,889,889,889,889,889,889,889,889,,889,889', '889,,889,889,889,889,889,469,,,,,,,,,,,,,,,,469,469,,889,,,889,,,889', '889,,,889,,889,469,,469,889,469,469,,469,469,,,,889,,,,,889,889,889', '889,,889,889,889,889,,,,,889,889,,,,,,,889,,889,889,889,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,,,,,331,331,,,,,,,331,,331,331,331,124,124,124,124,124,124', ',,,124,124,,,,124,,124,124,124,124,124,124,124,,,,,,124,124,124,124', '124,124,124,,,124,,,,,,124,124,124,124,124,124,124,124,124,124,124,124', ',124,124,124,,124,124,124,124,124,,,,,,,,,,,,,,,,,,,,124,,,124,,,124', '124,,,124,,124,,,,124,,,,,,,,,124,,,,,124,124,124,124,,124,124,124,124', ',,,,124,124,,,,,,,124,,124,124,124,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,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,964,964,964,964,964,964,,,,964,964,,,,964', ',964,964,964,964,964,964,964,,,,,,964,964,964,964,964,964,964,,,964', ',,,,,964,964,964,964,964,964,964,964,964,964,964,964,,964,964,964,,964', '964,964,964,964,,,,,,,,,,,,,,,,,,,,964,,,964,,,964,964,,,964,,964,,', ',964,,,,,,,,,964,,,,,964,964,964,964,,964,964,964,964,,,,,964,964,,', ',,,,964,,964,964,964,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,209,209,,,,,209,209,,,,,,,209', ',209,209,209,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,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,,959,959,959,959,,,,,959,959,,,,,,,959,,959', '959,959,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,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,580,580,,580,580,580,580,,,,,580,580,,,,,,,580,,580,580,580', '866,866,866,866,866,866,,,,866,866,,,,866,,866,866,866,866,866,866,866', ',,,,,866,866,866,866,866,866,866,,,866,,,,,,866,866,866,866,866,866', '866,866,866,866,866,866,,866,866,866,,866,866,866,866,866,,,,,,,,,,', ',,,,,,,,,866,,,866,,,866,866,,,866,,866,,,,866,,,,,,,,,866,,,,,866,866', '866,866,,866,866,866,866,,,,,866,866,,,,790,790,790,866,790,866,866', '866,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', ',,,788,788,788,790,788,790,790,790,788,788,,,,788,,788,788,788,788,788', '788,788,,,,,,788,788,788,788,788,788,788,,,788,,,,,,,788,,,788,788,788', '788,788,788,788,788,,788,788,788,,788,788,788,788,788,,,,,,,,,,,,,,', ',,,,,788,,,788,,,788,788,,,788,,,,,,788,,,,,,,,,788,,,,,788,788,788', '788,,788,788,788,788,,,,,788,788,,,,787,787,787,788,787,788,788,788', '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', ',,,786,786,786,787,786,787,787,787,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,,,,785,785,785,786,785,786,786,786', '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', ',,,772,772,772,785,772,785,785,785,772,772,,,,772,,772,772,772,772,772', '772,772,,,,,,772,772,772,772,772,772,772,,,772,,,,,,,772,,,772,772,772', '772,772,772,772,772,,772,772,772,,772,772,772,772,772,,,,,,,,,,,,,,', ',,,,,772,,,772,,,772,772,,,772,,,,,,772,,,,,,,,,772,,,,,772,772,772', '772,,772,772,772,772,,,,,772,772,,,,233,233,233,772,233,772,772,772', '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', ',,,236,236,236,233,236,233,233,233,236,236,,,,236,,236,236,236,236,236', '236,236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236', '236,236,236,236,236,,236,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,236,237,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', ',,,238,238,238,237,238,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,,,,239,239,239,238,239,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', ',,,240,240,240,239,240,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,,,,241,241,241,240,241,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', ',,,242,242,242,241,242,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,,,,243,243,243,242,243,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', ',,,244,244,244,243,244,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,,,,245,245,245,244,245,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', ',,,246,246,246,245,246,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,,,,247,247,247,246,247,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', ',,,248,248,248,247,248,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,,,,249,249,249,248,249,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', ',,,250,250,250,249,250,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,,,,251,251,251,250,251,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', ',,,252,252,252,251,252,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,,,,253,253,253,252,253,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', ',,,254,254,254,253,254,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,,,,255,255,255,254,255,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', ',,,256,256,256,255,256,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,,,,257,257,257,256,257,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', ',,,262,262,262,257,262,257,257,257,262,262,,,,262,,262,262,262,262,262', '262,262,,,,,,262,262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262', '262,262,262,262,262,,262,262,262,,262,262,262,262,262,,,,,,,,,,,,,,', ',,,,,262,,,262,,,262,262,,,262,,,,,,262,,,,,,,,,262,,,,,262,262,262', '262,,262,262,262,262,,,,,262,262,,,,764,764,764,262,764,262,262,262', '764,764,,,,764,,764,764,764,764,764,764,764,,,,,,764,764,764,764,764', '764,764,,,764,,,,,,,764,,,764,764,764,764,764,764,764,764,,764,764,764', ',764,764,764,764,764,,,,,,,,,,,,,,,,,,,,764,,,764,,,764,764,,,764,,', ',,,764,,,,,,,,,764,,,,,764,764,764,764,,764,764,764,764,,,,,764,764', ',,,269,269,269,764,269,764,764,764,269,269,,,,269,,269,269,269,269,269', '269,269,,,,,,269,269,269,269,269,269,269,,,269,,,,,,,269,,,269,269,269', '269,269,269,269,269,269,269,269,269,,269,269,269,269,269,,,,,,,,,,,', ',,,,,,,,269,,,269,,,269,269,,,269,,269,,269,,269,,,269,,,,,,269,,,,', '269,269,269,269,,269,269,269,269,,,,,269,269,,,,270,270,270,269,270', '269,269,269,270,270,,,,270,,270,270,270,270,270,270,270,,,,,,270,270', '270,270,270,270,270,,,270,,,,,,,270,,,270,270,270,270,270,270,270,270', '270,270,270,270,,270,270,270,270,270,,,,,,,,,,,,,,,,,,,,270,,,270,,', '270,270,,,270,,270,,270,,270,,,270,,,,,,270,,,,,270,270,270,270,,270', '270,270,270,,,,,270,270,,,,278,278,278,270,278,270,270,270,278,278,', ',,278,,278,278,278,278,278,278,278,,,,,,278,278,278,278,278,278,278', ',,278,,,,,,,278,,,278,278,278,278,278,278,278,278,278,278,278,278,,278', '278,278,278,278,,,,,,,,,,,,,,,,,,,,278,,,278,,,278,278,,,278,,278,,278', ',278,,,278,,,,,,278,,,,,278,278,278,278,,278,278,278,278,,,,,278,278', '278,,,285,285,285,278,285,278,278,278,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,,,,742,742,742,285,742,285,285', '285,742,742,,,,742,,742,742,742,742,742,742,742,,,,,,742,742,742,742', '742,742,742,,,742,,,,,,,742,,,742,742,742,742,742,742,742,742,,742,742', '742,,742,742,742,742,742,,,,,,,,,,,,,,,,,,,,742,,,742,,,742,742,,,742', ',,,,,742,,,,,,,,,742,,,,,742,742,742,742,,742,742,742,742,,,,,742,742', ',,,287,287,287,742,287,742,742,742,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,287,290,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', ',,,291,291,291,290,291,290,290,290,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,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,,,,565,565,565,296,565,296,296,296,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,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5,,,5', ',,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,,,,5', ',,5,,,5,5,,,5,,5,,,,5,,,,,,,,,5,,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,,979', '979,979,5,979,5,5,5,979,979,,,,979,,979,979,979,979,979,979,979,,,,', ',979,979,979,979,979,979,979,,,979,,,,,,,979,,,979,979,979,979,979,979', '979,979,979,979,979,979,,979,979,979,979,979,,,,,,,,,,,,,,,,,,,,979', ',,979,,,979,979,,,979,,979,,979,,979,,,979,,,,,,979,,,,,979,979,979', '979,,979,979,979,979,,,,,979,979,,,,20,20,20,979,20,979,979,979,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,,,,934,934,934,20,934,20,20,20,934,934,,,,934,,934,934', '934,934,934,934,934,,,,,,934,934,934,934,934,934,934,,,934,,,,,,,934', ',,934,934,934,934,934,934,934,934,,934,934,934,,934,934,,,934,,,,,,', ',,,,,,,,,,,,,934,,,934,,,934,934,,,934,,,,,,,,,,,,,,,,,,,,934,934,934', '934,,934,934,934,934,,,,,934,934,,,,29,29,29,934,29,934,934,934,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,,,,,,29,,,,,29,29,29,29,', '29,29,29,29,,,,,29,29,,,,30,30,30,29,30,29,29,29,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,30,,,,31,31,31,30,31,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,,,,34,34', '34,31,34,31,31,31,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34', '34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,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,34,35,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,,,900,,900,900,900,900,900,,,,,,,,,900,,35,35,35,35,,35', '35,35,35,,,,,35,35,,,,35,,900,35,,35,35,35,887,887,887,,887,900,900', ',887,887,900,,,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,,,,878,878', '878,887,878,887,887,887,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,,,,42,42,42,878,42,878,878,878,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,,,,43', '43,43,42,43,42,42,42,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,,,,45,45,45,43,45,43,43,43,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,,,,864,864,864,45,864,45,45,45,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,864,864,864,,864,864,864,864,,,,,864,864,,,,863,863,863,864,863', '864,864,864,863,863,,,,863,,863,863,863,863,863,863,863,,,,,,863,863', '863,863,863,863,863,,,863,,,,,,,863,,,863,863,863,863,863,863,863,863', '863,863,863,863,,863,863,863,863,863,,,,,,,,,,,,,,,,,,,,863,,,863,,', '863,863,,,863,,,,863,,863,,,863,,,,,,863,,,,,863,863,863,863,,863,863', '863,863,,,,,863,863,,,,,,,863,,863,863,863,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,59,59,,59,59', '59,59,,,,,59,59,,,,60,60,60,59,60,59,59,59,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,,,,,60,60,', ',,61,61,61,60,61,60,60,60,61,61,,,,61,,61,61,61,61,61,61,61,,,,,,61', '61,61,61,61,61,61,,,61,,,,,,,61,,,61,61,61,61,61,61,61,61,61,61,61,61', ',61,61,61,61,61,,,,,,,,,,,,,,,,,,,,61,,,61,,,61,61,,,61,,,,,,61,,,61', ',,,,,61,,,,,61,61,61,61,,61,61,61,61,,,,,61,61,,,,64,64,64,61,64,61', '61,61,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,,,,,64,64,,,,65,65,65,64,65,64,64,64,65,65,,,,65,,65', '65,65,65,65,65,65,,,,,,65,65,65,65,65,65,65,,,65,,,,,,,65,,,65,65,65', '65,65,65,65,65,,65,65,65,,65,65,65,65,65,,,,,,,,,,,,,,,,,,,,65,,,65', ',,65,65,,,65,,,,,,65,,,,,,,,,65,,,,,65,65,65,65,,65,65,65,65,,,,,65', '65,,,,68,68,68,65,68,65,65,65,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,68,68,68,,,,,68,68,68,,,,,68,68,,68,68', '68,69,69,69,,69,,,,69,69,,,,69,,69,69,69,69,69,69,69,,,,,,69,69,69,69', '69,69,69,,,69,,,,,,,69,,,69,69,69,69,69,69,69,69,,69,69,69,,69,69,,', '69,,,,,,,,,,,,,,,,,,,,69,,,69,,,69,69,,,69,,69,,,,,,,,,,,,,,,,,,69,69', '69,69,,69,69,69,69,,,,,69,69,,,,70,70,70,69,70,69,69,69,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,70,71,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,,,707,,707,707,707', '707,707,,,,,,,,,707,,71,71,71,71,,71,71,71,71,,,,,71,71,,,,,,707,71', ',71,71,71,113,113,113,113,113,707,707,,113,113,707,,,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,113,113,,,,,113,113,,,,,,113,113,', '113,113,113,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,118,119,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', ',,,120,120,120,119,120,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,,,,121,121,121,120,121,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,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,,,,845,845,845', '122,845,122,122,122,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,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,845,,,,842,842,842,845,842,845,845,845,842,842,,,,842', ',842,842,842,842,842,842,842,,,,,,842,842,842,842,842,842,842,,,842', ',,,,,,842,,,842,842,842,842,842,842,842,842,,842,842,842,,842,842,842', '842,842,,,,,,,,,,,,,,,,,,,,842,,,842,,,842,842,,,842,,,,,,842,,,,,,', ',,842,,,,,842,842,842,842,,842,842,842,842,,,,,842,842,,,,210,210,210', '842,210,842,842,842,210,210,,,,210,,210,210,210,210,210,210,210,,,,', ',210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210,210,210', '210,210,,210,210,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,210,211,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,,,,212,212', '212,211,212,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,212,213,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,213,214,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,,,,215,215,215,214,215,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,,,,220,220,220,215,220,215,215,215,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,220,221,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', ',,,222,222,222,221,222,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,,,692,692,692,222,692,222,222,222', '692,692,,,,692,,692,692,692,692,692,692,692,,,,,,692,692,692,692,692', '692,692,,,692,,,,,,,692,,,692,692,692,692,692,692,692,692,,692,692,692', ',692,692,692,692,692,,,,,,,,,,,,,,,,,,,,692,,,692,,,692,692,,,692,,692', ',,,692,,,,,,,,,692,,,,,692,692,692,692,,692,692,692,692,,,,,692,692', ',,,687,687,687,692,687,692,692,692,687,687,,,,687,,687,687,687,687,687', '687,687,,,,,,687,687,687,687,687,687,687,,,687,,,,,,,687,,,687,687,687', '687,687,687,687,687,,687,687,687,,687,687,,,687,,,,,,,,,,,,,,,,,,,,687', ',,687,,,687,687,,,687,,,,,,,,,,,,,,,,,,,,687,687,687,687,,687,687,687', '687,,,,,687,687,,,,676,676,676,687,676,687,687,687,676,676,,,,676,,676', '676,676,676,676,676,676,,,,,,676,676,676,676,676,676,676,,,676,,,,,', ',676,,,676,676,676,676,676,676,676,676,,676,676,676,,676,676,,,676,', ',,,,,,,,,,,,,,,,,,676,,,676,,,676,676,,,676,,,,,,,,,,,,,,,,,,,,676,676', '676,676,,676,676,676,676,,,,,676,676,,,,673,673,673,676,673,676,676', '676,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,,,673,673,,,673', ',,,,,673,,,,,,,,,673,,,,,673,673,673,673,,673,673,673,673,,,,,673,673', ',,,321,321,321,673,321,673,673,673,321,321,,,,321,,321,321,321,321,321', '321,321,,,,,,321,321,321,321,321,321,321,,,321,,,,,,,321,,,321,321,321', '321,321,321,321,321,,321,321,321,,321,321,,,321,,,,,,,,,,,,,,,,,,,,321', ',,321,,,321,321,,,321,,,,,,,,,,,,,,,,,,,,321,321,321,321,,321,321,321', '321,,,,,321,321,,,,670,670,670,321,670,321,321,321,670,670,,,,670,,670', '670,670,670,670,670,670,,,,,,670,670,670,670,670,670,670,,,670,,,,,', ',670,,,670,670,670,670,670,670,670,670,,670,670,670,,670,670,670,670', '670,,,,,,,,,,,,,,,,,,,,670,,,670,,,670,670,,,670,,,,,,670,,,,,,,,,670', ',,,,670,670,670,670,,670,670,670,670,,,,,670,670,,,,646,646,646,670', '646,670,670,670,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,,,,328,328,328,646,328,646,646,646,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,,,,330,330,330,328', '330,328,328,328,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,,,,645,645,645,330,645,330,330,330,645,645,,,,645,,645', '645,645,645,645,645,645,,,,,,645,645,645,645,645,645,645,,,645,,,,,', ',645,,,645,645,645,645,645,645,645,645,,645,645,645,,645,645,645,645', '645,,,,,,,,,,,,,,,,,,,,645,,,645,,,645,645,,,645,,,,,,645,,,,,,,,,645', ',,,,645,645,645,645,,645,645,645,645,,,,,645,645,,,,641,641,641,645', '641,645,645,645,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,641,640,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,,,,639,639,639,640', '639,640,640,640,639,639,,,,639,,639,639,639,639,639,639,639,,,,,,639', '639,639,639,639,639,639,,,639,,,,,,,639,,,639,639,639,639,639,639,639', '639,639,639,639,639,,639,639,639,639,639,,,,,,,,,,,,,,,,,,,,639,,,639', ',,639,639,,,639,,,,639,,639,,,639,,,,,,639,,,,,639,639,639,639,,639', '639,639,639,,,,,639,639,,,,638,638,638,639,638,639,639,639,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', ',,,635,635,635,638,635,638,638,638,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,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,,,,631,631,631,634,631,634,634,634,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', ',,,630,630,630,631,630,631,631,631,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,,,,629,629,629,630,629,630,630,630', '629,629,,,,629,,629,629,629,629,629,629,629,,,,,,629,629,629,629,629', '629,629,,,629,,,,,,,629,,,629,629,629,629,629,629,629,629,,629,629,629', ',629,629,629,629,629,,,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629,,629', ',,,629,,,,,,,,,629,,,,,629,629,629,629,,629,629,629,629,,,,,629,629', ',,,347,347,347,629,347,629,629,629,347,347,,,,347,,347,347,347,347,347', '347,347,,,,,,347,347,347,347,347,347,347,,,347,,,,,,,347,,,347,347,347', '347,347,347,347,347,,347,347,347,,347,347,347,347,347,,,,,,,,,,,,,,', ',,,,,347,,,347,,,347,347,,,347,,,,,,347,,,,,,,,,347,,,,,347,347,347', '347,,347,347,347,347,,,,,347,347,,,,597,597,597,347,597,347,347,347', '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,,,,587,587,587,597,587,597,597,597,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,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,,,,586,586,586', '587,586,587,587,587,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,,,,368,368,368,586,368,586,586,586,368,368,,,,368', ',368,368,368,368,368,368,368,,,,,,368,368,368,368,368,368,368,,,368', ',,,,,,368,,,368,368,368,368,368,368,368,368,,368,368,368,,368,368,368', '368,368,,,,,,,,,,,,,,,,,,,,368,,,368,,,368,368,,,368,,,,,,368,,,,,,', ',,368,,,,,368,368,368,368,,368,368,368,368,,,,,368,368,,,,540,540,540', '368,540,368,368,368,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,,,,537,537,537,540,537,540,540,540,537,537,', ',,537,,537,537,537,537,537,537,537,,,,,,537,537,537,537,537,537,537', ',,537,,,,,,,537,,,537,537,537,537,537,537,537,537,537,537,537,537,,537', '537,537,537,537,,,,,,,,,,,,,,,,,,,,537,,,537,,,537,537,,,537,,537,,', ',537,,,537,,,,,,537,,,,,537,537,537,537,,537,537,537,537,,,,,537,537', ',,,531,531,531,537,531,537,537,537,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,,,,526,526,526,531,526,531,531,531', '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', ',,,525,525,525,526,525,526,526,526,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,,,,522,522,522,525,522,525,525,525', '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', '522,516,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,,,,384,384,384,516,384,516,516,516', '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', ',,,514,514,514,384,514,384,384,384,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,,,1025,,1025,1025,1025,1025,1025,,,,,,,,,1025', ',514,514,514,514,,514,514,514,514,,,,,514,514,,,,,,1025,514,,514,514', '514,506,506,506,506,506,1025,1025,,506,506,1025,,,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,,506,506,506,506,,,,,506,506,,,,,,506,506,,506,506', '506,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,,,,498,498,498,500,498,500,500,500,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', ',,,496,496,496,498,496,498,498,498,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,496,,,,,496,496,,,,459,459,459,496,459', '496,496,496,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,459,458,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,,,,457,457,457,458,457', '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,,,,455,455,455,457,455,457,457,457,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,,,,412,412,412', '455,412,455,455,455,412,412,,,,412,,412,412,412,412,412,412,412,,,,', ',412,412,412,412,412,412,412,,,412,,,,,,,412,,,412,412,412,412,412,412', '412,412,,412,412,412,,412,412,412,412,412,,,,,,,,,,,,,,,,,,,,412,,,412', ',,412,412,,,412,,,,,,412,,,,,,,,,412,,,,,412,412,412,412,,412,412,412', '412,,,,,412,412,,,,304,304,304,412,304,412,412,412,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,,,999,,999,999,999,999,999', ',,,,,,,,999,,304,304,304,304,,304,304,304,304,,,,,304,304,,,,304,,999', '304,,304,304,304,709,709,709,,709,999,999,,709,709,999,,,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,709,,709,709,709,709,,,,,709,709,,,,,,,709,,709,709,709', '8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8,8,8,8', '8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8,8,,,,8,8', '8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8,8,,,8,8,,,,,,,,,,,,,,8,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,9,9,,,9,9,,,,,,,,,,,,,,9,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,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,626,,,,,,,,,,,,,,626,626', ',626,626,626,626,626,626,626,626,626,626,626,626,,,626,626,,,,,,,,,', ',,,,626,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,,,,,,,,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,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72', '72,72,72,72,72,72,72,,,,72,72,72,72,72,72,72,72,72,72,,,,,,72,72,72', '72,72,72,72,72,72,72,72,72,,72,,,,,,72,72,,72,72,72,72,72,72,72,,,72', '72,,,,72,72,72,72,,,,,,72,,,,,,,,72,72,,72,72,72,72,72,72,72,72,72,72', '72,72,,,72,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748', '748,748,748,748,748,748,748,748,748,,,,748,748,748,748,748,748,748,748', '748,748,,,,,,748,748,748,748,748,748,748,748,748,,,748,,,,,,,,748,748', ',748,748,748,748,748,748,748,,,748,748,,,,748,748,748,748,798,,798,798', '798,798,798,,,,,,,748,748,798,748,748,748,748,748,748,748,748,748,748', '748,748,,,748,,,,,,,798,,980,980,,,980,,,798,798,798,798,,980,980,798', '980,980,980,980,980,980,980,,,980,980,,,,980,980,980,980,,,,,,980,,798', ',,,,,980,980,,980,980,980,980,980,980,980,980,980,980,980,980,527,527', '980,,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,518,518,527,,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,981,981,518,,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,454', '454,981,,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,265,265,454,,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,976,976,265,,976,,,,,,,,976', '976,,976,976,976,976,976,976,976,,,976,976,,,,976,976,976,976,,,,,,976', ',,,,,,,976,976,,976,976,976,976,976,976,976,976,976,976,976,976,528', '528,976,,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,528,528,528,595,595,528,,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,596,596,595,,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', '517,517,596,,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,633,633,517,,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,632,632,633,,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,453,453,632,,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,588,588,453,,588,,,,,,,,588,588,,588,588', '588,588,588,588,588,,,588,588,,,,588,588,588,588,,,,,,588,,,,,,,,588', '588,,588,588,588,588,588,588,588,588,588,588,588,588,216,216,588,,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,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,589,589,217,,589,,,,,,,,589,589,,589', '589,589,589,589,589,589,,,589,589,,,,589,589,589,589,,,,,,589,,,,,,', ',589,589,,589,589,589,589,589,589,589,589,589,589,589,589,,926,589,926', '926,926,926,926,,997,,997,997,997,997,997,926,,,,,,,,997,,894,,894,894', '894,894,894,,,,,,926,,,894,,,,,997,926,926,926,926,,,,926,997,997,997', '997,,,,997,894,,746,,746,746,746,746,746,894,894,894,894,,,,894,746', ',747,,747,747,747,747,747,,545,,545,545,545,545,545,747,,,,,746,,,545', ',,,,,746,746,746,746,,,,746,747,,,,,,,,545,747,747,747,747,,,,747,545', '545,545,545,,,703,545,703,703,703,703,703,1001,,1001,1001,1001,1001', '1001,1003,703,1003,1003,1003,1003,1003,987,1001,987,987,987,987,987', ',1003,,,,,,,987,703,,,,,,,1001,,703,703,703,703,,1003,,703,,1001,1001', ',987,,1001,,1003,1003,,,,1003,,987,987,,,343,987,343,343,343,343,343', ',705,,705,705,705,705,705,343,,,,,,,,705,,928,,928,928,928,928,928,', ',,,,343,343,,928,,,,,705,343,343,343,343,,,,343,705,705,705,705,,,,705', '928,,,,,,,,,928,928,928,928,,,,928' ] racc_action_check = arr = ::Array.new(24615, 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 = [ 4203, 573, nil, 189, nil, 11121, 1528, 931, 22475, 22603, 899, nil, 624, 608, -16, 566, 958, -82, nil, -74, 11383, 2803, 538, nil, 490, nil, 6, 1549, 1169, 11645, 11776, 11907, nil, 4063, 12038, 12169, nil, 390, 464, 460, 461, 283, 12570, 12701, 707, 12832, 235, 922, nil, nil, nil, nil, nil, nil, nil, nil, nil, 954, nil, 13233, 13364, 13495, -13, nil, 13626, 13757, nil, nil, 13888, 14027, 14158, 14289, 22987, nil, nil, nil, nil, nil, nil, 628, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 622, nil, nil, 734, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 195, nil, 14428, nil, nil, nil, nil, 14567, 14698, 14829, 14960, 15099, nil, 4763, nil, 727, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -32, nil, 5183, 15492, 15623, 15754, 15885, 16016, 16147, 24087, 24148, nil, nil, 16278, 16409, 16540, nil, nil, 892, 319, 374, 1039, 375, 950, 994, nil, 6520, 3783, 988, 6651, 6782, 6913, 7044, 7175, 7306, 7437, 7568, 7699, 7830, 7961, 8092, 8223, 8354, 8485, 8616, 8747, 8878, 9009, 9140, 9271, 9402, nil, nil, nil, nil, 9533, nil, nil, 23477, nil, nil, 977, 9795, 9926, nil, nil, nil, nil, nil, nil, nil, 10057, nil, 2383, nil, 936, 925, nil, 10188, 966, 10450, nil, nil, 10581, 10712, nil, nil, 112, nil, 10851, 1363, 928, 875, 2663, 886, 924, 880, 22197, 2243, 814, 372, 706, 937, 630, nil, 889, 834, -8, nil, nil, nil, 856, 264, 805, 17195, nil, 523, 836, 626, nil, 833, 17588, nil, 17719, 4623, 1244, 766, nil, -68, 397, 801, 779, 128, 803, nil, nil, 24485, 505, 48, 47, 19168, 3083, 1963, 49, 858, 735, 3, -18, 594, 813, 28, 839, nil, nil, 1024, 515, 298, nil, 560, nil, 747, 19692, nil, nil, nil, 486, 459, 422, 382, 380, 316, 275, 176, 152, nil, 140, nil, 20740, nil, 197, 260, 295, 301, 327, -30, -41, 308, nil, nil, nil, nil, nil, nil, nil, nil, 604, 22859, nil, nil, nil, nil, 608, nil, nil, 746, 22066, 792, nil, nil, 796, nil, 482, 145, 961, nil, nil, 1823, nil, nil, nil, nil, nil, 1963, 408, nil, 398, 368, 350, 354, 1281, nil, nil, nil, 512, 132, 859, nil, nil, 1681, 1413, nil, nil, nil, 55, nil, 788, 23965, 23416, 21935, 142, 21804, 21673, 21542, 3083, 3503, 973, 980, 615, 616, 618, 619, 4343, 4483, 1632, 3923, 4063, 2943, 3223, 3363, 3643, 1095, 574, 4203, 3783, 2103, 1498, nil, 1090, nil, nil, nil, nil, 581, nil, nil, nil, 583, nil, nil, 21411, nil, 21280, nil, 21149, nil, 257, nil, nil, nil, 21010, 1571, nil, 596, 604, nil, nil, 605, 20871, 609, 20609, 23782, 23294, 484, 656, nil, 20478, 630, nil, 20347, 20216, 23233, 23599, 1364, 2243, 20085, 762, 773, 654, 697, nil, 19954, nil, nil, 19823, nil, nil, nil, nil, 24360, nil, 656, 658, nil, 686, 689, 690, nil, nil, nil, nil, nil, nil, nil, nil, 682, 1173, nil, nil, 10982, nil, nil, nil, 780, nil, nil, nil, 782, nil, nil, 784, 4343, 837, nil, 5463, 61, 846, 847, 843, 853, 19561, 19430, 24026, 24209, 21, nil, nil, 590, nil, 23660, 23721, 19299, nil, nil, 151, 1823, 784, nil, -14, nil, nil, nil, 1092, nil, nil, nil, 756, nil, nil, 255, nil, 159, nil, nil, 748, nil, 754, nil, nil, nil, 22731, nil, 756, 19037, 18906, 18775, 23904, 23843, 18644, 18505, 304, 800, 18374, 18243, 18112, 17981, 801, nil, nil, 17850, 17457, 805, nil, nil, nil, 288, 292, 264, 402, 773, 772, 897, nil, 881, -15, nil, nil, 816, -56, 923, nil, 800, nil, 848, 17326, nil, nil, 17064, nil, -109, 16933, 808, nil, 813, 90, 166, 871, 165, 704, 883, 840, 16802, nil, 917, 157, 974, 16671, nil, nil, nil, 361, 0, 870, 1055, nil, nil, -36, 24412, nil, 24493, nil, 14336, nil, 22336, nil, 1279, nil, 869, 195, 875, nil, nil, nil, nil, 75, nil, 993, nil, nil, nil, nil, nil, 1000, nil, 14, 882, 30, 31, 33, 5, 3643, 847, 816, nil, 915, 3503, 10319, nil, 1046, 2803, 24335, 24352, 23100, nil, nil, nil, nil, nil, nil, 2523, nil, nil, nil, nil, nil, nil, nil, 937, 9664, 944, 404, 127, 844, 0, nil, 2523, 6389, nil, 959, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 6258, 6127, 5996, 5865, 360, 5734, nil, 43, nil, nil, 982, nil, nil, 23133, nil, 2943, nil, nil, nil, nil, 974, 136, nil, nil, 1101, nil, 2103, 977, 1025, nil, nil, nil, nil, nil, nil, 983, 1029, 987, nil, nil, nil, 989, 990, nil, 992, 995, nil, 1001, nil, nil, 1005, 741, -95, 1274, nil, 39, nil, 15361, 177, nil, 15230, 3923, 26, 203, nil, 212, 167, 3223, nil, 218, 121, 62, nil, 141, 178, 270, nil, nil, 13094, 12963, 2663, 5603, nil, 275, 279, nil, 291, 315, 317, nil, 354, 337, 339, 12439, nil, nil, nil, nil, 4903, nil, nil, -11, 12308, nil, 4483, 3363, 1259, nil, nil, 24296, nil, 1344, nil, 1612, nil, 12216, nil, nil, nil, nil, 259, 1478, 423, nil, 35, nil, nil, 313, nil, nil, nil, 549, nil, nil, nil, 471, nil, nil, 1058, nil, nil, 24271, nil, 24510, nil, 1087, nil, nil, 453, 11514, 924, 516, nil, 2383, -7, 20, 926, 521, -10, nil, 487, 597, -84, nil, nil, nil, 478, 480, 483, 500, 508, 1406, 518, 1380, 5323, nil, nil, nil, nil, 5043, 527, nil, nil, 535, 536, 537, 540, nil, 542, nil, 995, 23538, nil, 733, 11252, 23172, 23355, 32, nil, nil, nil, 1289, 24433, nil, nil, nil, nil, 1284, 693, 441, 841, nil, 24279, nil, 22244, nil, 24419, nil, 24426, nil, nil, 876, 895, nil, 868, 23, -1, 21, -9, nil, 972, 230, nil, nil, 255, 424, 436, 439, 46, nil, 20918, nil, nil, nil, nil, 553, nil ] racc_action_default = [ -3, -605, -1, -591, -4, -605, -7, -605, -605, -605, -605, -30, -605, -605, -34, -605, -605, -287, -46, -593, -605, -51, -55, -56, -57, -61, -264, -264, -264, -300, -329, -330, -73, -12, -77, -85, -87, -605, -495, -496, -605, -605, -605, -605, -223, -605, -593, -237, -278, -279, -280, -281, -282, -283, -284, -285, -286, -579, -289, -293, -604, -569, -308, -391, -605, -605, -53, -53, -591, -605, -605, -605, -605, -331, -332, -334, -436, -437, -438, -439, -440, -461, -443, -444, -463, -465, -448, -453, -457, -459, -475, -461, -477, -479, -480, -481, -482, -577, -484, -485, -578, -487, -488, -489, -490, -491, -492, -493, -494, -499, -500, -605, -2, -592, -600, -601, -602, -6, -605, -605, -605, -605, -605, -8, -3, -18, -605, -116, -117, -118, -119, -120, -121, -122, -123, -124, -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, -197, -198, -23, -125, -12, -605, -605, -605, -605, -605, -254, -605, -605, -589, -590, -605, -605, -593, -594, -50, -605, -495, -496, -605, -287, -605, -605, -229, -605, -12, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -238, -239, -240, -241, -605, -400, -402, -605, -587, -588, -62, -254, -605, -307, -406, -415, -417, -68, -412, -69, -593, -70, -244, -259, -268, -268, -263, -605, -269, -605, -461, -571, -605, -605, -71, -72, -591, -13, -605, -16, -605, -75, -12, -593, -605, -78, -81, -12, -93, -94, -605, -605, -101, -300, -303, -593, -605, -329, -330, -333, -413, -605, -83, -605, -89, -297, -478, -605, -217, -218, -605, -230, -605, -12, -291, -593, -245, -597, -597, -605, -605, -597, -605, -309, -310, -527, -52, -605, -605, -605, -12, -12, -591, -605, -592, -495, -496, -605, -605, -287, -605, -344, -345, -111, -112, -605, -114, -605, -287, -503, -605, -495, -496, -322, -116, -117, -158, -159, -160, -176, -181, -188, -191, -324, -605, -567, -605, -441, -605, -605, -605, -605, -605, -605, -605, -605, 1032, -5, -603, -24, -25, -26, -27, -28, -605, -605, -20, -21, -22, -126, -605, -31, -33, -274, -605, -605, -273, -32, -605, -35, -605, -287, -43, -45, -199, -249, -269, -47, -48, -36, -200, -249, -593, -255, -268, -268, -580, -581, -264, -410, -582, -583, -581, -580, -264, -409, -411, -582, -583, -42, -207, -49, -593, -306, -605, -605, -605, -254, -297, -605, -605, -605, -208, -209, -210, -211, -212, -213, -214, -215, -219, -220, -221, -222, -224, -225, -226, -227, -228, -231, -232, -233, -234, -593, -242, -421, -264, -580, -581, -59, -63, -593, -265, -419, -421, -593, -302, -260, -605, -261, -605, -266, -605, -270, -605, -574, -576, -11, -592, -15, -17, -593, -74, -295, -90, -79, -605, -593, -254, -605, -605, -100, -605, -478, -605, -86, -91, -605, -605, -605, -605, -243, -235, -605, -428, -605, -593, -605, -246, -599, -598, -248, -599, -298, -299, -570, -392, -527, -395, -566, -566, -510, -512, -512, -512, -526, -528, -529, -530, -531, -532, -533, -534, -535, -605, -537, -539, -541, -546, -548, -549, -551, -556, -558, -559, -561, -562, -563, -605, -12, -335, -336, -12, -605, -605, -605, -605, -605, -605, -254, -605, -605, -297, -53, -111, -112, -113, -605, -605, -254, -318, -501, -605, -12, -505, -326, -593, -442, -462, -467, -605, -469, -445, -464, -605, -466, -447, -605, -450, -605, -452, -455, -605, -456, -605, -476, -9, -19, -605, -29, -277, -605, -605, -254, -605, -605, -605, -605, -414, -605, -256, -258, -605, -605, -64, -253, -407, -605, -605, -66, -408, -305, -595, -580, -581, -580, -581, -593, -605, -605, -422, -58, -403, -419, -251, -605, -380, -605, -301, -268, -267, -271, -605, -572, -573, -605, -14, -76, -605, -82, -88, -593, -580, -581, -252, -584, -99, -605, -84, -605, -206, -216, -593, -604, -604, -290, -292, -294, -597, -605, -593, -605, -508, -509, -605, -605, -519, -605, -522, -605, -524, -605, -346, -605, -348, -350, -357, -593, -540, -550, -560, -564, -604, -337, -604, -54, -338, -339, -313, -314, -605, -316, -605, -593, -580, -581, -584, -296, -12, -111, -112, -115, -593, -12, -605, -320, -605, -12, -527, -527, -605, -568, -468, -471, -472, -473, -474, -12, -446, -449, -451, -454, -458, -460, -127, -275, -605, -593, -580, -581, -581, -580, -44, -250, -605, -596, -268, -38, -202, -39, -203, -65, -40, -205, -41, -204, -67, -605, -605, -605, -605, -414, -605, -401, -380, -405, -404, -605, -416, -381, -593, -383, -12, -418, -262, -272, -575, -80, -414, -92, -304, -604, -342, -12, -429, -604, -430, -431, -247, -393, -396, -398, -385, -605, -566, -547, -565, -511, -512, -512, -538, -512, -512, -557, -512, -535, -552, -593, -605, -355, -605, -536, -605, -340, -605, -605, -315, -605, -12, -414, -605, -414, -605, -605, -12, -323, -605, -593, -605, -327, -605, -276, -414, -37, -201, -257, -605, -236, -12, -60, -566, -566, -362, -364, -364, -364, -379, -605, -593, -535, -543, -544, -554, -420, -10, -12, -435, -343, -605, -605, -433, -12, -12, -605, -394, -507, -605, -515, -605, -517, -605, -520, -605, -523, -525, -347, -349, -353, -605, -358, -311, -605, -312, -271, -604, -317, -319, -502, -605, -325, -504, -506, -505, -470, -423, -605, -360, -361, -370, -372, -605, -375, -605, -377, -382, -605, -605, -542, -605, -434, -12, -495, -496, -605, -605, -287, -432, -605, -605, -593, -387, -389, -390, -512, -512, -512, -512, -351, -605, -356, -605, -12, -424, -425, -426, -321, -12, -566, -545, -363, -364, -364, -364, -364, -555, -364, -384, -553, -605, -297, -428, -254, -605, -605, -297, -397, -399, -386, -605, -605, -513, -516, -518, -521, -605, -354, -604, -605, -359, -605, -367, -605, -369, -605, -373, -605, -376, -378, -296, -584, -427, -593, -580, -581, -584, -296, -388, -512, -352, -341, -328, -364, -364, -364, -364, -414, -514, -605, -365, -368, -371, -374, -364, -366 ] clist = [ '221,216,334,303,381,130,130,264,16,266,272,276,341,16,533,281,281,281', '116,317,317,585,436,442,636,6,430,330,225,497,6,691,345,346,135,135', '350,225,225,225,428,16,308,308,546,822,448,414,415,344,344,348,349,344', '317,317,317,224,125,208,577,580,282,282,282,265,553,16,745,130,488,484', '225,225,302,671,225,355,365,365,489,320,123,116,332,324,397,398,399', '400,133,133,113,335,268,275,277,668,594,668,840,663,831,344,344,344', '344,421,112,821,421,2,715,299,561,301,421,671,536,539,948,16,543,283', '283,283,225,225,225,225,16,427,16,117,907,700,701,447,6,809,904,386', '800,523,869,615,617,401,389,6,950,393,872,390,336,339,279,292,293,657', '391,828,972,611,613,616,616,392,665,755,843,367,371,351,742,826,823', '966,750,497,661,1,626,723,827,328,829,403,337,410,360,207,674,660,882', '383,338,425,426,342,437,281,957,358,598,382,449,450,331,875,453,534', '333,741,446,1014,671,16,225,418,225,225,418,225,852,601,451,602,418', '225,225,972,748,920,874,402,876,947,544,668,668,395,16,413,413,950,698', '409,420,789,408,420,993,817,728,281,281,420,343,436,442,835,904,697', '281,889,655,890,553,965,866,795,869,806,869,302,869,225,225,873,968', '483,494,448,744,428,225,933,1016,317,524,831,491,517,520,492,792,960', '272,813,886,385,276,282,16,510,317,387,16,116,527,282,308,16,535,581', '561,388,,,,507,,682,,847,,679,,308,739,,344,682,849,,677,,,16,588,302', ',869,686,869,302,869,502,869,513,688,,600,,225,16,16,828,860,961,,,521', '283,116,,266,,604,,869,283,508,1017,951,225,,,,299,,509,506,828,299', '964,515,,582,583,758,225,758,682,,,490,731,505,130,,682,632,,493,,969', '740,970,893,637,,802,,,,,,,643,,,603,850,,648,,854,135,,,,,,,,437,436', '442,671,281,765,,779,846,,855,856,784,,446,,625,649,584,924,925,,,,828', '656,225,668,,776,778,643,553,553,781,783,,561,,561,1008,1019,816,,,830', '524,832,133,,,,,,524,,662,,,,666,805,317,,437,281,,642,,,317,,,647,437', ',675,16,446,690,561,561,678,802,,308,,225,446,421,,,814,308,,,,,916', '421,421,694,225,,421,421,,,,704,706,708,922,,,659,996,,,,775,777,,,', '780,782,,,,,,877,,,437,281,,871,736,,,,437,,962,281,,16,446,,16,,667', ',446,,,225,724,,862,,,938,,1023,,225,,,749,16,794,776,778,783,781,743', '437,281,720,730,,722,,130,959,,,,,,446,696,,,815,,637,,418,225,,,16', ',793,524,,995,418,418,,,135,418,418,,807,,,770,637,317,,,,561,643,420', '421,648,,952,317,953,,954,762,420,420,820,857,,420,420,308,,,,,861,862', ',,26,808,308,,877,26,877,,,,,,971,,973,133,710,851,,637,26,,,,,,839', ',637,26,26,26,413,26,344,,,,,774,,,,,,,,,,,,16,130,637,,,16,225,884', '26,16,,888,,26,26,,,26,,16,1015,,,,877,,824,,,824,1020,,1021,848,1022', '820,418,,,,,,682,,,,1009,,,,,,858,,,,,,1030,,,,26,,16,420,909,26,26', '26,26,26,29,26,,16,,29,895,897,,899,901,344,902,,,,,,,,29,,,903,,881', ',,,29,29,29,,29,225,,885,,16,,,820,710,918,16,837,,317,,,915,,,870,', '919,317,,16,29,,,,,29,29,,,29,,935,912,878,,,16,,,,941,,16,16,,,,26', '26,26,26,26,26,26,,,,,26,26,26,,,,317,,,,,937,,980,26,985,29,945,946', ',,29,29,29,29,29,,29,,975,,,,16,988,989,990,991,,,,,,,,927,929,931,', '26,26,437,281,,16,,,,26,16,446,,,,,446,978,,,,710,,710,,225,,26,637', ',,26,824,,,870,26,870,994,870,,,,,,,,,39,1024,,878,,39,878,,878,,878', ',,,26,29,29,29,29,29,29,29,,,,,29,29,29,,26,26,26,39,307,307,,,,,29', ',955,710,,998,1000,1002,1004,,1005,26,,,,,,,870,39,870,,870,,870,,,26', ',354,370,370,370,,,29,29,878,,878,,878,,878,29,,870,,,,,,,710,,710,1026', '1027,1028,1029,,,29,,,878,29,1031,,,,29,,39,,,,,,,,,39,,39,,,,,710,', ',,,,,,29,26,,,,,,,,,,,,,,,29,29,29,,,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,', ',,26,29,,,,,,,,,26,,,,,,,,,,39,,,,,26,,,,,,,,,,,,,,,,,,,,39,,,,,,,,', ',,,,,,,,,,,,,,,,,26,29,,26,,,,,,,26,,,,,,,,,,26,,,,26,,,,,,,,38,,,,39', '38,,,39,,,,307,39,,,,,,,29,26,26,,,26,,,,307,29,26,26,38,306,306,26', '26,,39,,,,,,29,,,,,,,,,,,39,39,,38,,,,,,,,,,353,369,369,369,,,,,,,,', ',,,,,,,,,,29,,,29,,,,,,,29,,,,,,,,,,29,,38,,29,,,,,,,38,,38,,,26,,,', ',26,26,,,26,,,,,,,,29,29,26,,29,,,,,,29,29,,,,29,29,,,26,,,,,,,,,,,', ',,,,,,,,,,340,,,,,,26,,,,,,,,,,,26,,,,,,,38,,,,,39,,,,,,,,307,,,,,,', ',307,,,26,38,,,26,,,,,,26,,,,,,,29,,,,,29,29,26,,29,,,,,,,,,17,29,,', ',17,26,,,,,,26,26,,,,39,29,,39,,,,,,,,38,,,,38,17,310,310,306,38,,,', '39,,,,,29,,,,,,,306,,,,29,,17,,26,,38,,,411,424,,357,366,366,,,39,,', ',,,38,38,26,,,,,26,29,,,,29,,,,,,29,,,,26,,,,,,,,,,29,17,,,307,,,,,', '17,,17,,,307,,29,,,,,,29,29,,,,,499,,501,,,503,504,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,39,,,,,39,,,29,39,13,,,,,13,,,,39,,,,,,,,,,29,,,,17,29,419', ',,419,,,,,13,419,,,,,29,,,,,,,,,17,,,,38,,39,,,,,13,306,,,,,39,,,306', '359,,,,,,,,,,,,,628,,,,,,,,,,,,,,,,,,39,,,,,,39,,,,17,,,13,17,,,,310', '17,39,,13,38,13,,38,,,,,,370,,,310,,39,,,,940,,39,39,17,,38,,,,,,,,', ',,,,,,17,17,,,669,,340,,672,,,15,,,,,15,,38,,,,,,,,370,,,,39,,,,,,,', ',,,,,,15,669,,13,340,416,,39,416,,,,39,,416,,306,,,,,,,,,,15,306,13', '716,,,,,,,,,,,,,,,,,,,,,424,,,,,,,,,,,,,,,,,,,,,,,,,,38,,,,15,38,,,', '38,,,,15,13,15,,763,13,38,,,,13,,,669,340,,,,,,,,,,,17,,,,,,,,310,,', '13,,,,,310,,,,803,,,804,,,38,,13,13,,,,,,,,38,,,,,812,,,,,,,,,,,,,,', ',,834,,,15,,15,,,15,,,,17,38,15,17,,,,38,,,,,,,,,15,,,,,38,,,17,,,,', ',,754,,369,,,,,38,,,,939,859,38,38,,,,,,,,419,,,,17,,,,,,419,419,,,', '419,419,,,,,,,,,15,,,,15,,,,,15,,369,,,,38,,,,,,310,,,,,,,,,,,310,,', '15,38,13,,,,38,,,,,911,,,,,,15,15,,,,,,,,,,,340,,,,,,,,,,,,,,,,,17,', ',,,17,,,,17,,,,,,,,,,17,,,,,,,,13,,,13,,,,,,419,,,,,,,,,,,,,,,13,,,', ',,,,,,,,,17,,,,,,,,,,,17,,,,,416,,,,13,,,,,,416,416,,,,416,416,,,,,', ',,,,,,,,17,,,,,,17,,,,,,,,,,,,,15,17,,,,,,,,,,,,366,,,,,17,,,,943,,17', '17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,13,,,,13,,,366,,15,,17,15,', '13,,,,,,,,,,,,,,,,,416,17,15,,,,17,,,,,,,,,,,,,,,,,,,,,,13,,,15,,,,15', ',,,13,,15,15,,,,15,15,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,232,13,,,,,,', ',280,280,280,,,,13,,,,,,,326,327,,329,,,,,,,13,,,,944,,13,13,280,280', ',,,,,,,,,,,,,,,,15,,,,,15,,,,15,,,,,,,,,,15,,,,,,,,,,13,,,,,,,15,,,', ',,,,,,,,,,13,,,,,13,,,,,,,,,15,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,15,,,,,,15,,,,,,,,,,,,,,15,,280,423,,,429,280,,,,,429,,,,', '15,,,,,,15,15,232,,,460,461,462,463,464,465,466,467,468,469,470,471', '472,473,474,475,476,477,478,479,480,481,,,,,482,,,,,,,280,280,,,,,,', ',280,,15,,,,,280,,280,,,280,280,,,,,,,,,,15,,,,,15,,,,,,,,,,,,,,,,,', ',,,,529,,530,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,280,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,280,,429,429,429,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,280,,280,,280', ',,,,,,,,,,,,,,,280,,,,,,,,,429,689,,,,,,,,,,,280,,,280,,,,,,,,,,,,,', ',,,,,,,,,,,280,,,,,,,,,,,,,,,,,,,,,280,280,,,,,,,,,,280,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,280,429,280,,,,771,,,280,280,429,429,,,,429,429,', ',,,,,,,,,,,,,,,,,,,,,,280,,,280,,,,,,,,,,,,,,,,,,,280,,,,,,,,,,,,,,', ',,280,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,280,,,,', ',,,429,,,,,,,,,,,,,429,429,429,429,,865,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,280,,,,,,,,,,,,,,,,,,280,429,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,280' ] racc_goto_table = arr = ::Array.new(3567, 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 = [ '34,32,77,56,63,64,64,141,29,32,81,81,96,29,9,39,39,39,104,73,73,101', '43,43,31,7,30,34,29,83,7,11,18,18,68,68,18,29,29,29,70,29,29,29,140', '122,70,23,23,25,25,36,36,25,73,73,73,21,16,16,99,99,78,78,78,42,170', '29,105,64,45,43,29,29,10,185,29,29,29,29,30,57,8,104,7,71,18,18,18,18', '67,67,6,78,44,44,44,84,61,84,100,46,181,25,25,25,25,19,4,132,19,2,118', '52,175,53,19,185,79,79,134,29,79,80,80,80,29,29,29,29,29,27,29,5,119', '123,123,27,7,12,116,158,130,58,122,162,162,7,161,7,135,158,128,164,80', '80,51,51,51,144,165,176,182,163,163,163,163,166,144,168,12,62,62,4,169', '174,178,179,167,83,48,1,69,37,129,74,129,26,76,24,20,17,15,82,13,94', '95,25,25,98,81,39,119,102,103,106,25,25,107,132,32,108,109,110,64,134', '185,29,29,29,29,29,29,29,111,112,54,113,29,29,29,182,114,115,120,2,126', '133,136,84,84,5,29,78,78,135,140,21,21,31,10,21,119,137,101,39,39,21', '138,43,43,118,116,139,39,142,30,143,170,122,130,46,122,31,122,10,122', '29,29,129,128,145,54,70,9,70,29,132,119,73,56,181,147,32,34,148,151', '152,81,153,154,157,81,78,29,54,73,159,29,104,32,78,29,29,34,18,175,160', ',,,7,,43,,31,,30,,29,61,,25,43,31,,58,,,29,32,10,,122,58,122,10,122', '158,122,57,70,,25,,29,29,29,176,31,12,,,71,80,104,,32,,25,,122,80,8', '100,129,29,,,,52,,53,6,176,52,105,53,,10,10,163,29,163,43,,,51,30,4', '64,,43,32,,51,,129,30,129,123,34,,83,,,,,,,81,,,42,9,,81,,9,68,,,,,', ',,81,43,43,185,39,30,,45,99,,140,140,45,,64,,16,54,4,123,123,,,,176', '34,29,84,,70,70,81,170,170,70,70,,175,,175,11,129,79,,,127,56,127,67', ',,,,,56,,54,,,,54,58,73,,81,39,,44,,,73,,,44,81,,54,29,64,25,175,175', '54,83,,29,,29,64,19,,,23,29,,,,,9,19,19,54,29,,19,19,,,,173,173,173', '9,,,44,123,,,,27,27,,,,27,27,,,,,,175,,,81,39,,127,36,,,,81,,101,39', ',29,64,,29,,80,,64,,,29,104,,70,,,99,,31,,29,,,54,29,96,70,70,70,70', '104,81,39,10,78,,10,,64,99,,,,,,64,80,,,77,,34,,29,29,,,29,,141,56,', '9,29,29,,,68,29,29,,56,,,7,34,73,,,,175,81,21,19,81,,127,73,127,,127', '16,21,21,34,63,,21,21,29,,,,,27,70,,,47,54,29,,175,47,175,,,,,,127,', '127,67,117,18,,34,47,,,,,,54,,34,47,47,47,78,47,25,,,,,80,,,,,,,,,,', ',29,64,34,,,29,29,77,47,29,,77,,47,47,,,47,,29,127,,,,175,,124,,,124', '127,,127,10,127,34,29,,,,,,43,,,,30,,,,,,10,,,,,,127,,,,47,,29,21,18', '47,47,47,47,47,50,47,,29,,50,173,173,,173,173,25,173,,,,,,,,50,,,54', ',10,,,,50,50,50,,50,29,,10,,29,,,34,117,54,29,117,,73,,,104,,,124,,104', '73,,29,50,,,,,50,50,,,50,,29,10,177,,,29,,,,29,,29,29,,,,47,47,47,47', '47,47,47,,,,,47,47,47,,,,73,,,,,10,,32,47,34,50,10,10,,,50,50,50,50', '50,,50,,29,,,,29,173,173,173,173,,,,,,,,125,125,125,,47,47,81,39,,29', ',,,47,29,64,,,,,64,10,,,,117,,117,,29,,47,34,,,47,124,,,124,47,124,10', '124,,,,,,,,,60,173,,177,,60,177,,177,,177,,,,47,50,50,50,50,50,50,50', ',,,,50,50,50,,47,47,47,60,60,60,,,,,50,,117,117,,125,125,125,125,,125', '47,,,,,,,124,60,124,,124,,124,,,47,,60,60,60,60,,,50,50,177,,177,,177', ',177,50,,124,,,,,,,117,,117,125,125,125,125,,,50,,,177,50,125,,,,50', ',60,,,,,,,,,60,,60,,,,,117,,,,,,,,50,47,,,,,,,,,,,,,,,50,50,50,,,,,', ',,,,,,,,,,,,,50,,,,,,,,,,,,,,,47,50,,,,,,,,,47,,,,,,,,,,60,,,,,47,,', ',,,,,,,,,,,,,,,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,47,50,,47,,,,,,,47,,,,', ',,,,,47,,,,47,,,,,,,,59,,,,60,59,,,60,,,,60,60,,,,,,,50,47,47,,,47,', ',,60,50,47,47,59,59,59,47,47,,60,,,,,,50,,,,,,,,,,,60,60,,59,,,,,,,', ',,59,59,59,59,,,,,,,,,,,,,,,,,,,50,,,50,,,,,,,50,,,,,,,,,,50,,59,,50', ',,,,,,59,,59,,,47,,,,,47,47,,,47,,,,,,,,50,50,47,,50,,,,,,50,50,,,,50', '50,,,47,,,,,,,,,,,,,,,,,,,,,,75,,,,,,47,,,,,,,,,,,47,,,,,,,59,,,,,60', ',,,,,,,60,,,,,,,,60,,,47,59,,,47,,,,,,47,,,,,,,50,,,,,50,50,47,,50,', ',,,,,,,33,50,,,,33,47,,,,,,47,47,,,,60,50,,60,,,,,,,,59,,,,59,33,33', '33,59,59,,,,60,,,,,50,,,,,,,59,,,,50,,33,,47,,59,,,75,75,,33,33,33,', ',60,,,,,,59,59,47,,,,,47,50,,,,50,,,,,,50,,,,47,,,,,,,,,,50,33,,,60', ',,,,,33,,33,,,60,,50,,,,,,50,50,,,,,75,,75,,,75,75,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,60,,,,,60,,,50,60,22,,,,,22,,,,60,,,,,,,,,,50,,,,33,50,33', ',,33,,,,,22,33,,,,,50,,,,,,,,,33,,,,59,,60,,,,,22,59,,,,,60,,,59,22', ',,,,,,,,,,,,75,,,,,,,,,,,,,,,,,,60,,,,,,60,,,,33,,,22,33,,,,33,33,60', ',22,59,22,,59,,,,,,60,,,33,,60,,,,60,,60,60,33,,59,,,,,,,,,,,,,,,33', '33,,,75,,75,,75,,,28,,,,,28,,59,,,,,,,,60,,,,60,,,,,,,,,,,,,,28,75,', '22,75,22,,60,22,,,,60,,22,,59,,,,,,,,,,28,59,22,75,,,,,,,,,,,,,,,,,', ',,,75,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,28,59,,,,59,,,,28,22,28,,75,22', '59,,,,22,,,75,75,,,,,,,,,,,33,,,,,,,,33,,,22,,,,,33,,,,75,,,75,,,59', ',22,22,,,,,,,,59,,,,,75,,,,,,,,,,,,,,,,,75,,,28,,28,,,28,,,,33,59,28', '33,,,,59,,,,,,,,,28,,,,,59,,,33,,,,,,,33,,59,,,,,59,,,,59,75,59,59,', ',,,,,,33,,,,33,,,,,,33,33,,,,33,33,,,,,,,,,28,,,,28,,,,,28,,59,,,,59', ',,,,,33,,,,,,,,,,,33,,,28,59,22,,,,59,,,,,75,,,,,,28,28,,,,,,,,,,,75', ',,,,,,,,,,,,,,,,33,,,,,33,,,,33,,,,,,,,,,33,,,,,,,,22,,,22,,,,,,33,', ',,,,,,,,,,,,,22,,,,,,,,,,,,,33,,,,,,,,,,,33,,,,,22,,,,22,,,,,,22,22', ',,,22,22,,,,,,,,,,,,,,33,,,,,,33,,,,,,,,,,,,,28,33,,,,,,,,,,,,33,,,', ',33,,,,33,,33,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22,,,,,22,,,,22,,,33', ',28,,33,28,,22,,,,,,,,,,,,,,,,,22,33,28,,,,33,,,,,,,,,,,,,,,,,,,,,,22', ',,28,,,,28,,,,22,,28,28,,,,28,28,,,,,,,,,,,,,,,,,,,,,,,,,,,22,,,,,35', '22,,,,,,,,35,35,35,,,,22,,,,,,,35,35,,35,,,,,,,22,,,,22,,22,22,35,35', ',,,,,,,,,,,,,,,,28,,,,,28,,,,28,,,,,,,,,,28,,,,,,,,,,22,,,,,,,28,,,', ',,,,,,,,,,22,,,,,22,,,,,,,,,28,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,28,,,,,,28,,,,,,,,,,,,,,28,,35,35,,,35,35,,,,,35,,,,,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,,28,,,,,35,,35,,,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,,,,35,35', ',,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,', '35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,35', ',,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,35' ] racc_goto_check = arr = ::Array.new(3567, 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, 181, 111, nil, 105, 128, 89, 25, 75, -317, 41, -501, -552, -615, nil, -314, 50, 182, -32, -104, 121, 37, 1756, -163, -21, -15, 62, -83, 1929, 8, -189, -406, -15, 1570, -19, 2587, -15, -398, nil, -14, nil, nil, 41, -194, 68, -198, -390, 693, -307, nil, 816, 127, 80, 82, 4, nil, -31, 46, -178, 1302, 1010, -265, 101, -68, -3, nil, nil, 82, 26, -225, -174, 44, nil, -15, 141, 1426, 128, -58, 33, -217, 94, -16, -291, -254, -399, nil, nil, nil, nil, nil, nil, nil, nil, nil, 123, 135, -50, nil, 136, -285, -620, -330, 134, -163, 15, -534, 133, 150, -121, 153, -385, -519, -146, -154, -371, -624, -696, 147, -450, -704, -564, nil, -654, -412, 71, 87, -562, -223, -646, -519, -522, nil, -589, -654, -771, -741, -105, -444, 195, -281, -299, -15, -553, -552, -324, 18, nil, 19, 21, nil, nil, -362, -615, -393, -513, nil, nil, 222, 60, 223, 232, 62, -244, -224, 66, 72, 78, -430, -440, -425, -277, nil, nil, -4, -528, -229, -542, 90, -523, -746, nil, -603, -766, nil, nil, -423 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 352, 297, nil, nil, 532, nil, 841, nil, 294, 295, nil, nil, nil, 11, 12, 18, 230, nil, nil, 14, nil, 417, 231, 325, nil, nil, 596, 229, 452, 21, nil, nil, 347, 22, 23, 24, nil, 685, nil, nil, nil, 314, nil, 25, 311, 431, 32, nil, nil, 34, 37, 36, nil, 226, 227, 364, nil, 132, 439, 131, 134, 77, 78, nil, 422, 92, 44, 47, 262, 286, nil, 810, 432, nil, 433, 444, 644, 495, 284, 270, 48, 49, 50, 51, 52, 53, 54, 55, 56, nil, 271, 62, nil, nil, nil, nil, nil, nil, 578, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 712, 560, nil, 713, 967, 868, 548, nil, 549, nil, nil, 550, nil, 552, nil, 797, nil, nil, nil, 558, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 443, nil, nil, 664, 658, nil, nil, nil, nil, 76, 79, 80, nil, nil, nil, nil, nil, 606, nil, nil, nil, nil, nil, nil, 825, 747, 547, nil, 551, 833, 563, 565, 566, 879, 569, 570, 880, 573, 576, 289 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 146, :_reduce_none, 2, 147, :_reduce_2, 0, 148, :_reduce_3, 1, 148, :_reduce_4, 3, 148, :_reduce_5, 2, 148, :_reduce_6, 1, 150, :_reduce_none, 2, 150, :_reduce_8, 3, 153, :_reduce_9, 4, 154, :_reduce_10, 2, 155, :_reduce_11, 0, 159, :_reduce_12, 1, 159, :_reduce_13, 3, 159, :_reduce_14, 2, 159, :_reduce_15, 1, 160, :_reduce_none, 2, 160, :_reduce_17, 0, 171, :_reduce_18, 4, 152, :_reduce_19, 3, 152, :_reduce_20, 3, 152, :_reduce_21, 3, 152, :_reduce_22, 2, 152, :_reduce_23, 3, 152, :_reduce_24, 3, 152, :_reduce_25, 3, 152, :_reduce_26, 3, 152, :_reduce_27, 3, 152, :_reduce_28, 4, 152, :_reduce_29, 1, 152, :_reduce_none, 3, 152, :_reduce_31, 3, 152, :_reduce_32, 3, 152, :_reduce_33, 1, 152, :_reduce_none, 3, 164, :_reduce_35, 3, 164, :_reduce_36, 6, 164, :_reduce_37, 5, 164, :_reduce_38, 5, 164, :_reduce_39, 5, 164, :_reduce_40, 5, 164, :_reduce_41, 3, 164, :_reduce_42, 1, 172, :_reduce_none, 3, 172, :_reduce_44, 1, 172, :_reduce_none, 1, 170, :_reduce_none, 3, 170, :_reduce_47, 3, 170, :_reduce_48, 3, 170, :_reduce_49, 2, 170, :_reduce_50, 1, 170, :_reduce_none, 1, 163, :_reduce_none, 0, 183, :_reduce_53, 3, 181, :_reduce_54, 1, 166, :_reduce_none, 1, 166, :_reduce_none, 1, 185, :_reduce_none, 4, 185, :_reduce_58, 0, 193, :_reduce_59, 4, 190, :_reduce_60, 1, 192, :_reduce_none, 2, 184, :_reduce_62, 3, 184, :_reduce_63, 4, 184, :_reduce_64, 5, 184, :_reduce_65, 4, 184, :_reduce_66, 5, 184, :_reduce_67, 2, 184, :_reduce_68, 2, 184, :_reduce_69, 2, 184, :_reduce_70, 2, 184, :_reduce_71, 2, 184, :_reduce_72, 1, 165, :_reduce_73, 3, 165, :_reduce_74, 1, 198, :_reduce_75, 3, 198, :_reduce_76, 1, 197, :_reduce_none, 2, 197, :_reduce_78, 3, 197, :_reduce_79, 5, 197, :_reduce_80, 2, 197, :_reduce_81, 4, 197, :_reduce_82, 2, 197, :_reduce_83, 4, 197, :_reduce_84, 1, 197, :_reduce_85, 3, 197, :_reduce_86, 1, 201, :_reduce_none, 3, 201, :_reduce_88, 2, 200, :_reduce_89, 3, 200, :_reduce_90, 1, 203, :_reduce_91, 3, 203, :_reduce_92, 1, 202, :_reduce_93, 1, 202, :_reduce_94, 4, 202, :_reduce_95, 3, 202, :_reduce_96, 3, 202, :_reduce_97, 3, 202, :_reduce_98, 3, 202, :_reduce_99, 2, 202, :_reduce_100, 1, 202, :_reduce_101, 1, 167, :_reduce_102, 1, 167, :_reduce_103, 4, 167, :_reduce_104, 3, 167, :_reduce_105, 3, 167, :_reduce_106, 3, 167, :_reduce_107, 3, 167, :_reduce_108, 2, 167, :_reduce_109, 1, 167, :_reduce_110, 1, 206, :_reduce_111, 1, 206, :_reduce_none, 2, 207, :_reduce_113, 1, 207, :_reduce_114, 3, 207, :_reduce_115, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 211, :_reduce_121, 1, 211, :_reduce_none, 1, 161, :_reduce_none, 1, 161, :_reduce_none, 1, 162, :_reduce_125, 0, 214, :_reduce_126, 4, 162, :_reduce_127, 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_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_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, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 3, 180, :_reduce_199, 3, 180, :_reduce_200, 6, 180, :_reduce_201, 5, 180, :_reduce_202, 5, 180, :_reduce_203, 5, 180, :_reduce_204, 5, 180, :_reduce_205, 4, 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, 3, 180, :_reduce_214, 3, 180, :_reduce_215, 4, 180, :_reduce_216, 2, 180, :_reduce_217, 2, 180, :_reduce_218, 3, 180, :_reduce_219, 3, 180, :_reduce_220, 3, 180, :_reduce_221, 3, 180, :_reduce_222, 1, 180, :_reduce_none, 3, 180, :_reduce_224, 3, 180, :_reduce_225, 3, 180, :_reduce_226, 3, 180, :_reduce_227, 3, 180, :_reduce_228, 2, 180, :_reduce_229, 2, 180, :_reduce_230, 3, 180, :_reduce_231, 3, 180, :_reduce_232, 3, 180, :_reduce_233, 3, 180, :_reduce_234, 3, 180, :_reduce_235, 6, 180, :_reduce_236, 1, 180, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 3, 217, :_reduce_242, 3, 217, :_reduce_243, 1, 220, :_reduce_none, 1, 221, :_reduce_none, 2, 221, :_reduce_none, 4, 221, :_reduce_247, 2, 221, :_reduce_248, 1, 215, :_reduce_none, 3, 215, :_reduce_250, 3, 226, :_reduce_251, 0, 227, :_reduce_252, 1, 227, :_reduce_none, 0, 175, :_reduce_254, 1, 175, :_reduce_none, 2, 175, :_reduce_none, 4, 175, :_reduce_257, 2, 175, :_reduce_258, 1, 196, :_reduce_259, 2, 196, :_reduce_260, 2, 196, :_reduce_261, 4, 196, :_reduce_262, 1, 196, :_reduce_263, 0, 230, :_reduce_264, 2, 189, :_reduce_265, 2, 229, :_reduce_266, 2, 228, :_reduce_267, 0, 228, :_reduce_268, 1, 223, :_reduce_269, 2, 223, :_reduce_270, 3, 223, :_reduce_271, 4, 223, :_reduce_272, 1, 169, :_reduce_273, 1, 169, :_reduce_none, 3, 168, :_reduce_275, 4, 168, :_reduce_276, 2, 168, :_reduce_277, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_288, 0, 252, :_reduce_289, 4, 218, :_reduce_290, 0, 253, :_reduce_291, 4, 218, :_reduce_292, 0, 254, :_reduce_293, 4, 218, :_reduce_294, 3, 218, :_reduce_295, 3, 218, :_reduce_296, 2, 218, :_reduce_297, 3, 218, :_reduce_298, 3, 218, :_reduce_299, 1, 218, :_reduce_300, 4, 218, :_reduce_301, 3, 218, :_reduce_302, 1, 218, :_reduce_303, 5, 218, :_reduce_304, 4, 218, :_reduce_305, 3, 218, :_reduce_306, 2, 218, :_reduce_307, 1, 218, :_reduce_none, 2, 218, :_reduce_309, 2, 218, :_reduce_310, 6, 218, :_reduce_311, 6, 218, :_reduce_312, 4, 218, :_reduce_313, 4, 218, :_reduce_314, 5, 218, :_reduce_315, 4, 218, :_reduce_316, 6, 218, :_reduce_317, 0, 255, :_reduce_318, 6, 218, :_reduce_319, 0, 256, :_reduce_320, 7, 218, :_reduce_321, 0, 257, :_reduce_322, 5, 218, :_reduce_323, 0, 258, :_reduce_324, 6, 218, :_reduce_325, 0, 259, :_reduce_326, 0, 260, :_reduce_327, 9, 218, :_reduce_328, 1, 218, :_reduce_329, 1, 218, :_reduce_330, 1, 218, :_reduce_331, 1, 218, :_reduce_332, 1, 174, :_reduce_none, 1, 195, :_reduce_334, 1, 244, :_reduce_none, 1, 244, :_reduce_none, 2, 244, :_reduce_337, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 245, :_reduce_none, 5, 245, :_reduce_341, 1, 157, :_reduce_none, 2, 157, :_reduce_343, 1, 247, :_reduce_none, 1, 247, :_reduce_none, 1, 261, :_reduce_346, 3, 261, :_reduce_347, 1, 264, :_reduce_348, 3, 264, :_reduce_349, 1, 263, :_reduce_none, 4, 263, :_reduce_351, 6, 263, :_reduce_352, 3, 263, :_reduce_353, 5, 263, :_reduce_354, 2, 263, :_reduce_355, 4, 263, :_reduce_356, 1, 263, :_reduce_357, 3, 263, :_reduce_358, 4, 265, :_reduce_359, 2, 265, :_reduce_360, 2, 265, :_reduce_361, 1, 265, :_reduce_362, 2, 270, :_reduce_363, 0, 270, :_reduce_364, 6, 271, :_reduce_365, 8, 271, :_reduce_366, 4, 271, :_reduce_367, 6, 271, :_reduce_368, 4, 271, :_reduce_369, 2, 271, :_reduce_none, 6, 271, :_reduce_371, 2, 271, :_reduce_372, 4, 271, :_reduce_373, 6, 271, :_reduce_374, 2, 271, :_reduce_375, 4, 271, :_reduce_376, 2, 271, :_reduce_377, 4, 271, :_reduce_378, 1, 271, :_reduce_none, 0, 275, :_reduce_380, 1, 275, :_reduce_381, 3, 276, :_reduce_382, 1, 276, :_reduce_383, 4, 276, :_reduce_384, 1, 277, :_reduce_385, 4, 277, :_reduce_386, 1, 278, :_reduce_387, 3, 278, :_reduce_388, 1, 279, :_reduce_389, 1, 279, :_reduce_none, 0, 283, :_reduce_391, 0, 284, :_reduce_392, 4, 243, :_reduce_393, 4, 281, :_reduce_394, 1, 281, :_reduce_395, 0, 287, :_reduce_396, 4, 282, :_reduce_397, 0, 288, :_reduce_398, 4, 282, :_reduce_399, 0, 290, :_reduce_400, 4, 286, :_reduce_401, 2, 186, :_reduce_402, 4, 186, :_reduce_403, 5, 186, :_reduce_404, 5, 186, :_reduce_405, 2, 242, :_reduce_406, 4, 242, :_reduce_407, 4, 242, :_reduce_408, 3, 242, :_reduce_409, 3, 242, :_reduce_410, 3, 242, :_reduce_411, 2, 242, :_reduce_412, 1, 242, :_reduce_413, 4, 242, :_reduce_414, 0, 292, :_reduce_415, 4, 241, :_reduce_416, 0, 293, :_reduce_417, 4, 241, :_reduce_418, 0, 294, :_reduce_419, 3, 191, :_reduce_420, 0, 295, :_reduce_421, 0, 296, :_reduce_422, 4, 289, :_reduce_423, 5, 246, :_reduce_424, 1, 297, :_reduce_425, 1, 297, :_reduce_none, 6, 156, :_reduce_427, 0, 156, :_reduce_428, 1, 298, :_reduce_429, 1, 298, :_reduce_none, 1, 298, :_reduce_none, 2, 299, :_reduce_432, 1, 299, :_reduce_none, 2, 158, :_reduce_434, 1, 158, :_reduce_none, 1, 231, :_reduce_none, 1, 231, :_reduce_none, 1, 231, :_reduce_none, 1, 232, :_reduce_439, 1, 301, :_reduce_440, 2, 301, :_reduce_441, 3, 302, :_reduce_442, 1, 302, :_reduce_443, 1, 302, :_reduce_444, 3, 233, :_reduce_445, 4, 234, :_reduce_446, 3, 235, :_reduce_447, 0, 306, :_reduce_448, 3, 306, :_reduce_449, 1, 307, :_reduce_450, 2, 307, :_reduce_451, 3, 237, :_reduce_452, 0, 309, :_reduce_453, 3, 309, :_reduce_454, 3, 236, :_reduce_455, 3, 238, :_reduce_456, 0, 310, :_reduce_457, 3, 310, :_reduce_458, 0, 311, :_reduce_459, 3, 311, :_reduce_460, 0, 303, :_reduce_461, 2, 303, :_reduce_462, 0, 304, :_reduce_463, 2, 304, :_reduce_464, 0, 305, :_reduce_465, 2, 305, :_reduce_466, 1, 308, :_reduce_467, 2, 308, :_reduce_468, 0, 313, :_reduce_469, 4, 308, :_reduce_470, 1, 312, :_reduce_471, 1, 312, :_reduce_472, 1, 312, :_reduce_473, 1, 312, :_reduce_none, 1, 212, :_reduce_475, 3, 213, :_reduce_476, 1, 300, :_reduce_477, 2, 300, :_reduce_478, 1, 216, :_reduce_479, 1, 216, :_reduce_480, 1, 216, :_reduce_481, 1, 216, :_reduce_482, 1, 204, :_reduce_483, 1, 204, :_reduce_484, 1, 204, :_reduce_485, 1, 204, :_reduce_486, 1, 204, :_reduce_487, 1, 205, :_reduce_488, 1, 205, :_reduce_489, 1, 205, :_reduce_490, 1, 205, :_reduce_491, 1, 205, :_reduce_492, 1, 205, :_reduce_493, 1, 205, :_reduce_494, 1, 239, :_reduce_495, 1, 239, :_reduce_496, 1, 173, :_reduce_497, 1, 173, :_reduce_498, 1, 178, :_reduce_499, 1, 178, :_reduce_500, 0, 314, :_reduce_501, 4, 248, :_reduce_502, 0, 248, :_reduce_503, 3, 250, :_reduce_504, 0, 316, :_reduce_505, 3, 250, :_reduce_506, 4, 315, :_reduce_507, 2, 315, :_reduce_508, 2, 315, :_reduce_509, 1, 315, :_reduce_510, 2, 318, :_reduce_511, 0, 318, :_reduce_512, 6, 285, :_reduce_513, 8, 285, :_reduce_514, 4, 285, :_reduce_515, 6, 285, :_reduce_516, 4, 285, :_reduce_517, 6, 285, :_reduce_518, 2, 285, :_reduce_519, 4, 285, :_reduce_520, 6, 285, :_reduce_521, 2, 285, :_reduce_522, 4, 285, :_reduce_523, 2, 285, :_reduce_524, 4, 285, :_reduce_525, 1, 285, :_reduce_526, 0, 285, :_reduce_527, 1, 280, :_reduce_528, 1, 280, :_reduce_529, 1, 280, :_reduce_530, 1, 280, :_reduce_531, 1, 262, :_reduce_none, 1, 262, :_reduce_533, 1, 320, :_reduce_534, 1, 321, :_reduce_535, 3, 321, :_reduce_536, 1, 272, :_reduce_537, 3, 272, :_reduce_538, 1, 322, :_reduce_539, 2, 323, :_reduce_540, 1, 323, :_reduce_541, 2, 324, :_reduce_542, 1, 324, :_reduce_543, 1, 266, :_reduce_544, 3, 266, :_reduce_545, 1, 317, :_reduce_546, 3, 317, :_reduce_547, 1, 325, :_reduce_none, 1, 325, :_reduce_none, 2, 267, :_reduce_550, 1, 267, :_reduce_551, 3, 326, :_reduce_552, 3, 327, :_reduce_553, 1, 273, :_reduce_554, 3, 273, :_reduce_555, 1, 319, :_reduce_556, 3, 319, :_reduce_557, 1, 328, :_reduce_none, 1, 328, :_reduce_none, 2, 274, :_reduce_560, 1, 274, :_reduce_561, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 2, 269, :_reduce_564, 2, 268, :_reduce_565, 0, 268, :_reduce_566, 1, 251, :_reduce_none, 3, 251, :_reduce_568, 0, 240, :_reduce_569, 2, 240, :_reduce_none, 1, 225, :_reduce_571, 3, 225, :_reduce_572, 3, 330, :_reduce_573, 2, 330, :_reduce_574, 4, 330, :_reduce_575, 2, 330, :_reduce_576, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 291, :_reduce_none, 1, 291, :_reduce_none, 1, 291, :_reduce_none, 1, 187, :_reduce_none, 1, 187, :_reduce_none, 1, 177, :_reduce_589, 1, 177, :_reduce_590, 0, 149, :_reduce_none, 1, 149, :_reduce_none, 0, 179, :_reduce_none, 1, 179, :_reduce_none, 2, 199, :_reduce_595, 2, 176, :_reduce_596, 0, 224, :_reduce_none, 1, 224, :_reduce_none, 1, 224, :_reduce_none, 1, 249, :_reduce_600, 1, 249, :_reduce_none, 1, 151, :_reduce_none, 2, 151, :_reduce_none, 0, 222, :_reduce_604 ] racc_reduce_n = 605 racc_shift_n = 1032 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tDSTAR => 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, :tREGEXP_OPT => 119, :tWORDS_BEG => 120, :tQWORDS_BEG => 121, :tSYMBOLS_BEG => 122, :tQSYMBOLS_BEG => 123, :tSTRING_DBEG => 124, :tSTRING_DVAR => 125, :tSTRING_END => 126, :tSTRING_DEND => 127, :tSTRING => 128, :tSYMBOL => 129, :tNL => 130, :tEH => 131, :tCOLON => 132, :tCOMMA => 133, :tSPACE => 134, :tSEMI => 135, :tLAMBDA => 136, :tLAMBEG => 137, :tCHARACTER => 138, :tRATIONAL => 139, :tIMAGINARY => 140, :tLABEL_END => 141, :tANDDOT => 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tDSTAR", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING_DEND", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tANDDOT", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "begin_block", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "lhs", "mrhs", "mrhs_arg", "expr", "@1", "command_rhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "opt_nl", "arg", "expr_value_do", "do", "@2", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "brace_body", "fcall", "@3", "operation", "k_return", "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", "@4", "arg_rhs", "simple_numeric", "rel_expr", "primary", "relop", "arg_value", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@5", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "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", "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@15", "@16", "f_args", "do_block", "@17", "@18", "do_body", "@19", "operation3", "@20", "@21", "@22", "@23", "@24", "cases", "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", "@25", "@26", "args_tail", "@27", "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", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], *val[1]) result end def _reduce_9(val, _values, result) result = val result end def _reduce_10(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_11(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_12(val, _values, result) result = [] result end def _reduce_13(val, _values, result) result = [ val[0] ] result end def _reduce_14(val, _values, result) result = val[0] << val[2] result end def _reduce_15(val, _values, result) result = [ val[1] ] result end # reduce 16 omitted def _reduce_17(val, _values, result) diagnostic :error, :begin_in_method, nil, val[0] result end def _reduce_18(val, _values, result) @lexer.state = :expr_fname result end def _reduce_19(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_20(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_21(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_22(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_23(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_24(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_25(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_26(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_27(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_28(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_29(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 30 omitted def _reduce_31(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_32(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_33(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end # reduce 34 omitted def _reduce_35(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_36(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_37(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_38(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_39(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_40(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_41(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_42(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end # reduce 43 omitted def _reduce_44(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end # reduce 45 omitted # reduce 46 omitted def _reduce_47(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_48(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_49(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_50(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) @lexer.cond.push(true) result end def _reduce_54(val, _values, result) @lexer.cond.pop result = [ val[1], val[2] ] result end # reduce 55 omitted # reduce 56 omitted # reduce 57 omitted def _reduce_58(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_59(val, _values, result) @context.push(:block) result end def _reduce_60(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end # reduce 61 omitted def _reduce_62(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_63(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_64(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_65(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_66(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_67(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_68(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_69(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_70(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_71(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_72(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_73(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_74(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_75(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_76(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 77 omitted def _reduce_78(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_79(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_80(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_81(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_82(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_83(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_84(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_85(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_86(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 87 omitted def _reduce_88(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_89(val, _values, result) result = [ val[0] ] result end def _reduce_90(val, _values, result) result = val[0] << val[1] result end def _reduce_91(val, _values, result) result = [ val[0] ] result end def _reduce_92(val, _values, result) result = val[0] << val[2] result end def _reduce_93(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_94(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_95(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_96(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_97(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_98(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_99(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_100(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_101(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_102(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_103(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_104(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_105(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_106(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_107(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_108(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_109(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_110(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_111(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 112 omitted def _reduce_113(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_114(val, _values, result) result = @builder.const(val[0]) result end def _reduce_115(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 116 omitted # reduce 117 omitted # reduce 118 omitted # reduce 119 omitted # reduce 120 omitted def _reduce_121(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 122 omitted # reduce 123 omitted # reduce 124 omitted def _reduce_125(val, _values, result) result = [ val[0] ] result end def _reduce_126(val, _values, result) @lexer.state = :expr_fname result end def _reduce_127(val, _values, result) result = val[0] << val[3] result end # 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 # reduce 197 omitted # reduce 198 omitted def _reduce_199(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_200(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_201(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_202(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_203(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_204(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_205(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_206(val, _values, result) const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) result end def _reduce_207(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_214(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_215(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_216(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) result end def _reduce_217(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_218(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end # reduce 223 omitted def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_225(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_229(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_230(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_231(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_232(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_233(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_235(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_236(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 237 omitted # reduce 238 omitted # reduce 239 omitted # reduce 240 omitted # reduce 241 omitted def _reduce_242(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_243(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end # reduce 244 omitted # reduce 245 omitted # reduce 246 omitted def _reduce_247(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_248(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end # reduce 249 omitted def _reduce_250(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_251(val, _values, result) result = val result end def _reduce_252(val, _values, result) result = [ nil, [], nil ] result end # reduce 253 omitted def _reduce_254(val, _values, result) result = [] result end # reduce 255 omitted # reduce 256 omitted def _reduce_257(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_258(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_259(val, _values, result) result = [ val[0] ] result end def _reduce_260(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_261(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_262(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_263(val, _values, result) result = [ val[0] ] result end def _reduce_264(val, _values, result) # When branch gets invoked by RACC's lookahead # and command args start with '[' or '(' # we need to put `true` to the cmdarg stack # **before** `false` pushed by lexer # m [], n # ^ # Right here we have cmdarg [...0] because # lexer pushed it on '[' # We need to modify cmdarg stack to [...10] # # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack # and later lexer pushes corresponding bits on top of it. last_token = @last_token[0] lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.push(true) @lexer.cmdarg.push(top) else @lexer.cmdarg.push(true) end result end def _reduce_265(val, _values, result) # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) # but the push must be done after cmdarg.pop() in the parser. # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, # cmdarg.pop() to pop 1 pushed by command_args, # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. last_token = @last_token[0] lookahead = last_token == :tLBRACE_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.pop @lexer.cmdarg.push(top) else @lexer.cmdarg.pop end result = val[1] result end def _reduce_266(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_267(val, _values, result) result = [ val[1] ] result end def _reduce_268(val, _values, result) result = [] result end def _reduce_269(val, _values, result) result = [ val[0] ] result end def _reduce_270(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_271(val, _values, result) result = val[0] << val[2] result end def _reduce_272(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_273(val, _values, result) result = @builder.array(nil, val[0], nil) result end # reduce 274 omitted def _reduce_275(val, _values, result) result = val[0] << val[2] result end def _reduce_276(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_277(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end # reduce 278 omitted # reduce 279 omitted # reduce 280 omitted # reduce 281 omitted # reduce 282 omitted # reduce 283 omitted # reduce 284 omitted # reduce 285 omitted # reduce 286 omitted # reduce 287 omitted def _reduce_288(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_289(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_290(val, _values, result) @lexer.cmdarg.pop result = @builder.begin_keyword(val[0], val[2], val[3]) result end def _reduce_291(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_292(val, _values, result) result = @builder.begin(val[0], val[1], val[3]) result end def _reduce_293(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_294(val, _values, result) result = @builder.begin(val[0], nil, val[3]) result end def _reduce_295(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_296(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_297(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_298(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_299(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_300(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_301(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_302(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_303(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_304(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_305(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_306(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_307(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 308 omitted def _reduce_309(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_310(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_311(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_312(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) result end def _reduce_313(val, _values, result) result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) result end def _reduce_314(val, _values, result) result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) result end def _reduce_315(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_316(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_317(val, _values, result) result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) result end def _reduce_318(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:class) result end def _reduce_319(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_320(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:sclass) result end def _reduce_321(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_322(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) result end def _reduce_323(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.cmdarg.pop @static_env.unextend result end def _reduce_324(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:def) result end def _reduce_325(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_326(val, _values, result) @lexer.state = :expr_fname result end def _reduce_327(val, _values, result) @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:defs) result end def _reduce_328(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop result end def _reduce_329(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_330(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_331(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_332(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 333 omitted def _reduce_334(val, _values, result) if @context.in_class? diagnostic :error, :invalid_return, nil, val[0] end result end # reduce 335 omitted # reduce 336 omitted def _reduce_337(val, _values, result) result = val[1] result end # reduce 338 omitted # reduce 339 omitted # reduce 340 omitted def _reduce_341(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 342 omitted def _reduce_343(val, _values, result) result = val result end # reduce 344 omitted # reduce 345 omitted def _reduce_346(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_347(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_348(val, _values, result) result = [ val[0] ] result end def _reduce_349(val, _values, result) result = val[0] << val[2] result end # reduce 350 omitted def _reduce_351(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])) result end def _reduce_352(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) result end def _reduce_353(val, _values, result) result = val[0]. push(@builder.restarg(val[2])) result end def _reduce_354(val, _values, result) result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) result end def _reduce_355(val, _values, result) result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_356(val, _values, result) result = [ @builder.restarg(val[0], val[1]), *val[3] ] result end def _reduce_357(val, _values, result) result = [ @builder.restarg(val[0]) ] result end def _reduce_358(val, _values, result) result = [ @builder.restarg(val[0]), *val[2] ] result end def _reduce_359(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_360(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_361(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_362(val, _values, result) result = [ val[0] ] result end def _reduce_363(val, _values, result) result = val[1] result end def _reduce_364(val, _values, result) result = [] result end def _reduce_365(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_366(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_367(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_368(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_369(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 370 omitted def _reduce_371(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_372(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_373(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_374(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_375(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_376(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_377(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_378(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 379 omitted def _reduce_380(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_381(val, _values, result) @lexer.state = :expr_value result end def _reduce_382(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_383(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_384(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_385(val, _values, result) result = [] result end def _reduce_386(val, _values, result) result = val[2] result end def _reduce_387(val, _values, result) result = [ val[0] ] result end def _reduce_388(val, _values, result) result = val[0] << val[2] result end def _reduce_389(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 390 omitted def _reduce_391(val, _values, result) @static_env.extend_dynamic result end def _reduce_392(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_393(val, _values, result) @lexer.cmdarg.pop result = [ val[1], val[3] ] @static_env.unextend result end def _reduce_394(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_395(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_396(val, _values, result) @context.push(:lambda) result end def _reduce_397(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_398(val, _values, result) @context.push(:lambda) result end def _reduce_399(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_400(val, _values, result) @context.push(:block) result end def _reduce_401(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_402(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_403(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_404(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_405(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_406(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_407(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_408(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_409(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_410(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_411(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_412(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_413(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_414(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_415(val, _values, result) @context.push(:block) result end def _reduce_416(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_417(val, _values, result) @context.push(:block) result end def _reduce_418(val, _values, result) result = [ val[0], *val[2], val[3] ] @context.pop result end def _reduce_419(val, _values, result) @static_env.extend_dynamic result end def _reduce_420(val, _values, result) result = [ val[1], val[2] ] @static_env.unextend result end def _reduce_421(val, _values, result) @static_env.extend_dynamic result end def _reduce_422(val, _values, result) @lexer.cmdarg.push(false) result end def _reduce_423(val, _values, result) result = [ val[2], val[3] ] @static_env.unextend @lexer.cmdarg.pop result end def _reduce_424(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_425(val, _values, result) result = [ val[0] ] result end # reduce 426 omitted def _reduce_427(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_428(val, _values, result) result = [] result end def _reduce_429(val, _values, result) result = [ val[0] ] result end # reduce 430 omitted # reduce 431 omitted def _reduce_432(val, _values, result) result = [ val[0], val[1] ] result end # reduce 433 omitted def _reduce_434(val, _values, result) result = [ val[0], val[1] ] result end # reduce 435 omitted # reduce 436 omitted # reduce 437 omitted # reduce 438 omitted def _reduce_439(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_440(val, _values, result) result = [ val[0] ] result end def _reduce_441(val, _values, result) result = val[0] << val[1] result end def _reduce_442(val, _values, result) string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_443(val, _values, result) string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_444(val, _values, result) result = @builder.character(val[0]) result end def _reduce_445(val, _values, result) string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) result end def _reduce_446(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_447(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_448(val, _values, result) result = [] result end def _reduce_449(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_450(val, _values, result) result = [ val[0] ] result end def _reduce_451(val, _values, result) result = val[0] << val[1] result end def _reduce_452(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_453(val, _values, result) result = [] result end def _reduce_454(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_455(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_456(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_457(val, _values, result) result = [] result end def _reduce_458(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_459(val, _values, result) result = [] result end def _reduce_460(val, _values, result) result = val[0] << @builder.symbol_internal(val[1]) result end def _reduce_461(val, _values, result) result = [] result end def _reduce_462(val, _values, result) result = val[0] << val[1] result end def _reduce_463(val, _values, result) result = [] result end def _reduce_464(val, _values, result) result = val[0] << val[1] result end def _reduce_465(val, _values, result) result = [] result end def _reduce_466(val, _values, result) result = val[0] << val[1] result end def _reduce_467(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_468(val, _values, result) result = val[1] result end def _reduce_469(val, _values, result) @lexer.cmdarg.push(false) @lexer.cond.push(false) result end def _reduce_470(val, _values, result) @lexer.cmdarg.pop @lexer.cond.pop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_471(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_472(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_473(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 474 omitted def _reduce_475(val, _values, result) @lexer.state = :expr_end result = @builder.symbol(val[0]) result end def _reduce_476(val, _values, result) @lexer.state = :expr_end result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_477(val, _values, result) result = val[0] result end def _reduce_478(val, _values, result) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end result end def _reduce_479(val, _values, result) @lexer.state = :expr_end result = @builder.integer(val[0]) result end def _reduce_480(val, _values, result) @lexer.state = :expr_end result = @builder.float(val[0]) result end def _reduce_481(val, _values, result) @lexer.state = :expr_end result = @builder.rational(val[0]) result end def _reduce_482(val, _values, result) @lexer.state = :expr_end result = @builder.complex(val[0]) result end def _reduce_483(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_484(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_485(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_486(val, _values, result) result = @builder.const(val[0]) result end def _reduce_487(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_488(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_489(val, _values, result) result = @builder.self(val[0]) result end def _reduce_490(val, _values, result) result = @builder.true(val[0]) result end def _reduce_491(val, _values, result) result = @builder.false(val[0]) result end def _reduce_492(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_493(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_494(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_495(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_496(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_497(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_498(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_499(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_500(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_501(val, _values, result) @lexer.state = :expr_value result end def _reduce_502(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_503(val, _values, result) result = nil result end def _reduce_504(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_505(val, _values, result) result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_506(val, _values, result) @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) result end def _reduce_507(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_508(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_509(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_510(val, _values, result) result = [ val[0] ] result end def _reduce_511(val, _values, result) result = val[1] result end def _reduce_512(val, _values, result) result = [] result end def _reduce_513(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_514(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_515(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_516(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_517(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_518(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_519(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_520(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_521(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_522(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_523(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_524(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_525(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_526(val, _values, result) result = val[0] result end def _reduce_527(val, _values, result) result = [] result end def _reduce_528(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_529(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_530(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_531(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 532 omitted def _reduce_533(val, _values, result) @static_env.declare val[0][0] result = val[0] result end def _reduce_534(val, _values, result) result = val[0] result end def _reduce_535(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_536(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_537(val, _values, result) result = [ val[0] ] result end def _reduce_538(val, _values, result) result = val[0] << val[2] result end def _reduce_539(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] result end def _reduce_540(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_541(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_542(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_543(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_544(val, _values, result) result = [ val[0] ] result end def _reduce_545(val, _values, result) result = val[0] << val[2] result end def _reduce_546(val, _values, result) result = [ val[0] ] result end def _reduce_547(val, _values, result) result = val[0] << val[2] result end # reduce 548 omitted # reduce 549 omitted def _reduce_550(val, _values, result) @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] result end def _reduce_551(val, _values, result) result = [ @builder.kwrestarg(val[0]) ] result end def _reduce_552(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_553(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_554(val, _values, result) result = [ val[0] ] result end def _reduce_555(val, _values, result) result = val[0] << val[2] result end def _reduce_556(val, _values, result) result = [ val[0] ] result end def _reduce_557(val, _values, result) result = val[0] << val[2] result end # reduce 558 omitted # reduce 559 omitted def _reduce_560(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_561(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 562 omitted # reduce 563 omitted def _reduce_564(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_565(val, _values, result) result = [ val[1] ] result end def _reduce_566(val, _values, result) result = [] result end # reduce 567 omitted def _reduce_568(val, _values, result) result = val[1] result end def _reduce_569(val, _values, result) result = [] result end # reduce 570 omitted def _reduce_571(val, _values, result) result = [ val[0] ] result end def _reduce_572(val, _values, result) result = val[0] << val[2] result end def _reduce_573(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_574(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end def _reduce_575(val, _values, result) result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) result end def _reduce_576(val, _values, result) result = @builder.kwsplat(val[0], val[1]) result end # reduce 577 omitted # reduce 578 omitted # reduce 579 omitted # reduce 580 omitted # reduce 581 omitted # reduce 582 omitted # reduce 583 omitted # reduce 584 omitted # reduce 585 omitted # reduce 586 omitted # reduce 587 omitted # reduce 588 omitted def _reduce_589(val, _values, result) result = [:dot, val[0][1]] result end def _reduce_590(val, _values, result) result = [:anddot, val[0][1]] result end # reduce 591 omitted # reduce 592 omitted # reduce 593 omitted # reduce 594 omitted def _reduce_595(val, _values, result) result = val[1] result end def _reduce_596(val, _values, result) result = val[1] result end # reduce 597 omitted # reduce 598 omitted # reduce 599 omitted def _reduce_600(val, _values, result) yyerrok result end # reduce 601 omitted # reduce 602 omitted # reduce 603 omitted def _reduce_604(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby25 end # module Parser parser-2.7.0.2/lib/parser/diagnostic/0000755000004100000410000000000013617025313017373 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/diagnostic/engine.rb0000644000004100000410000000476313617025313021177 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # {Parser::Diagnostic::Engine} provides a basic API for dealing with # diagnostics by delegating them to registered consumers. # # @example # buffer = Parser::Source::Buffer.new(__FILE__) # buffer.code = 'foobar' # # consumer = lambda do |diagnostic| # puts diagnostic.message # end # # engine = Parser::Diagnostic::Engine.new(consumer) # diagnostic = Parser::Diagnostic.new( # :warning, :unexpected_token, { :token => 'abc' }, buffer, 1..2) # # engine.process(diagnostic) # => "unexpected token abc" # # @api public # # @!attribute [rw] consumer # @return [#call(Diagnostic)] # # @!attribute [rw] all_errors_are_fatal # When set to `true` any error that is encountered will result in # {Parser::SyntaxError} being raised. # @return [Boolean] # # @!attribute [rw] ignore_warnings # When set to `true` warnings will be ignored. # @return [Boolean] # class Diagnostic::Engine attr_accessor :consumer attr_accessor :all_errors_are_fatal attr_accessor :ignore_warnings ## # @param [#call(Diagnostic)] consumer # def initialize(consumer=nil) @consumer = consumer @all_errors_are_fatal = false @ignore_warnings = false end ## # Processes a `diagnostic`: # * Passes the diagnostic to the consumer, if it's not a warning when # `ignore_warnings` is set. # * After that, raises {Parser::SyntaxError} when `all_errors_are_fatal` # is set to true. # # @param [Parser::Diagnostic] diagnostic # @return [Parser::Diagnostic::Engine] # @see ignore? # @see raise? # def process(diagnostic) if ignore?(diagnostic) # do nothing elsif @consumer @consumer.call(diagnostic) end if raise?(diagnostic) raise Parser::SyntaxError, diagnostic end self end protected ## # Checks whether `diagnostic` should be ignored. # # @param [Parser::Diagnostic] diagnostic # @return [Boolean] # def ignore?(diagnostic) @ignore_warnings && diagnostic.level == :warning end ## # Checks whether `diagnostic` should be raised as an exception. # # @param [Parser::Diagnostic] diagnostic # @return [Boolean] # def raise?(diagnostic) (@all_errors_are_fatal && diagnostic.level == :error) || diagnostic.level == :fatal end end end parser-2.7.0.2/lib/parser/static_environment.rb0000644000004100000410000000142113617025313021505 0ustar www-datawww-data# frozen_string_literal: true module Parser class StaticEnvironment FORWARD_ARGS = :FORWARD_ARGS def initialize reset end def reset @variables = Set[] @stack = [] end def extend_static @stack.push(@variables) @variables = Set[] self end def extend_dynamic @stack.push(@variables) @variables = @variables.dup self end def unextend @variables = @stack.pop self end def declare(name) @variables.add(name.to_sym) self end def declared?(name) @variables.include?(name.to_sym) end def declare_forward_args declare(FORWARD_ARGS) end def declared_forward_args? declared?(FORWARD_ARGS) end end end parser-2.7.0.2/lib/parser/ruby21.rb0000644000004100000410000076121513617025313016734 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class Ruby21 < Parser::Base def version 21 end def default_encoding Encoding::UTF_8 end ##### State transition tables begin ### clist = [ '-576,888,-100,214,215,-102,810,-576,-576,-576,586,890,268,-576,-576', '644,-576,268,217,-97,-83,607,565,-103,-286,-576,395,644,-69,113,594', '397,396,-105,112,609,-576,-576,565,-576,-576,-576,-576,-576,565,565', '-99,892,-102,577,643,711,-101,578,214,215,-101,894,260,218,214,215,643', '-99,-286,261,-576,-576,-576,-576,-576,-576,-576,-576,-576,-576,-576', '-576,-576,-576,113,-104,-576,-576,-576,112,628,606,-573,-98,-576,565', '-100,-576,596,595,597,218,-576,267,-576,608,-576,-576,267,-576,-576', '-576,-576,-576,-476,-576,-576,-576,-93,809,585,-476,-476,-476,-100,-572', '-476,-476,-476,-100,-476,-576,-88,-572,-576,-576,-94,-92,-476,-576,-476', '-476,-476,113,113,-101,-96,837,112,112,-476,-476,218,-476,-476,-476', '-476,-476,218,113,113,894,-91,-93,112,112,113,113,-99,-92,-102,112,112', '-99,-101,-102,-90,711,711,-101,-476,-476,-476,-476,-476,-476,-476,-476', '-476,-476,-476,-476,-476,-476,-95,-490,-476,-476,-476,443,-476,-476', '-89,766,-476,-91,113,-476,-476,218,-476,112,-476,113,-476,-491,-476', '-476,112,-476,-476,-476,-476,-476,-289,-476,900,-476,-91,-93,767,-289', '-289,-289,91,92,525,-289,-289,527,-289,-476,-88,644,-476,-476,-476,-476', '902,-476,-97,-476,-576,644,-105,-476,525,268,-100,527,-289,-289,904', '-289,-289,-289,-289,-289,-91,-93,-98,-91,-93,214,215,489,268,-481,643', '-91,-93,113,113,-490,-481,-102,112,112,643,487,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,-289,-289,-576,485,-289,-289,-289', '513,627,-576,93,94,-289,476,-572,-289,113,594,-576,263,-289,112,-289', '594,-289,-289,-576,-289,-289,-289,-289,-289,-479,-289,513,-289,-97,-576', '263,-479,-479,-479,267,-484,-479,-479,-479,238,-479,-289,-484,217,-289', '-289,-95,-94,-479,-289,-479,-479,-479,267,-104,-103,525,113,855,524', '-479,-479,112,-479,-479,-479,-479,-479,91,92,-576,235,910,596,595,237', '236,-576,260,596,595,-104,-572,745,-570,261,-576,214,215,743,-479,-479', '-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,-479,445,-576', '-479,-479,-479,-487,-479,-479,-290,-99,-479,594,-487,-479,-479,-290', '-479,913,-479,-412,-479,-569,-479,-479,-290,-479,-479,-479,-479,-479', '113,-479,-479,-479,546,112,543,542,541,-479,544,113,93,94,-570,594,112', '-479,-479,594,-479,-479,-479,-479,594,-479,-576,-479,801,-485,571,-479', '218,-576,-576,-576,-485,-570,-576,-576,-576,-412,-576,-476,917,596,595', '601,-412,79,-476,-576,-576,-576,-576,-569,-264,-412,444,-476,623,80', '-576,-576,442,-576,-576,-576,-576,-576,622,81,561,560,218,581,-412,974', '-569,596,595,605,580,596,595,610,951,398,596,595,592,582,-576,-576,-576', '-576,-576,-576,-576,-576,-576,-576,-576,-576,-576,-576,970,-93,-576', '-576,-576,970,768,-576,573,-102,-576,-91,238,-576,-576,574,-576,218', '-576,-100,-576,927,-576,-576,572,-576,-576,-576,-576,-576,934,-576,-576', '-576,546,-486,543,542,541,-479,544,935,-486,385,235,218,-479,-576,237', '236,-576,-576,-576,-576,316,-576,-289,-576,69,70,71,-101,57,-289,-289', '-289,63,64,-289,-289,-289,67,-289,65,66,68,308,309,72,73,832,801,-289', '-289,-289,304,305,311,101,100,102,103,-289,-289,230,-289,-289,-289,-289', '-289,525,45,121,527,105,104,106,95,56,97,96,98,315,99,107,108,828,91', '92,42,43,41,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', '-289,-289,214,215,-289,-289,-289,223,769,-289,229,594,-289,58,59,-289', '-289,60,-289,-476,-289,953,-289,44,-289,-289,-476,-289,-289,-289,-289', '-289,228,-289,-482,-289,955,89,79,82,83,-482,84,86,85,87,214,215,956', '-289,80,88,-289,-289,-289,-289,961,-289,62,-289,81,93,94,-103,289,69', '70,71,9,57,832,801,581,63,64,596,595,599,67,933,65,66,68,30,31,72,73', '732,582,688,964,966,29,28,27,101,100,102,103,737,738,19,212,739,107', '108,632,8,45,291,10,105,104,106,95,56,97,96,98,968,99,107,108,970,91', '92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,752,231,232', '-491,970,252,253,257,40,-96,981,33,-483,982,58,59,983,-105,60,-483,35', '235,984,241,44,237,236,550,233,234,245,243,239,20,240,894,894,553,89', '79,82,83,894,84,86,85,87,-90,989,953,-89,80,88,213,256,-99,-238,894', '-98,62,953,81,93,94,289,69,70,71,9,57,561,560,210,63,64,554,970,-573', '67,211,65,66,68,30,31,72,73,-572,209,678,208,207,29,28,27,101,100,102', '103,206,109,19,673,518,218,662,632,8,45,291,10,105,104,106,95,56,97', '96,98,-83,99,107,108,218,91,92,42,43,41,238,242,247,248,249,244,246', '254,255,250,251,-290,231,232,505,678,252,253,-290,40,679,506,33,550', '681,58,59,-290,218,60,504,35,235,553,241,44,237,236,953,233,234,245', '243,239,20,240,685,688,689,89,79,82,83,-489,84,86,85,87,693,691,-489', '695,80,88,703,256,561,560,704,-489,62,554,81,93,94,289,69,70,71,9,57', '705,707,-488,63,64,218,571,714,67,-488,65,66,68,30,31,72,73,732,-488', '742,746,747,29,28,27,101,100,102,103,-262,238,19,753,238,238,238,617', '8,45,291,10,105,104,106,95,56,97,96,98,476,99,107,108,476,91,92,42,43', '41,238,242,247,248,249,244,246,254,255,250,251,-289,231,232,515,634', '252,253,-289,40,631,516,33,-573,263,58,59,-289,621,60,441,35,235,620', '241,44,237,236,218,233,234,245,243,239,20,240,218,771,616,89,79,82,83', '-332,84,86,85,87,-261,257,-332,614,80,88,611,256,487,489,794,-332,62', '673,81,93,94,289,69,70,71,9,57,218,263,439,63,64,263,673,238,67,440', '65,66,68,30,31,72,73,801,441,218,218,1008,29,28,27,101,100,102,103,1009', '930,19,543,542,541,826,544,8,45,291,10,105,104,106,95,56,97,96,98,576', '99,107,108,218,91,92,42,43,41,238,242,247,248,249,244,246,254,255,250', '251,-289,231,232,-290,801,252,253,-289,40,836,-290,33,-573,575,58,59', '-289,218,60,-290,35,235,387,241,44,237,236,571,233,234,245,243,239,20', '240,489,218,529,89,79,82,83,-279,84,86,85,87,845,528,-279,1010,80,88', '970,256,-263,218,238,-279,62,854,81,93,94,289,69,70,71,9,57,514,510', '-488,63,64,263,218,272,67,-488,65,66,68,30,31,72,73,507,-488,500,857', '688,29,28,27,101,100,102,103,860,930,19,543,542,541,862,544,8,45,291', '10,105,104,106,95,56,97,96,98,864,99,107,108,866,91,92,42,43,41,238', '242,247,248,249,244,246,254,255,250,251,-289,231,232,-489,218,252,253', '-289,40,868,-489,33,-573,869,58,59,-289,499,60,-489,35,235,872,241,44', '237,236,218,233,234,245,243,239,20,240,874,875,673,89,79,82,83,979,84', '86,85,87,-68,877,980,496,80,88,-261,256,881,883,886,978,62,688,81,93', '94,289,69,70,71,9,57,,,-279,63,64,,,,67,-279,65,66,68,30,31,72,73,,-279', ',,,29,28,27,101,100,102,103,,,19,116,117,118,119,120,8,45,291,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249', '244,246,254,255,250,251,581,231,232,,,252,253,933,40,,,33,,,58,59,582', ',60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,289,69,70,71,9,57,,', ',63,64,,,,67,,65,66,68,30,31,72,73,116,117,118,119,120,29,28,27,101', '100,102,103,,,19,116,117,118,119,120,8,45,291,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246,254,255', '250,251,,231,232,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237', '236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',256,,,,,62,,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244', '246,254,255,250,251,,231,232,,,252,253,,40,,,33,,,58,59,,,60,,35,235', ',241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,256,,,,,62,,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247', '248,249,244,246,254,255,250,251,,231,232,,,252,253,,40,,,33,,,58,59', ',,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,289,69,70,71,9,57,,', ',63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19', ',,,,,8,45,291,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,238,242,247,248,249,244,246,254,255,250,251,,231,232,,,252,253,,40', ',,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,289,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,291,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,,231,232,,,252', '253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239', '20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,289', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,291,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,,231', '232,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234', '245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,218,256,,,', ',62,,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246,254', '255,250,251,,231,232,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44', '237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,', '80,88,,256,,,,,62,,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249', '244,246,254,255,250,251,,231,232,,,252,253,,40,,,293,,,58,59,,,60,,35', '235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,256,,,,,62,,81,93,94,5,69,70,71,9,57,,,,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,7', '10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,242,247', '248,249,244,246,254,255,250,251,,231,232,,,252,253,,40,,,33,,,58,59', ',,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,289,69,70,71,9,57,,', ',63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19', ',,,,,8,45,291,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,238,242,247,248,249,244,246,254,255,250,251,,231,232,,,252,253,,40', ',,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,289,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,291,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,,231,232,,,252', '253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239', '20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,256,,,,,62,,81,93,94,289', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,546,19,543,542,541,,544,8,45,291,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,546,,543,542,541,,544,,697,,546,,543', '542,541,,544,899,,40,,,33,,,58,59,,,60,,35,,,,44,,697,,,,,,,20,,700', '697,,89,79,82,83,,84,86,85,87,,,,,80,88,,546,,543,542,541,62,544,81', '93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,697', '29,28,27,101,100,102,103,,700,19,,,238,,,8,45,291,10,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,238,-595,-595,-595,-595,244', '246,235,,-595,-595,237,236,,233,234,252,253,,40,,,293,,,58,59,,238,60', ',35,235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82,83,', '84,86,85,87,,,235,,80,88,237,236,,233,234,,62,,81,93,94,289,69,70,71', '9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,546,19,543,542,541,,544,8,45,291,10,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246,254,697,250', '251,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233', '234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,546,,543', '542,541,62,544,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30', '31,72,73,,,,,697,29,28,27,101,100,102,103,,546,19,543,542,541,,544,8', '45,291,10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238', '242,247,248,249,244,246,,697,250,251,,,,,,252,253,,40,,,33,,,58,59,', ',60,,35,235,,241,44,237,236,,233,234,245,243,239,20,240,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,546,,543,542,541,62,544,81,93,94,5,69,70', '71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,697,29,28,27,101,100', '102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107,108,', '91,92,42,43,41,238,-595,-595,-595,-595,244,246,,,-595,-595,,,,,,252', '253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245,243,239', '20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,289', '69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,19,,,,,,8,45,291,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,238,-595,-595,-595,-595,244,246,,,-595,-595,,,,', ',252,253,,40,,,293,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,245', '243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93', '94,5,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,238,242,247,248,249,244,246,254,255,250,251,,-595', '-595,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234', '245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81', '93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,238,-595,-595,-595,-595,244,246,,,-595', '-595,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233', '234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62', ',81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,', ',,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,238,242,247,248,249,244,246,254,255', '250,251,,-595,-595,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237', '236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,-595,-595,-595,-595,244', '246,,,-595,-595,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237', '236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,-595,-595,-595,-595,244', '246,,,-595,-595,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237', '236,,233,234,245,243,239,20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,,,,62,,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,,,,,,,,,,,,,,,,252,253', ',40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,,,239,20,240', ',,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,289,69,70,71', '9,57,,,,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102', '103,,,19,,,,,,8,45,291,10,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,238,,,,,,,,,,,,,,,,252,253,,40,,,33,,,58,59,,,60,,35,235', ',241,44,237,236,,233,234,,,239,20,240,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,,,,,,62,,81,93,94,289,69,70,71,9,57,,,,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,238,,,,,,,,,,,,,', ',,252,253,,40,,,33,,,58,59,,,60,,35,235,,241,44,237,236,,233,234,,,239', '20,240,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102', '103,,,230,,,,,,,306,,238,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,252,253,312,,,,,,,,,,,,,,235,,241,,237,236,302,233,234,298,,,58,59', ',238,60,,,546,,543,542,541,550,544,,,,,,252,253,,553,,89,79,82,83,,84', '86,85,87,,,235,,80,88,237,236,,233,234,548,62,,81,93,94,69,70,71,9,57', '561,560,,63,64,554,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97,96,98,,99,107,108,', '91,92,42,43,41,238,,,,,,,,,,,,,,,,252,253,,40,,,33,,,58,59,,,60,,35', '235,,241,44,237,236,,233,234,,,239,20,240,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56', '97,96,98,283,99,107,108,,91,92,42,43,41,238,,,,,,,,,,,,,,,,252,253,', '223,,,229,,,58,59,,,60,,281,235,279,241,44,237,236,284,233,234,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,', ',,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,', ',,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,', ',105,104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,', ',,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,', ',,,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,', ',,,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,', ',,,,306,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,312,,,,,,', ',,,,,,,,,,,,,302,,,298,,,58,59,,,60,,297,,,,,,,,,,,,,,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,306,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,312,,,,,,,,,,,,,,,,', ',,,302,,,229,,,58,59,,,60,,,546,,543,542,541,550,544,,,,,,,,,553,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,314,,548,62,,81,93,94,69,70,71,,57', '561,560,,63,64,554,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101', '100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,', ',,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102', '103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,', ',,,,306,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,312,,,,,,', ',,,,,,,,,,,,,941,,,229,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,223,,,229,,,58,59,,,60,,281,,,,44,,,284,,,,,,228,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,223,,,229,,,58,59,,,60,,,,,,44,,,284,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,', ',,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59', ',,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,', ',,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,113,,,,,112,62,,81,93', '94,69,70,71,,57,,,,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305', '311,101,100,102,103,,,230,,,,,,,306,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,,,312,,,,,,,,,,,,,,,,,,,,347,,,33,,,58,59,,,60,,35,,', ',,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100', '102,103,,,230,,,,,,,306,,,105,104,106,352,56,97,96,353,,99,107,108,', '91,92,,,312,,,,,,,,,,,,,,,,,359,,,354,,,229,,,58,59,,,60,,,,,,,,,,,', ',,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94', '63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103', ',,230,,,,,,,306,,,105,104,106,352,56,97,96,353,,99,107,108,,91,92,,', '312,,,,,,,,,,,,,,,,,,,,354,,,229,,,58,59,,,60,,,546,,543,542,541,550', '544,,,,,,,,,553,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,,,548,62,,81', '93,94,69,70,71,9,57,561,560,,63,64,554,,,67,,65,66,68,30,31,72,73,,', ',,,29,28,27,101,100,102,103,,,19,,,,,,8,45,7,10,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,40,,,33,,,58,59', ',,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,', ',,387,62,,81,93,94,69,70,71,,57,,,,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59', ',,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27', '101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,', ',,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103', ',,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45', ',10,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,', ',,,,,,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,306,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,312,,,,,,,,,,,,,,,,', ',,,871,,,229,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,', '58,59,,,60,,403,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,', ',29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101', '100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,283,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279', ',44,,,284,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,', ',,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,', ',230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,403,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,', '58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,', ',,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,218,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311', '101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44', ',,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100', '102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,283,99,107,108,', '91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,279,,44', ',,284,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62', '57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101', '100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,', ',,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102', '103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308', '309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72', '73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,', ',,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58', '59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304', '305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311', '101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44', ',,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100', '102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,', ',,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102', '103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308', '309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72', '73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,', ',,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58', '59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304', '305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70', '71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311', '101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44', ',,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100', '102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,', ',,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102', '103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42', '43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,', '230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41', ',,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,', ',,,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,', ',,,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,', ',,,,,,,,,,,223,,,229,,,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,218,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230', ',,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,', ',,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,656,,,,44,,,,,,,,,228,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,,10,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31', '72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,', '58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,', '304,305,311,101,100,102,103,,,230,,,,,,,306,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,,,312,,,,,,,,,,,,,,,,,,,,871,,,229,,,58,59,,,60', ',,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62', '57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101', '100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108', ',91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,', ',,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81', '93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102', '103,,,230,,,,,,,306,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', ',,312,,,,,,,,,,,,,,,,,,,,302,,,229,,,58,59,,,60,,,546,,543,542,541,550', '544,,,,,,,,,553,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,502,,548,62,', '81,93,94,69,70,71,,57,561,560,,63,64,554,,,67,,65,66,68,308,309,72,73', ',,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56', '97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,', '58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88', ',,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,', '304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59', ',,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305', '311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,', ',,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311', '101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44', ',,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57', '81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100', '102,103,,,230,,,,,,,306,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,,,312,,,,,,,,,,,,,,,,,,,,302,,,298,,,58,59,,,60,,,,,,,,,,,,,,,,,', ',,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,', ',,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,', ',,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,518,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,', ',,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72', '73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,', ',29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98', ',99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60', ',,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', '42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20', ',,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63', '64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309', '72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,', '229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73', ',,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,,105,104,106,95,56,97,96', '98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59', ',,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69', '70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305', '311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,403', ',,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311', '101,100,102,103,,,230,,,,,,,306,,,105,104,106,95,56,97,96,98,,99,107', '108,,91,92,,,312,,,,,,,,,,,,,,,,,,,,302,,,298,,,58,59,,,60,,,,,,,,,', ',,,,,,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102', '103,,,230,,,,,,,306,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92', ',,312,,,,,,,,,,,,,,,,,,,,302,,,298,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89', '79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,', '67,,65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,', ',,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79', '82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67', ',65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,,45,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,', ',,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308', '309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56', '97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309', '72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,', '229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72', '73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95', '56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80', '88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309,72,73,,', ',,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97', '96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58', '59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,', ',,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29', '28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99', '107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,', ',,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71', '62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100', '102,103,,,230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91', '92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,', ',,228,,,,,89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93', '94,63,64,,,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,', ',230,,,,,,,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43', '41,,,,,,,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,', ',89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,', ',,45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,', ',,,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308', '309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,', ',223,,,229,,,58,59,,,60,,,,279,,44,,,284,,,,,,228,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,223,,,229,,,58,59,,,60,,656,,279,,44,,,284,,,,,,228,,,,,89,79,82', '83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65', '66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45', ',,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,', ',,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,', '84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,750,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106', '95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '30,31,72,73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106', '95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223', ',,229,,,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,281,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68', '308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308', '309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,', ',223,,,229,,,58,59,,,60,,,,,,44,,,284,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308', '309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104', '106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,', ',223,,,229,,,58,59,,,60,,656,,279,,44,,,284,,,,,,228,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,', ',,,,,223,,,229,,,58,59,,,60,,,,279,,44,,,284,,,,,,228,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105', '104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,', ',,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86', '85,87,,,,,80,88,,,,,,,62,,81,93,94,69,70,71,9,57,,,,63,64,,,,67,,65', '66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,,8,45,291,10', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,', ',,,,,,40,,,33,,,58,59,,,60,,35,,,,44,,,,,,,,,20,,,,,89,79,82,83,,84', '86,85,87,,,,,80,88,,,,,,387,62,,81,93,94,69,70,71,,57,,,,63,64,,,,67', ',65,66,68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,', ',45,,,105,104,106,95,56,97,96,98,283,99,107,108,,91,92,42,43,41,,,,', ',,,,,,,,,,,,,,,223,,,229,,,58,59,,,60,,656,,,,44,,,284,,,,,,228,,,,', '89,79,82,83,,84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64', ',,,67,,65,66,68,30,31,72,73,,,,,,29,28,27,101,100,102,103,,,19,,,,,', ',45,,,105,104,106,95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,', ',,,,,,,,,,,,223,,,229,,,58,59,,,60,,,,,,44,,,,,,,,,20,,,,,89,79,82,83', ',84,86,85,87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66', '68,308,309,72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,306,,', '105,104,106,95,56,97,96,98,,99,107,108,,91,92,,,312,,,,,,,,,,,,,,,,', ',,,302,,,298,,,58,59,,,60,,,,,,,,,,,,,,,,,,,,89,79,82,83,,84,86,85,87', ',,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,30,31,72', '73,,,,,,29,28,27,101,100,102,103,,,230,,,,,,,45,,,105,104,106,95,56', '97,96,98,283,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,,229', ',,58,59,,,60,,281,,279,,44,,,284,,,,,,228,,,,,89,79,82,83,,84,86,85', '87,,,,,80,88,,,,69,70,71,62,57,81,93,94,63,64,,,,67,,65,66,68,308,309', '72,73,,,,,,304,305,311,101,100,102,103,,,230,,,,,,,45,,,105,104,106', '95,56,97,96,98,,99,107,108,,91,92,42,43,41,,,,,,,,,,,,,,,,,,,,223,,', '229,,,58,59,,,60,,,,,,44,,,,,,,,,228,,,,,89,79,82,83,,84,86,85,87,,', ',,80,88,,,,,-577,,62,,81,93,94,-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,-577,,-577,-577,-577,-577,-577,,-577,-577,-577,,,', ',,,,,,,,,,-577,,,-577,-577,-577,-577,-280,-577,,-577,,,,-280,-280,-280', ',,-280,-280,-280,,-280,,,,,,,,,,-280,-280,-280,,,,,,,,-280,-280,,-280', '-280,-280,-280,-280,,,,,,,,,,,,,,,,,,,,,,,-280,-280,-280,-280,-280,-280', '-280,-280,-280,-280,-280,-280,-280,-280,,,-280,-280,-280,,,-280,,,-280', ',,-280,-280,,-280,,-280,,-280,,-280,-280,,-280,-280,-280,-280,-280,', '-280,,-280,,,,,,,,,,,,,,-280,,,-280,-280,-280,-280,-578,-280,,-280,', ',,-578,-578,-578,,,-578,-578,-578,,-578,,,,,,,,,-578,-578,-578,-578', ',,,,,,,-578,-578,,-578,-578,-578,-578,-578,,,,,,,,,,,,,,,,,,,,,,,-578', '-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,-578,,,-578', '-578,-578,,,-578,,,-578,,,-578,-578,,-578,,-578,,-578,,-578,-578,,-578', '-578,-578,-578,-578,,-578,-578,-578,546,,543,542,541,550,544,,,,,,,-578', ',553,-578,-578,-578,-578,-411,-578,,-578,,,,-411,-411,-411,,,-411,-411', '-411,,-411,548,,,,,,,,-411,-411,-411,561,560,,,,554,,,-411,-411,,-411', '-411,-411,-411,-411,,,,,,,,,,,,,,,,,,,,,,,-411,-411,-411,-411,-411,-411', '-411,-411,-411,-411,-411,-411,-411,-411,,,-411,-411,-411,,,-411,,263', '-411,,,-411,-411,,-411,,-411,,-411,,-411,-411,,-411,-411,-411,-411,-411', '-296,-411,-411,-411,,,,-296,-296,-296,,,-296,-296,-296,,-296,-411,,', '-411,-411,,-411,,-411,-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,,272,-296,,,-296,-296', ',-296,,-296,,-296,,-296,-296,,-296,-296,-296,-296,-296,,-296,-244,-296', ',,,,,-244,-244,-244,,,-244,-244,-244,-296,-244,,-296,-296,,-296,,-296', ',-244,-244,,,,,,,,,,-244,-244,,-244,-244,-244,-244,-244,,,,,,,,,,,,', ',,,,,546,,543,542,541,550,544,,,,,,,,,553,-244,,-244,,,,,-244,,-244', '-244,-244,263,-244,-244,-244,-244,,-244,,,548,,,,,,-244,-244,-244,558', '557,561,560,,-244,-244,554,-244,-244,,-244,-244,-244,-244,-244,,,,,-244', ',,-244,,,,,-244,,,,,218,,,,,-244,-244,-244,-244,-244,-244,-244,-244', '-244,-244,-244,-244,-244,-244,,,-244,-244,-244,,,-244,,263,-244,,,-244', '-244,,-244,,-244,,-244,,-244,-244,,-244,-244,-244,-244,-244,,-244,-244', '-244,,,,,,,,,,,,,,-244,,,-244,-244,,-244,,-244,173,184,174,197,170,190', '180,179,200,201,195,178,177,172,198,202,203,182,171,185,189,191,183', '176,,,,192,199,194,193,186,196,181,169,188,187,,,,,,168,175,166,167', '163,164,165,124,126,123,,125,,,,,,,,157,158,,154,136,137,138,145,142', '144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151,150,,135,156,153,152', '161,148,149,143,141,133,155,134,,,162,89,,,,,,,,,,,,,,88,173,184,174', '197,170,190,180,179,200,201,195,178,177,172,198,202,203,182,171,185', '189,191,183,176,,,,192,199,194,193,186,196,181,169,188,187,,,,,,168', '175,166,167,163,164,165,124,126,,,125,,,,,,,,157,158,,154,136,137,138', '145,142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151,150,,135,156', '153,152,161,148,149,143,141,133,155,134,,,162,89,,,,,,,,,,,,,,88,173', '184,174,197,170,190,180,179,200,201,195,178,177,172,198,202,203,182', '171,185,189,191,183,176,,,,192,199,194,193,186,196,181,169,188,187,', ',,,,168,175,166,167,163,164,165,124,126,,,125,,,,,,,,157,158,,154,136', '137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151,150', ',135,156,153,152,161,148,149,143,141,133,155,134,,,162,89,,,,,,,,,,', ',,,88,173,184,174,197,170,190,180,179,200,201,195,178,177,172,198,202', '203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196,181,169,188', '187,,,,,,168,175,166,167,163,164,165,124,126,,,125,,,,,,,,157,158,,154', '136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151', '150,,135,156,153,152,161,148,149,143,141,133,155,134,,,162,89,,,,,,', ',,,,,,,88,173,184,174,197,170,190,180,179,200,201,195,178,177,172,198', '202,203,182,171,185,189,191,183,176,,,,192,199,194,370,369,371,368,169', '188,187,,,,,,168,175,166,167,365,366,367,363,126,97,96,364,,99,,,,,', '157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,', ',,,375,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134', ',,162,173,184,174,197,170,190,180,179,200,201,195,178,177,172,198,202', '203,182,171,185,189,191,183,176,,,,192,199,194,193,186,196,181,169,188', '187,,,,,,168,175,166,167,163,164,165,124,126,,,125,,,,,,,,157,158,,154', '136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,,,,,,,,,151', '150,,135,156,153,152,161,148,149,143,141,133,155,134,669,423,162,,670', ',,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146', '147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133', '155,134,635,416,162,,636,,,,,,,,157,158,,154,136,137,138,145,142,144', ',,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152', '161,148,149,143,141,133,155,134,1001,416,162,,1002,,,,,,,,157,158,,154', '136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,', ',151,150,,135,156,153,152,161,148,149,143,141,133,155,134,635,416,162', ',636,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160', '146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141', '133,155,134,474,416,162,,475,,,,,,,,157,158,,154,136,137,138,145,142', '144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153', '152,161,148,149,143,141,133,155,134,722,423,162,,723,,,,,,,,157,158', ',154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,', ',,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,976,423', '162,,975,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159', '160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143', '141,133,155,134,412,416,162,,413,,,,,,,,157,158,,154,136,137,138,145', '142,144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156', '153,152,161,148,149,143,141,133,155,134,637,423,162,,638,,,,,,,,157', '158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263', ',,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134,474', '416,162,,475,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,', ',,159,160,146,147,,,,,,,,,,,,,,151,150,,135,156,153,152,161,148,149', '143,141,133,155,134,719,423,162,,720,,,,,,,,157,158,,154,136,137,138', '145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135', '156,153,152,161,148,149,143,141,133,155,134,637,423,162,,638,,,,,,,', '157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146,147,,', ',,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133,155,134', '717,416,162,,718,,,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140', ',,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148', '149,143,141,133,155,134,419,423,162,,418,,,,,,,,157,158,,154,136,137', '138,145,142,144,,,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150', ',135,156,153,152,161,148,149,143,141,133,155,134,1003,423,162,,1004', ',,,,,,,157,158,,154,136,137,138,145,142,144,,,139,140,,,,159,160,146', '147,,,,,,263,,,,,,,,151,150,,135,156,153,152,161,148,149,143,141,133', '155,134,666,416,162,,667,,,,,,,,157,158,,154,136,137,138,145,142,144', ',,139,140,,,,159,160,146,147,,,,,,263,,,,,,,,151,150,,135,156,153,152', '161,148,149,143,141,133,155,134,,546,162,543,542,541,550,544,,,,,,,', '546,553,543,542,541,550,544,,,,,,,,546,553,543,542,541,550,544,,,548', ',,,,,553,,,558,557,561,560,,548,532,554,,,,,,,558,557,561,560,,548,', '554,,,,,,,558,557,561,560,,,546,554,543,542,541,550,544,,546,,543,542', '541,550,544,553,,,,,,,,553,,546,,543,542,541,550,544,,,,,,548,,,553', ',,,,548,558,557,561,560,,,,554,558,557,561,560,,,,554,548,,546,,543', '542,541,550,544,558,557,561,560,,,,554,553,,546,,543,542,541,550,544', ',546,,543,542,541,550,544,553,,,,,548,,,553,,,,,,558,557,561,560,,,', '554,548,,,,,,,,548,558,557,561,560,,,,554,558,557,561,560,,,546,554', '543,542,541,550,544,546,,543,542,541,550,544,546,553,543,542,541,550', '544,546,553,543,542,541,550,544,546,553,543,542,541,550,544,,553,548', ',,,,,553,548,,558,557,561,560,,548,,554,,561,560,,548,,554,,561,560', ',548,,554,,561,560,,,,554,,561,560,,,546,554,543,542,541,550,544,,,', ',,,,,553,,,,,,,,,,,,,,,,,,,,,,548,,,,,,,,,,,561,560,,,,554' ] racc_action_table = arr = ::Array.new(24831, 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 = [ '419,816,1001,436,436,718,683,419,419,419,358,817,647,419,419,481,419', '61,19,344,661,382,715,720,58,419,123,648,661,848,378,123,123,348,848', '383,419,419,903,419,419,419,419,419,880,338,1015,819,1002,354,481,840', '1003,354,591,591,719,820,373,19,676,676,648,839,58,373,419,419,419,419', '419,419,419,419,419,419,419,419,419,419,341,575,419,419,419,341,419', '382,720,345,419,337,717,419,378,378,378,436,419,647,419,383,419,419', '61,419,419,419,419,419,95,419,419,419,718,683,358,95,95,95,1001,719', '95,95,95,1001,95,419,344,1003,419,419,720,419,95,419,95,95,95,358,715', '419,348,715,358,715,95,95,591,95,95,95,95,95,676,840,903,822,666,667', '840,903,880,338,1015,719,1002,880,338,1015,1003,1002,839,568,567,1003', '95,95,95,95,95,95,95,95,95,95,95,95,95,95,575,38,95,95,95,224,95,95', '345,635,95,717,843,95,95,825,95,843,95,337,95,222,95,95,337,95,95,95', '95,95,418,95,827,95,666,667,636,418,418,418,41,41,331,418,418,331,418', '95,38,480,95,95,95,95,830,95,38,95,722,472,224,95,682,307,635,682,418', '418,833,418,418,418,418,418,666,667,222,666,667,587,587,280,26,369,480', '666,667,568,567,221,369,636,568,567,472,277,418,418,418,418,418,418', '418,418,418,418,418,418,418,418,722,276,418,418,418,316,418,722,41,41', '418,262,722,418,3,604,722,307,418,3,418,602,418,418,669,418,418,418', '418,418,98,418,442,418,221,722,26,98,98,98,307,368,98,98,98,448,98,418', '368,230,418,418,316,418,98,418,98,98,98,26,316,418,327,587,770,327,98', '98,587,98,98,98,98,98,312,312,669,448,842,604,604,448,448,669,24,602', '602,442,669,604,353,24,669,336,336,602,98,98,98,98,98,98,98,98,98,98', '98,98,98,98,226,669,98,98,98,367,98,98,578,770,98,380,367,98,98,578', '98,846,98,796,98,352,98,98,578,98,98,98,98,98,287,98,353,98,899,287', '899,899,899,353,899,586,312,312,353,381,586,98,353,384,98,98,98,98,377', '98,637,98,908,366,908,98,847,637,637,637,366,353,637,637,637,796,637', '352,850,380,380,380,796,77,352,637,637,637,637,352,851,796,225,352,413', '77,637,637,223,637,637,637,637,637,412,77,688,688,928,356,796,928,352', '381,381,381,356,384,384,384,899,204,377,377,377,356,637,637,637,637', '637,637,637,637,637,637,637,637,637,637,996,413,637,637,637,997,637', '637,346,413,637,412,449,637,637,346,637,1000,637,412,637,867,637,637', '346,637,637,637,637,637,871,637,637,637,700,365,700,700,700,364,700', '873,365,109,449,45,364,637,449,449,637,637,637,637,40,637,638,637,514', '514,514,637,514,638,638,638,514,514,638,638,638,514,638,514,514,514', '514,514,514,514,991,991,638,638,638,514,514,514,514,514,514,514,638', '638,514,638,638,638,638,638,328,514,7,328,514,514,514,514,514,514,514', '514,37,514,514,514,700,514,514,514,514,514,638,638,638,638,638,638,638', '638,638,638,638,638,638,638,17,17,638,638,638,514,638,638,514,379,638', '514,514,638,638,514,638,363,638,901,638,514,638,638,363,638,638,638', '638,638,514,638,370,638,905,514,514,514,514,370,514,514,514,514,521', '521,906,638,514,514,638,638,638,638,912,638,514,638,514,514,514,638', '834,834,834,834,834,834,706,706,932,834,834,379,379,379,834,932,834', '834,834,834,834,834,834,916,932,918,921,922,834,834,834,834,834,834', '834,595,595,834,15,595,595,595,431,834,834,834,834,834,834,834,834,834', '834,834,834,923,834,834,834,924,834,834,834,834,834,431,431,431,431', '431,431,431,431,431,431,431,618,431,431,39,926,431,431,22,834,15,941', '834,371,944,834,834,945,15,834,371,834,431,946,431,834,431,431,685,431', '431,431,431,431,834,431,947,948,685,834,834,834,834,949,834,834,834', '834,618,950,952,39,834,834,16,431,618,431,1005,39,834,1006,834,834,834', '563,563,563,563,563,563,685,685,14,563,563,685,1017,975,563,14,563,563', '563,563,563,563,563,976,14,977,13,12,563,563,563,563,563,563,563,10', '1,563,511,508,503,501,640,563,563,563,563,563,563,563,563,563,563,563', '563,498,563,563,563,497,563,563,563,563,563,640,640,640,640,640,640', '640,640,640,640,640,981,640,640,301,519,640,640,981,563,520,301,563', '857,522,563,563,981,482,563,301,563,640,857,640,563,640,640,990,640', '640,640,640,640,563,640,534,535,537,563,563,563,563,300,563,563,563', '563,539,538,300,547,563,563,555,640,857,857,559,300,563,857,563,563', '563,645,645,645,645,645,645,562,564,299,645,645,478,569,570,645,299', '645,645,645,645,645,645,645,589,299,599,607,609,645,645,645,645,645', '645,645,615,453,645,619,452,451,450,407,645,645,645,645,645,645,645', '645,645,645,645,645,624,645,645,645,629,645,645,645,645,645,407,407', '407,407,407,407,407,407,407,407,407,1004,407,407,318,438,407,407,1004', '645,428,318,645,1004,420,645,645,1004,411,645,318,645,407,410,407,645', '407,407,639,407,407,407,407,407,645,407,408,641,404,645,645,645,645', '46,645,645,645,645,402,646,46,399,645,645,393,407,653,655,660,46,645', '663,645,645,645,650,650,650,650,650,650,665,668,220,650,650,671,672', '675,650,220,650,650,650,650,650,650,650,677,220,680,684,992,650,650', '650,650,650,650,650,993,868,650,868,868,868,699,868,650,650,650,650', '650,650,650,650,650,650,650,650,349,650,650,650,701,650,650,650,650', '650,751,751,751,751,751,751,751,751,751,751,751,723,751,751,507,708', '751,751,723,650,713,507,650,723,347,650,650,723,716,650,507,650,751', '343,751,650,751,751,342,751,751,751,751,751,650,751,332,725,330,650', '650,650,650,303,650,650,650,650,730,329,303,994,650,650,995,751,749', '325,320,303,650,754,650,650,650,651,651,651,651,651,651,317,313,938', '651,651,311,306,305,651,938,651,651,651,651,651,651,651,302,938,296', '772,773,651,651,651,651,651,651,651,775,974,651,974,974,974,776,974', '651,651,651,651,651,651,651,651,651,651,651,651,777,651,651,651,779', '651,651,651,651,651,674,674,674,674,674,674,674,674,674,674,674,670', '674,674,939,780,674,674,670,651,781,939,651,670,782,651,651,670,295', '651,939,651,674,786,674,651,674,674,294,674,674,674,674,674,651,674', '790,791,795,651,651,651,651,940,651,651,651,651,292,799,940,291,651', '651,802,674,803,806,811,940,651,812,651,651,651,726,726,726,726,726', '726,,,942,726,726,,,,726,942,726,726,726,726,726,726,726,,942,,,,726', '726,726,726,726,726,726,,,726,290,290,290,290,290,726,726,726,726,726', '726,726,726,726,726,726,726,,726,726,726,,726,726,726,726,726,853,853', '853,853,853,853,853,853,853,853,853,870,853,853,,,853,853,870,726,,', '726,,,726,726,870,,726,,726,853,,853,726,853,853,,853,853,853,853,853', '726,853,,,,726,726,726,726,,726,726,726,726,,,,,726,726,,853,,,,,726', ',726,726,726,731,731,731,731,731,731,,,,731,731,,,,731,,731,731,731', '731,731,731,731,6,6,6,6,6,731,731,731,731,731,731,731,,,731,495,495', '495,495,495,731,731,731,731,731,731,731,731,731,731,731,731,,731,731', '731,,731,731,731,731,731,856,856,856,856,856,856,856,856,856,856,856', ',856,856,,,856,856,,731,,,731,,,731,731,,,731,,731,856,,856,731,856', '856,,856,856,856,856,856,731,856,,,,731,731,731,731,,731,731,731,731', ',,,,731,731,,856,,,,,731,,731,731,731,835,835,835,835,835,835,,,,835', '835,,,,835,,835,835,835,835,835,835,835,,,,,,835,835,835,835,835,835', '835,,,835,,,,,,835,835,835,835,835,835,835,835,835,835,835,835,,835', '835,835,,835,835,835,835,835,517,517,517,517,517,517,517,517,517,517', '517,,517,517,,,517,517,,835,,,835,,,835,835,,,835,,835,517,,517,835', '517,517,,517,517,517,517,517,835,517,,,,835,835,835,835,,835,835,835', '835,,,,,835,835,,517,,,,,835,,835,835,835,838,838,838,838,838,838,,', ',838,838,,,,838,,838,838,838,838,838,838,838,,,,,,838,838,838,838,838', '838,838,,,838,,,,,,838,838,838,838,838,838,838,838,838,838,838,838,', '838,838,838,,838,838,838,838,838,21,21,21,21,21,21,21,21,21,21,21,,21', '21,,,21,21,,838,,,838,,,838,838,,,838,,838,21,,21,838,21,21,,21,21,21', '21,21,838,21,,,,838,838,838,838,,838,838,838,838,,,,,838,838,,21,,,', ',838,,838,838,838,877,877,877,877,877,877,,,,877,877,,,,877,,877,877', '877,877,877,877,877,,,,,,877,877,877,877,877,877,877,,,877,,,,,,877', '877,877,877,877,877,877,877,877,877,877,877,,877,877,877,,877,877,877', '877,877,274,274,274,274,274,274,274,274,274,274,274,,274,274,,,274,274', ',877,,,877,,,877,877,,,877,,877,274,,274,877,274,274,,274,274,274,274', '274,877,274,,,,877,877,877,877,,877,877,877,877,,,,,877,877,,274,,,', ',877,,877,877,877,885,885,885,885,885,885,,,,885,885,,,,885,,885,885', '885,885,885,885,885,,,,,,885,885,885,885,885,885,885,,,885,,,,,,885', '885,885,885,885,885,885,885,885,885,885,885,,885,885,885,,885,885,885', '885,885,426,426,426,426,426,426,426,426,426,426,426,,426,426,,,426,426', ',885,,,885,,,885,885,,,885,,885,426,,426,885,426,426,,426,426,426,426', '426,885,426,,,,885,885,885,885,,885,885,885,885,,,,,885,885,,426,,,', ',885,,885,885,885,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,471,471,471,471,471,471,471,471,471,471,471,,471,471,,,471,471', ',566,,,566,,,566,566,,,566,,566,471,,471,566,471,471,,471,471,471,471', '471,566,471,,,,566,566,566,566,,566,566,566,566,,,,,566,566,471,471', ',,,,566,,566,566,566,588,588,588,588,588,588,,,,588,588,,,,588,,588', '588,588,588,588,588,588,,,,,,588,588,588,588,588,588,588,,,588,,,,,', '588,588,588,588,588,588,588,588,588,588,588,588,,588,588,588,,588,588', '588,588,588,765,765,765,765,765,765,765,765,765,765,765,,765,765,,,765', '765,,588,,,588,,,588,588,,,588,,588,765,,765,588,765,765,,765,765,765', '765,765,588,765,,,,588,588,588,588,,588,588,588,588,,,,,588,588,,765', ',,,,588,,588,588,588,33,33,33,33,33,33,,,,33,33,,,,33,,33,33,33,33,33', '33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,33,33,33,33,33,33,33,33,33', '33,33,33,,33,33,33,,33,33,33,33,33,763,763,763,763,763,763,763,763,763', '763,763,,763,763,,,763,763,,33,,,33,,,33,33,,,33,,33,763,,763,33,763', '763,,763,763,763,763,763,33,763,,,,33,33,33,33,,33,33,33,33,,,,,33,33', ',763,,,,,33,,33,33,33,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,761,761,761,761,761,761,761,761,761,761,761,,761,761,,,761', '761,,121,,,121,,,121,121,,,121,,121,761,,761,121,761,761,,761,761,761', '761,761,121,761,,,,121,121,121,121,,121,121,121,121,,,,,121,121,,761', ',,,,121,,121,121,121,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,758,758,758,758,758,758,758,758,758,758,758,,758,758,,,758', '758,,229,,,229,,,229,229,,,229,,229,758,,758,229,758,758,,758,758,758', '758,758,229,758,,,,229,229,229,229,,229,229,229,229,,,,,229,229,,758', ',,,,229,,229,229,229,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,756,756,756,756,756,756,756,756,756,756,756,,756,756,,,756', '756,,206,,,206,,,206,206,,,206,,206,756,,756,206,756,756,,756,756,756', '756,756,206,756,,,,206,206,206,206,,206,206,206,206,,,,,206,206,,756', ',,,,206,,206,206,206,323,323,323,323,323,323,,,,323,323,,,,323,,323', '323,323,323,323,323,323,,,,,,323,323,323,323,323,323,323,,826,323,826', '826,826,,826,323,323,323,323,323,323,323,323,323,323,323,323,,323,323', '323,,323,323,323,323,323,548,,548,548,548,,548,,826,,951,,951,951,951', ',951,826,,323,,,323,,,323,323,,,323,,323,,,,323,,548,,,,,,,323,,548', '951,,323,323,323,323,,323,323,323,323,,,,,323,323,,697,,697,697,697', '323,697,323,323,323,298,298,298,298,298,298,,,,298,298,,,,298,,298,298', '298,298,298,298,298,,,,,697,298,298,298,298,298,298,298,,697,298,,,467', ',,298,298,298,298,298,298,298,298,298,298,298,298,,298,298,298,,298', '298,298,298,298,457,457,457,457,457,457,457,467,,457,457,467,467,,467', '467,457,457,,298,,,298,,,298,298,,468,298,,298,457,,457,298,457,457', ',457,457,457,457,457,298,457,,,,298,298,298,298,,298,298,298,298,,,468', ',298,298,468,468,,468,468,,298,,298,298,298,789,789,789,789,789,789', ',,,789,789,,,,789,,789,789,789,789,789,789,789,,,,,,789,789,789,789', '789,789,789,,989,789,989,989,989,,989,789,789,789,789,789,789,789,789', '789,789,789,789,,789,789,789,,789,789,789,789,789,470,470,470,470,470', '470,470,470,989,470,470,,,,,,470,470,,789,,,789,,,789,789,,,789,,789', '470,,470,789,470,470,,470,470,470,470,470,789,470,,,,789,789,789,789', ',789,789,789,789,,,,,789,789,,953,,953,953,953,789,953,789,789,789,844', '844,844,844,844,844,,,,844,844,,,,844,,844,844,844,844,844,844,844,', ',,,953,844,844,844,844,844,844,844,,900,844,900,900,900,,900,844,844', '844,844,844,844,844,844,844,844,844,844,,844,844,844,,844,844,844,844', '844,469,469,469,469,469,469,469,,900,469,469,,,,,,469,469,,844,,,844', ',,844,844,,,844,,844,469,,469,844,469,469,,469,469,469,469,469,844,469', ',,,844,844,844,844,,844,844,844,844,,,,,844,844,,828,,828,828,828,844', '828,844,844,844,0,0,0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,828,0,0,0', '0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,466,466,466', '466,466,466,466,,,466,466,,,,,,466,466,,0,,,0,,,0,0,,,0,,0,466,,466', '0,466,466,,466,466,466,466,466,0,466,,,,0,0,0,0,,0,0,0,0,,,,,0,0,,,', ',,,0,,0,0,0,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', '465,465,465,465,465,465,465,,,465,465,,,,,,465,465,,293,,,293,,,293', '293,,,293,,293,465,,465,293,465,465,,465,465,465,465,465,293,465,,,', '293,293,293,293,,293,293,293,293,,,,,293,293,,,,,,,293,,293,293,293', '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,447,447,447', '447,447,447,447,447,447,447,447,,447,447,,,447,447,,496,,,496,,,496', '496,,,496,,496,447,,447,496,447,447,,447,447,447,447,447,496,447,,,', '496,496,496,496,,496,496,496,496,,,,,496,496,,,,,,,496,,496,496,496', '962,962,962,962,962,962,,,,962,962,,,,962,,962,962,962,962,962,962,962', ',,,,,962,962,962,962,962,962,962,,,962,,,,,,962,962,962,962,962,962', '962,962,962,962,962,962,,962,962,962,,962,962,962,962,962,464,464,464', '464,464,464,464,,,464,464,,,,,,464,464,,962,,,962,,,962,962,,,962,,962', '464,,464,962,464,464,,464,464,464,464,464,962,464,,,,962,962,962,962', ',962,962,962,962,,,,,962,962,,,,,,,962,,962,962,962,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,446,446,446,446,446,446,446', '446,446,446,446,,446,446,,,446,446,,741,,,741,,,741,741,,,741,,741,446', ',446,741,446,446,,446,446,446,446,446,741,446,,,,741,741,741,741,,741', '741,741,741,,,,,741,741,,,,,,,741,,741,741,741,884,884,884,884,884,884', ',,,884,884,,,,884,,884,884,884,884,884,884,884,,,,,,884,884,884,884', '884,884,884,,,884,,,,,,884,884,884,884,884,884,884,884,884,884,884,884', ',884,884,884,,884,884,884,884,884,463,463,463,463,463,463,463,,,463', '463,,,,,,463,463,,884,,,884,,,884,884,,,884,,884,463,,463,884,463,463', ',463,463,463,463,463,884,463,,,,884,884,884,884,,884,884,884,884,,,', ',884,884,,,,,,,884,,884,884,884,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,462,462,462,462,462,462,462,,,462,462,,,,,', '462,462,,801,,,801,,,801,801,,,801,,801,462,,462,801,462,462,,462,462', '462,462,462,801,462,,,,801,801,801,801,,801,801,801,801,,,,,801,801', ',,,,,,801,,801,801,801,960,960,960,960,960,960,,,,960,960,,,,960,,960', '960,960,960,960,960,960,,,,,,960,960,960,960,960,960,960,,,960,,,,,', '960,960,960,960,960,960,960,960,960,960,960,960,,960,960,960,,960,960', '960,960,960,461,,,,,,,,,,,,,,,,461,461,,960,,,960,,,960,960,,,960,,960', '461,,461,960,461,461,,461,461,,,461,960,461,,,,960,960,960,960,,960', '960,960,960,,,,,960,960,,,,,,,960,,960,960,960,954,954,954,954,954,954', ',,,954,954,,,,954,,954,954,954,954,954,954,954,,,,,,954,954,954,954', '954,954,954,,,954,,,,,,954,954,954,954,954,954,954,954,954,954,954,954', ',954,954,954,,954,954,954,954,954,460,,,,,,,,,,,,,,,,460,460,,954,,', '954,,,954,954,,,954,,954,460,,460,954,460,460,,460,460,,,460,954,460', ',,,954,954,954,954,,954,954,954,954,,,,,954,954,,,,,,,954,,954,954,954', '937,937,937,937,937,937,,,,937,937,,,,937,,937,937,937,937,937,937,937', ',,,,,937,937,937,937,937,937,937,,,937,,,,,,937,937,937,937,937,937', '937,937,937,937,937,937,,937,937,937,,937,937,937,937,937,459,,,,,,', ',,,,,,,,,459,459,,937,,,937,,,937,937,,,937,,937,459,,459,937,459,459', ',459,459,,,459,937,459,,,,937,937,937,937,,937,937,937,937,,,,,937,937', ',,,510,510,510,937,510,937,937,937,510,510,,,,510,,510,510,510,510,510', '510,510,,,,,,510,510,510,510,510,510,510,,,510,,,,,,,510,,455,510,510', '510,510,510,510,510,510,,510,510,510,,510,510,455,455,510,,,,,,,,,,', ',,,455,,455,,455,455,510,455,455,510,,,510,510,,456,510,,,693,,693,693', '693,693,693,,,,,,456,456,,693,,510,510,510,510,,510,510,510,510,,,456', ',510,510,456,456,,456,456,693,510,,510,510,510,5,5,5,5,5,693,693,,5', '5,693,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5', '5,5,5,5,,5,5,5,,5,5,5,5,5,458,,,,,,,,,,,,,,,,458,458,,5,,,5,,,5,5,,', '5,,5,458,,458,5,458,458,,458,458,,,458,5,458,,,,5,5,5,5,,5,5,5,5,,,', ',5,5,,,,978,978,978,5,978,5,5,5,978,978,,,,978,,978,978,978,978,978', '978,978,,,,,,978,978,978,978,978,978,978,,,978,,,,,,,978,,,978,978,978', '978,978,978,978,978,978,978,978,978,,978,978,978,978,978,454,,,,,,,', ',,,,,,,,454,454,,978,,,978,,,978,978,,,978,,978,454,978,454,978,454', '454,978,454,454,,,,978,,,,,978,978,978,978,,978,978,978,978,,,,,978', '978,,,,20,20,20,978,20,978,978,978,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,,,,29,29,29,20,29', '20,20,20,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,,,,,,29,,,', ',29,29,29,29,,29,29,29,29,,,,,29,29,,,,30,30,30,29,30,29,29,29,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,30,,,,31,31,31,30,31,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,,,,34,34,34,31,34,31,31,31,34,34,,,,34,,34,34,34,34,34,34,34', ',,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,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,34,35,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,,,864,,864,864,864,864,864,,,,,,,,,864', ',35,35,35,35,,35,35,35,35,,,,,35,35,,,,35,,864,35,,35,35,35,42,42,42', ',42,864,864,,42,42,864,,,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,,,,43,43,43,42,43,42,42,42,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,,,,44,44,44,43,44,43,43,43,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,,,,,44,44,,,,881,881,881,44', '881,44,44,44,881,881,,,,881,,881,881,881,881,881,881,881,,,,,,881,881', '881,881,881,881,881,,,881,,,,,,,881,,,881,881,881,881,881,881,881,881', ',881,881,881,,881,881,,,881,,,,,,,,,,,,,,,,,,,,881,,,881,,,881,881,', ',881,,,,,,,,,,,,,,,,,,,,881,881,881,881,,881,881,881,881,,,,,881,881', ',,,59,59,59,881,59,881,881,881,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,59,,,,,59,59,,,,60,60,60', '59,60,59,59,59,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,60,,,,63,63,63,60,63,60,60,60,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,,,,,63,63,,,,64,64,64,63,64,63,63,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,,,,,64,64,,,,67', '67,67,64,67,64,64,64,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67,67,67', '67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67,,67,67', '67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67,,,,,,,,,67', ',,,,67,67,67,67,,67,67,67,67,,,,,67,67,67,,,,,67,67,,67,67,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,', '68,68,68,68,,,,,68,68,,,,69,69,69,68,69,68,68,68,69,69,,,,69,,69,69', '69,69,69,69,69,,,,,,69,69,69,69,69,69,69,,,69,,,,,,,69,,,69,69,69,69', '69,69,69,69,,69,69,69,,69,69,,,69,,,,,,,,,,,,,,,,,69,,,69,,,69,,,69', '69,,,69,,,,,,,,,,,,,,,,,,,,69,69,69,69,,69,69,69,69,,,,,69,69,,,,70', '70,70,69,70,69,69,69,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,,,890,,890,890,890,890', '890,,,,,,,,,890,,70,70,70,70,,70,70,70,70,,,,,70,70,,,,,,890,70,,70', '70,70,111,111,111,111,111,890,890,,111,111,890,,,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,,,,117,117,117,116,117,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,,,,118', '118,118,117,118,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,,,,119,119,119,118,119,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,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,,,,869,869,869', '120,869,120,120,120,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,,,,207,207,207,869,207,869,869,869,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,,,,208,208,208,207,208,207,207', '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,,,,,208,208', ',,,209,209,209,208,209,208,208,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,,209,209,209,209,,,,,209,209,,,,212,212,212,209,212', '209,209,209,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,212,213,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,213,,,,214,214,214,213', '214,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,,,,215,215,215,214,215,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,,,,216,216,216,215', '216,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,,,,217,217,217,216,217,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,,,855,855,855,217', '855,217,217,217,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,,,,854,854,854,855,854,855,855,855,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,,,854,,,854,854,,,854,,,,854,,854,,,854', ',,,,,854,,,,,854,854,854,854,,854,854,854,854,,,,,854,854,,,,228,228', '228,854,228,854,854,854,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,,,,231,231,231,228,231,228,228,228,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,231,232,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,232,233,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,233,234,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,234,235,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,235,236,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,,,,237,237,237,236,237,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', ',,,238,238,238,237,238,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,,,,239,239,239,238,239,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', ',,,240,240,240,239,240,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,,,,241,241,241,240,241,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', ',,,242,242,242,241,242,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,,,,243,243,243,242,243,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', ',,,244,244,244,243,244,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,,,,245,245,245,244,245,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', ',,,246,246,246,245,246,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,,,,247,247,247,246,247,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', ',,,248,248,248,247,248,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,,,,249,249,249,248,249,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', ',,,250,250,250,249,250,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,,,,251,251,251,250,251,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', ',,,252,252,252,251,252,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,,,,253,253,253,252,253,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', ',,,254,254,254,253,254,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,,,,255,255,255,254,255,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', ',,,256,256,256,255,256,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,,,,263,263,263,256,263,256,256,256', '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,', ',,,263,263,,,,264,264,264,263,264,263,263,263,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,,,,,264,264,,,,272,272,272', '264,272,264,264,264,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,272', '272,,272,272,272,272,,,,,272,272,272,,,837,837,837,272,837,272,272,272', '837,837,,,,837,,837,837,837,837,837,837,837,,,,,,837,837,837,837,837', '837,837,,,837,,,,,,,837,,,837,837,837,837,837,837,837,837,,837,837,837', ',837,837,837,837,837,,,,,,,,,,,,,,,,,,,,837,,,837,,,837,837,,,837,,837', ',,,837,,,,,,,,,837,,,,,837,837,837,837,,837,837,837,837,,,,,837,837', ',,,279,279,279,837,279,837,837,837,279,279,,,,279,,279,279,279,279,279', '279,279,,,,,,279,279,279,279,279,279,279,,,279,,,,,,,279,,,279,279,279', '279,279,279,279,279,,279,279,279,,279,279,279,279,279,,,,,,,,,,,,,,', ',,,,,279,,,279,,,279,279,,,279,,,,,,279,,,,,,,,,279,,,,,279,279,279', '279,,279,279,279,279,,,,,279,279,,,,281,281,281,279,281,279,279,279', '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', ',,,283,283,283,281,283,281,281,281,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,,,,284,284,284,283,284,283,283,283', '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,289,289,289,289,289,,,,289,289,,,,289,,289,289', '289,289,289,289,289,,,,,,289,289,289,289,289,289,289,,,289,,,,,,289', '289,,289,289,289,289,289,289,289,289,289,,289,289,289,,289,289,289,289', '289,,,,,,,,,,,,,,,,,,,,289,,,289,,,289,289,,,289,,289,,,,289,,,,,,,', ',289,,,,,289,289,289,289,,289,289,289,289,,,,,289,289,,,,832,832,832', '289,832,289,289,289,832,832,,,,832,,832,832,832,832,832,832,832,,,,', ',832,832,832,832,832,832,832,,,832,,,,,,,832,,,832,832,832,832,832,832', '832,832,,832,832,832,,832,832,832,832,832,,,,,,,,,,,,,,,,,,,,832,,,832', ',,832,832,,,832,,,,,,832,,,,,,,,,832,,,,,832,832,832,832,,832,832,832', '832,,,,,832,832,,,,783,783,783,832,783,832,832,832,783,783,,,,783,,783', '783,783,783,783,783,783,,,,,,783,783,783,783,783,783,783,,,783,,,,,', ',783,,,783,783,783,783,783,783,783,783,,783,783,783,,783,783,,,783,', ',,,,,,,,,,,,,,,,,,783,,,783,,,783,783,,,783,,,,,,,,,,,,,,,,,,,,783,783', '783,783,,783,783,783,783,,,,,783,783,,,,771,771,771,783,771,783,783', '783,771,771,,,,771,,771,771,771,771,771,771,771,,,,,,771,771,771,771', '771,771,771,,,771,,,,,,,771,,,771,771,771,771,771,771,771,771,,771,771', '771,,771,771,771,771,771,,,,,,,,,,,,,,,,,,,,771,,,771,,,771,771,,,771', ',,,,,771,,,,,,,,,771,,,,,771,771,771,771,,771,771,771,771,,,,,771,771', ',,,297,297,297,771,297,771,771,771,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,,,892,,892,892,892,892,892,,,,,,,,,892,,297,297', '297,297,,297,297,297,297,,,,,297,297,,,,297,,892,297,,297,297,297,769', '769,769,,769,892,892,,769,769,892,,,769,,769,769,769,769,769,769,769', ',,,,,769,769,769,769,769,769,769,,,769,,,,,,,769,,,769,769,769,769,769', '769,769,769,,769,769,769,,769,769,769,769,769,,,,,,,,,,,,,,,,,,,,769', ',,769,,,769,769,,,769,,,,,,769,,,,,,,,,769,,,,,769,769,769,769,,769', '769,769,769,,,,,769,769,,,,768,768,768,769,768,769,769,769,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,,,,767', '767,767,768,767,768,768,768,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,,,767,767,,,767,,,,,,767,,,,,,,,,767,,,,,767,767,767,767', ',767,767,767,767,,,,,767,767,,,,766,766,766,767,766,767,767,767,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,', ',,314,314,314,766,314,766,766,766,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,,,314,,,,,,,,,,,,,,,,,,,,314,314,314,314,,314,314,314', '314,,,,,314,314,,,,752,752,752,314,752,314,314,314,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,,,,322,322,322,752', '322,752,752,752,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,322,322', '322,,,,,322,322,,,,324,324,324,322,324,322,322,322,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,,,,750,750,750,324', '750,324,324,324,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,,,,,750,750,,,,727,727,727,750,727,750,750,750,727,727,,,,727,,727', '727,727,727,727,727,727,,,,,,727,727,727,727,727,727,727,,,727,,,,,', ',727,,,727,727,727,727,727,727,727,727,,727,727,727,,727,727,727,727', '727,,,,,,,,,,,,,,,,,,,,727,,,727,,,727,727,,,727,,,,,,727,,,,,,,,,727', ',,,,727,727,727,727,,727,727,727,727,,,,,727,727,,,,721,721,721,727', '721,727,727,727,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,,,,339,339,339,721,339,721,721,721,339,339,,,,339,,339', '339,339,339,339,339,339,,,,,,339,339,339,339,339,339,339,,,339,,,,,', ',339,,,339,339,339,339,339,339,339,339,,339,339,339,,339,339,339,339', '339,,,,,,,,,,,,,,,,,,,,339,,,339,,,339,339,,,339,,,,,,339,,,,,,,,,339', ',,,,339,339,339,339,,339,339,339,339,,,,,339,339,,,,340,340,340,339', '340,339,339,339,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,,,,695,695,695,340,695,340,340,340,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,,,,359,359,359,695', '359,695,695,695,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,,,,678,678,678,359,678,359,359,359,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,,,,673,673,673', '678,673,678,678,678,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,,,673,,,,,,,,,,,,,,,,,,,,673,673,673,673,,673,673,673,673,,,,,673', '673,,,,662,662,662,673,662,673,673,673,662,662,,,,662,,662,662,662,662', '662,662,662,,,,,,662,662,662,662,662,662,662,,,662,,,,,,,662,,,662,662', '662,662,662,662,662,662,,662,662,662,,662,662,,,662,,,,,,,,,,,,,,,,', ',,,662,,,662,,,662,662,,,662,,,,,,,,,,,,,,,,,,,,662,662,662,662,,662', '662,662,662,,,,,662,662,,,,656,656,656,662,656,662,662,662,656,656,', ',,656,,656,656,656,656,656,656,656,,,,,,656,656,656,656,656,656,656', ',,656,,,,,,,656,,,656,656,656,656,656,656,656,656,,656,656,656,,656', '656,656,656,656,,,,,,,,,,,,,,,,,,,,656,,,656,,,656,656,,,656,,,,,,656', ',,,,,,,,656,,,,,656,656,656,656,,656,656,656,656,,,,,656,656,,,,375', '375,375,656,375,656,656,656,375,375,,,,375,,375,375,375,375,375,375', '375,,,,,,375,375,375,375,375,375,375,,,375,,,,,,,375,,,375,375,375,375', '375,375,375,375,,375,375,375,,375,375,375,375,375,,,,,,,,,,,,,,,,,,', ',375,,,375,,,375,375,,,375,,,,,,375,,,,,,,,,375,,,,,375,375,375,375', ',375,375,375,375,,,,,375,375,,,,403,403,403,375,403,375,375,375,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,403,403,,403,403,403,403,,,,,403,403,', ',,632,632,632,403,632,403,403,403,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,,,,441,441,441,632,441,632,632,632', '441,441,,,,441,,441,441,441,441,441,441,441,,,,,,441,441,441,441,441', '441,441,,,441,,,,,,,441,,,441,441,441,441,441,441,441,441,441,441,441', '441,,441,441,441,441,441,,,,,,,,,,,,,,,,,,,,441,,,441,,,441,441,,,441', ',441,,441,,441,,,441,,,,,,441,,,,,441,441,441,441,,441,441,441,441,', ',,,441,441,,,,443,443,443,441,443,441,441,441,443,443,,,,443,,443,443', '443,443,443,443,443,,,,,,443,443,443,443,443,443,443,,,443,,,,,,,443', ',,443,443,443,443,443,443,443,443,,443,443,443,,443,443,443,443,443', ',,,,,,,,,,,,,,,,,,,443,,,443,,,443,443,,,443,,,,,,443,,,,,,,,,443,,', ',,443,443,443,443,,443,443,443,443,,,,,443,443,,,,444,444,444,443,444', '443,443,443,444,444,,,,444,,444,444,444,444,444,444,444,,,,,,444,444', '444,444,444,444,444,,,444,,,,,,,444,,,444,444,444,444,444,444,444,444', ',444,444,444,,444,444,444,444,444,,,,,,,,,,,,,,,,,,,,444,,,444,,,444', '444,,,444,,,,,,444,,,,,,,,,444,,,,,444,444,444,444,,444,444,444,444', ',,,,444,444,,,,445,445,445,444,445,444,444,444,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,,,,631,631,631,445,631', '445,445,445,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,,,,628,628,628,631,628,631,631,631,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,,,,627,627,627,628,627', '628,628,628,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', ',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,,,,623,623,623,627,623,627,627,627,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,623,,623,623,623,623,623', ',,,,,,,,,,,,,,,,,,,623,,,623,,,623,623,,,623,,,,,,623,,,,,,,,,623,,', ',,623,623,623,623,,623,623,623,623,,,,,623,623,,,,622,622,622,623,622', '623,623,623,622,622,,,,622,,622,622,622,622,622,622,622,,,,,,622,622', '622,622,622,622,622,,,622,,,,,,,622,,,622,622,622,622,622,622,622,622', ',622,622,622,,622,622,622,622,622,,,,,,,,,,,,,,,,,,,,622,,,622,,,622', '622,,,622,,,,,,622,,,,,,,,,622,,,,,622,622,622,622,,622,622,622,622', ',,,,622,622,,,,621,621,621,622,621,622,622,622,621,621,,,,621,,621,621', '621,621,621,621,621,,,,,,621,621,621,621,621,621,621,,,621,,,,,,,621', ',,621,621,621,621,621,621,621,621,621,621,621,621,,621,621,621,621,621', ',,,,,,,,,,,,,,,,,,,621,,,621,,,621,621,,,621,,,,621,,621,,,621,,,,,', '621,,,,,621,621,621,621,,621,621,621,621,,,,,621,621,,,,620,620,620', '621,620,621,621,621,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,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,,,,,620,620,,,,617,617,617,620,617,620,620,620', '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', ',,,616,616,616,617,616,617,617,617,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,616,,,,,616,616,,,,582,582,582,616,582,616,616,616', '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,,582,,,582,,,,,,582,,,,,582,582,582,582,,582,582,582,582,', ',,,582,582,,,,572,572,572,582,572,582,582,582,572,572,,,,572,,572,572', '572,572,572,572,572,,,,,,572,572,572,572,572,572,572,,,572,,,,,,,572', ',,572,572,572,572,572,572,572,572,572,572,572,572,,572,572,572,572,572', ',,,,,,,,,,,,,,,,,,,572,,,572,,,572,572,,,572,,572,,572,,572,,,572,,', ',,,572,,,,,572,572,572,572,,572,572,572,572,,,,,572,572,,,,571,571,571', '572,571,572,572,572,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,,,,551,551,551,571,551,571,571,571,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,,,,527,527,527', '551,527,551,551,551,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,,,,485,485,485,527,485,527,527,527,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,,485,485,485,485,,,,,485,485', ',,,487,487,487,485,487,485,485,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,,,,,487,487,,,,489,489,489,487,489,487', '487,487,489,489,,,,489,,489,489,489,489,489,489,489,,,,,,489,489,489', '489,489,489,489,,,489,,,,,,,489,,,489,489,489,489,489,489,489,489,,489', '489,489,,489,489,489,489,489,,,,,,,,,,,,,,,,,,,,489,,,489,,,489,489', ',,489,,,,,,489,,,,,,,,,489,,,,,489,489,489,489,,489,489,489,489,,,,', '489,489,,,,,,,489,,489,489,489,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,494,,,494,,494,,', ',494,,,,,,,,,494,,,,,494,494,494,494,,494,494,494,494,,,,,494,494,,', ',,,494,494,,494,494,494,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,524,,,,518,518,518', '524,518,524,524,524,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,,,,502,502,502,518,502,518,518,518,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,,,,504,504,504,502,504,502,502', '502,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,,,,513,513,513,504,513,504,504,504,513,513,,,,513,,513', '513,513,513,513,513,513,,,,,,513,513,513,513,513,513,513,,,513,,,,,', ',513,,,513,513,513,513,513,513,513,513,,513,513,513,,513,513,513,513', '513,,,,,,,,,,,,,,,,,,,,513,,,513,,,513,513,,,513,,,,,,513,,,,,,,,,513', ',,,,513,513,513,513,,513,513,513,513,,,,,513,513,,,,,423,,513,,513,513', '513,423,423,423,,,423,423,423,,423,,,,,,,,,423,423,423,423,,,,,,,,423', '423,,423,423,423,423,423,,,,,,,,,,,,,,,,,,,,,,,423,423,423,423,423,423', '423,423,423,423,423,423,423,423,,,423,423,423,,,423,,,423,,,423,423', ',423,,423,,423,,423,423,,423,423,423,423,423,,423,423,423,,,,,,,,,,', ',,,423,,,423,423,423,423,56,423,,423,,,,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,56', '56,424,56,,56,,,,424,424,424,,,424,424,424,,424,,,,,,,,,424,424,424', '424,,,,,,,,424,424,,424,424,424,424,424,,,,,,,,,,,,,,,,,,,,,,,424,424', '424,424,424,424,424,424,424,424,424,424,424,424,,,424,424,424,,,424', ',,424,,,424,424,,424,,424,,424,,424,424,,424,424,424,424,424,,424,424', '424,894,,894,894,894,894,894,,,,,,,424,,894,424,424,424,424,27,424,', '424,,,,27,27,27,,,27,27,27,,27,894,,,,,,,,27,27,27,894,894,,,,894,,', '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,28,27,27,27,,,,28,28,28,,,28,28,28,,28,27,,,27,27,,27', ',27,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,,28,,28,,28,28,,28,28,28,28,28,,28,473,28,,,,,,473,473,473,,,473', '473,473,28,473,,28,28,,28,,28,,473,473,,,,,,,,,,473,473,,473,473,473', '473,473,,,,,,,,,,,,,,,,,,643,,643,643,643,643,643,,,,,,,,,643,473,,414', ',,,,473,,414,414,414,473,473,414,414,414,,414,,,643,,,,,,414,414,414', '643,643,643,643,,473,473,643,414,414,,414,414,414,414,414,,,,,473,,', '473,,,,,473,,,,,643,,,,,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,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,,,,8,8,8,8,8,8', '8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8,,8,8,8,8,8,8,8,,,8,8', ',,,8,8,8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8,8,8,8,,,8,8,,,,,,,,,', ',,,,8,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,9,9,,,9,9,,,,,,,,,,', ',,,9,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,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,613,613,613,613,613,613,613,613,613,613,613,613,613,613', '613,613,613,613,613,613,613,613,613,613,,,,613,613,613,613,613,613,613', '613,613,613,,,,,,613,613,613,613,613,613,613,613,613,,,613,,,,,,,,613', '613,,613,613,613,613,613,613,613,,,613,613,,,,613,613,613,613,,,,,,', ',,,,,,,613,613,,613,613,613,613,613,613,613,613,613,613,613,613,,,613', '613,,,,,,,,,,,,,,613,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,,,71,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,,734,734,734,734,734,734,734,734,734,734,734,734', '506,506,734,,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,439,439,506,,439,,,,,,,,439,439,,439,439,439', '439,439,439,439,,,439,439,,,,439,439,439,439,,,,,,439,,,,,,,,439,439', ',439,439,439,439,439,439,439,439,439,439,439,439,979,979,439,,979,,', ',,,,,979,979,,979,979,979,979,979,979,979,,,979,979,,,,979,979,979,979', ',,,,,979,,,,,,,,979,979,,979,979,979,979,979,979,979,979,979,979,979', '979,515,515,979,,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,515,515,515,581,581,515,,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,581,581,581,581,581,580,580,581,,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,580,580', '580,580,933,933,580,,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,210,210,933,,210,,,,,,,,210,210,,210', '210,210,210,210,210,210,,,210,210,,,,210,210,210,210,,,,,,210,,,,,,', ',210,210,,210,210,210,210,210,210,210,210,210,210,210,210,440,440,210', ',440,,,,,,,,440,440,,440,440,440,440,440,440,440,,,440,440,,,,440,440', '440,440,,,,,,440,,,,,,,,440,440,,440,440,440,440,440,440,440,440,440', '440,440,440,259,259,440,,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,574,574,259,,574,,,,,,,,574,574,,574', '574,574,574,574,574,574,,,574,574,,,,574,574,574,574,,,,,,574,,,,,,', ',574,574,,574,574,574,574,574,574,574,574,574,574,574,574,516,516,574', ',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,573,573,516,,573,,,,,,,,573,573,,573,573,573,573,573,573', '573,,,573,573,,,,573,573,573,573,,,,,,573,,,,,,,,573,573,,573,573,573', '573,573,573,573,573,573,573,573,573,211,211,573,,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,980,980', '211,,980,,,,,,,,980,980,,980,980,980,980,980,980,980,,,980,980,,,,980', '980,980,980,,,,,,980,,,,,,,,980,980,,980,980,980,980,980,980,980,980', '980,980,980,980,505,505,980,,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,,888,505,888,888,888,888,888', ',,,,,,,335,888,335,335,335,335,335,,,,,,,,532,335,532,532,532,532,532', ',,888,,,,,,532,,,888,888,888,888,,335,335,888,,,,,,,335,335,335,335', ',532,,335,,,,,,,532,532,532,532,,,689,532,689,689,689,689,689,,691,', '691,691,691,691,691,689,,,,,,,,691,,732,,732,732,732,732,732,,,,,,689', ',,732,,,,,691,689,689,689,689,,,,689,691,691,691,691,,,,691,732,,733', ',733,733,733,733,733,732,732,732,732,,,,732,733,,860,,860,860,860,860', '860,,862,,862,862,862,862,862,860,,,,,733,,,862,,,,,,733,733,733,733', ',,,733,860,,,,,,,,862,860,860,860,860,,,,860,862,862,862,862,,,964,862', '964,964,964,964,964,966,,966,966,966,966,966,968,964,968,968,968,968', '968,970,966,970,970,970,970,970,984,968,984,984,984,984,984,,970,964', ',,,,,984,966,,964,964,964,964,,968,,964,,966,966,,970,,966,,968,968', ',984,,968,,970,970,,,,970,,984,984,,,1010,984,1010,1010,1010,1010,1010', ',,,,,,,,1010,,,,,,,,,,,,,,,,,,,,,,1010,,,,,,,,,,,1010,1010,,,,1010' ] racc_action_check = arr = ::Array.new(24831, 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 = [ 3683, 920, nil, 184, nil, 5213, 1568, 536, 22762, 22890, 807, nil, 770, 824, 815, 696, 732, 646, nil, -71, 5475, 1863, 800, nil, 307, nil, 247, 22327, 22437, 5606, 5737, 5868, nil, 2563, 5999, 6130, nil, 525, 105, 737, 545, 169, 6269, 6400, 6531, 461, 1065, nil, nil, nil, nil, nil, nil, nil, nil, nil, 22059, nil, -66, 6793, 6924, -8, nil, 7055, 7186, nil, nil, 7317, 7456, 7587, 7718, 23274, nil, nil, nil, nil, nil, 373, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 110, nil, nil, 330, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 589, nil, 7857, nil, nil, nil, nil, 7996, 8127, 8258, 8389, 8528, 2703, nil, -27, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 394, nil, 2983, 8790, 8921, 9052, 23875, 24241, 9183, 9314, 9445, 9576, 9707, 9838, nil, nil, 1095, 193, 125, 449, 109, 357, 324, nil, 10231, 2843, 260, 10362, 10493, 10624, 10755, 10886, 11017, 11148, 11279, 11410, 11541, 11672, 11803, 11934, 12065, 12196, 12327, 12458, 12589, 12720, 12851, 12982, 13113, 13244, 13375, 13506, 13637, nil, nil, 23997, nil, nil, 215, 13768, 13899, nil, nil, nil, nil, nil, nil, nil, 14030, nil, 2003, nil, 168, 152, nil, 14292, 184, 14423, nil, 14554, 14685, nil, nil, 310, nil, 14824, 1443, 1318, 1286, 3823, 1277, 1307, 1196, 15348, 3263, 955, 925, 886, 1272, 1205, nil, 1228, 1186, 228, nil, nil, nil, 1226, 313, 1178, 16011, nil, 219, 1244, 1026, nil, 1231, nil, 16273, 3123, 16404, 1166, nil, 232, 516, 1194, 1164, 102, 1188, nil, nil, 24439, 357, 79, 33, 16928, 17059, -50, 1251, 1127, -5, 65, 477, 1198, 9, 1195, nil, nil, 406, 365, -2, nil, 438, nil, 9, 17321, nil, nil, nil, 622, 508, 504, 392, 338, 264, 196, 637, 755, nil, -19, nil, 17976, nil, 404, -30, 631, 361, 395, -39, -25, 399, nil, nil, nil, nil, nil, nil, nil, nil, 1040, 23018, nil, nil, nil, nil, 1037, nil, nil, 1014, 18107, 1004, nil, nil, 1023, 1005, nil, 989, 984, 424, 414, 22628, nil, nil, nil, 220, 0, 1024, nil, nil, 21925, 22193, nil, 2143, nil, 968, nil, nil, 743, nil, nil, nil, nil, -33, nil, 1014, 23509, 23936, 18369, 246, 18500, 18631, 18762, 4243, 3963, 279, 492, 999, 998, 997, 994, 5344, 5055, 5102, 3263, 5213, 4943, 4803, 4663, 4523, 4383, 4103, 3823, 3683, 3238, 3291, 3543, 3403, 2283, 175, 22549, nil, nil, nil, nil, 905, nil, 165, -59, 847, nil, nil, 20727, nil, 20858, nil, 20989, nil, nil, nil, nil, 21128, 1583, 3963, 813, 806, nil, nil, 792, 21529, 794, 21660, 24363, 23448, 1166, 834, nil, 5074, 789, nil, 21791, 602, 23631, 24119, 1723, 21398, 957, 960, 690, 883, nil, 21267, nil, nil, 20596, nil, nil, nil, nil, 24453, nil, 862, 863, nil, 864, 875, 874, nil, nil, nil, nil, nil, nil, nil, 869, 3138, nil, nil, 20465, nil, nil, nil, 962, nil, nil, nil, 966, nil, nil, 979, 883, 1019, nil, 2283, 148, 147, 1020, 1028, 20334, 20203, 24180, 24058, 57, nil, nil, 341, nil, 23753, 23692, 20072, nil, nil, nil, 321, 233, 2423, 958, nil, 18, nil, nil, nil, 726, nil, nil, nil, 930, nil, nil, 261, nil, 255, nil, nil, 916, nil, 917, nil, nil, nil, 23146, nil, 926, 19941, 19810, 734, 968, 19679, 19548, 19417, 19286, 983, nil, nil, 19155, 19024, 987, nil, 18893, 18238, nil, nil, 113, 140, 466, 602, 997, 883, 1004, nil, 22559, nil, 1023, 1121, -13, -47, nil, 1163, 1303, nil, 1022, nil, 1069, 17845, nil, nil, nil, 1044, -113, 17714, 1027, nil, 1040, 134, 135, 1082, 299, 1303, 1086, 1043, 17583, 1303, 1111, 24, 1173, 17452, nil, 1059, nil, 122, -22, 1060, 791, nil, nil, 413, 24505, nil, 24513, nil, 5121, nil, 17190, nil, 3203, nil, 1072, 529, 1093, nil, nil, nil, nil, 737, nil, 1230, nil, nil, nil, nil, 1240, nil, 10, 1127, 68, -19, 32, -1, 16797, 223, 1163, nil, 1146, 1443, 16666, nil, nil, 1278, 1583, 24530, 24569, 23387, nil, nil, nil, nil, nil, nil, 4243, nil, nil, nil, nil, nil, nil, nil, 1162, 16535, 1163, 16142, nil, 1167, nil, 2983, nil, 2843, nil, nil, 2703, nil, 2563, nil, 2423, 15880, 15749, 15618, 15487, 278, 15217, 1197, 1198, nil, 1206, 1212, 1226, nil, 1254, 1254, 1254, 1252, 15086, nil, nil, 1393, nil, nil, 3403, 1302, 1407, nil, nil, nil, 1284, 404, nil, nil, 1420, nil, 4523, 1300, 1348, nil, nil, 1346, nil, nil, nil, nil, 1347, 1307, nil, nil, nil, -132, -122, nil, -86, -76, nil, 24, nil, nil, 75, 3109, 89, 3623, nil, 235, nil, 14955, 249, 743, 1723, nil, 14161, 1863, 39, 25, nil, 369, 72, 3543, nil, 418, 342, -101, nil, 357, 363, nil, 1443, 10100, 9969, 1583, 916, nil, nil, 24586, nil, 24594, nil, 6177, nil, nil, 458, 1149, 8659, 1443, 521, nil, 474, nil, nil, nil, 2003, nil, nil, 32, 6662, nil, nil, 4383, 2143, nil, nil, 24425, nil, 7765, nil, 15395, nil, 22256, nil, nil, nil, nil, 393, 3529, 568, nil, 26, nil, 707, 719, nil, 454, nil, nil, nil, 727, nil, nil, nil, 678, nil, 636, nil, nil, 637, 638, 666, 670, nil, 691, nil, 384, nil, nil, nil, 675, 23814, nil, nil, nil, 4943, 1235, 1306, 1345, 775, 1375, nil, 720, 827, 709, 722, 723, 729, 735, 3148, 736, 3483, 4803, nil, nil, nil, nil, nil, 4663, nil, 4103, nil, 24646, nil, 24653, nil, 24660, nil, 24667, nil, nil, nil, 1289, 808, 818, 902, 5344, 23570, 24302, 883, nil, nil, 24674, nil, nil, nil, nil, 3389, 854, 613, 1182, 1190, 1157, 1160, 413, 418, nil, nil, 433, -10, 36, 40, 1023, 744, 747, nil, nil, nil, 24726, nil, nil, nil, nil, 34, nil, 763, nil ] racc_action_default = [ -3, -595, -1, -581, -4, -595, -7, -595, -595, -595, -595, -29, -595, -595, -595, -279, -595, -40, -43, -583, -595, -48, -50, -51, -52, -56, -256, -256, -256, -293, -328, -329, -68, -11, -72, -80, -82, -595, -488, -489, -595, -595, -595, -595, -595, -583, -237, -270, -271, -272, -273, -274, -275, -276, -277, -278, -571, -281, -283, -594, -562, -301, -389, -595, -595, -306, -309, -581, -595, -595, -595, -595, -330, -331, -429, -430, -431, -432, -433, -454, -436, -437, -456, -458, -441, -446, -450, -452, -468, -456, -470, -472, -473, -474, -475, -569, -477, -478, -570, -480, -481, -482, -483, -484, -485, -486, -487, -492, -493, -595, -2, -582, -590, -591, -592, -6, -595, -595, -595, -595, -595, -3, -17, -595, -111, -112, -113, -114, -115, -116, -117, -118, -119, -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, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -22, -120, -11, -595, -595, -246, -595, -595, -595, -595, -595, -595, -595, -583, -584, -47, -595, -488, -489, -595, -279, -595, -595, -229, -595, -11, -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, -398, -400, -595, -579, -580, -57, -246, -595, -300, -404, -413, -415, -63, -410, -64, -583, -65, -238, -251, -260, -260, -255, -595, -261, -595, -564, -595, -595, -66, -67, -581, -12, -595, -15, -595, -70, -11, -583, -595, -73, -76, -11, -88, -89, -595, -595, -96, -293, -296, -583, -595, -328, -329, -332, -411, -595, -78, -595, -84, -290, -471, -595, -214, -215, -230, -595, -11, -595, -583, -239, -587, -587, -595, -595, -587, -595, -302, -303, -521, -49, -595, -595, -595, -595, -581, -595, -582, -488, -489, -595, -595, -279, -595, -342, -343, -106, -107, -595, -109, -595, -279, -595, -595, -488, -489, -321, -111, -112, -153, -154, -155, -171, -176, -183, -186, -323, -595, -560, -595, -434, -595, -595, -595, -595, -595, -595, -595, -595, 1019, -5, -593, -23, -24, -25, -26, -27, -595, -595, -19, -20, -21, -121, -595, -30, -39, -266, -595, -595, -265, -31, -196, -583, -247, -260, -260, -572, -573, -256, -408, -574, -575, -573, -572, -256, -407, -409, -574, -575, -37, -204, -38, -595, -41, -42, -194, -261, -44, -45, -46, -583, -299, -595, -595, -595, -246, -290, -595, -595, -595, -205, -206, -207, -208, -209, -210, -211, -212, -216, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -231, -232, -233, -234, -583, -378, -256, -572, -573, -54, -58, -583, -257, -378, -378, -583, -295, -252, -595, -253, -595, -258, -595, -262, -567, -568, -10, -582, -14, -3, -583, -69, -288, -85, -74, -595, -583, -246, -595, -595, -95, -595, -471, -595, -81, -86, -595, -595, -595, -595, -235, -595, -421, -595, -284, -595, -240, -589, -588, -242, -589, -291, -292, -563, -390, -521, -393, -559, -559, -504, -506, -506, -506, -520, -522, -523, -524, -525, -526, -527, -528, -595, -530, -532, -534, -539, -541, -542, -544, -549, -551, -552, -554, -555, -556, -595, -11, -333, -334, -11, -595, -595, -595, -595, -595, -246, -595, -595, -290, -314, -106, -107, -108, -595, -595, -246, -317, -494, -495, -595, -595, -11, -499, -325, -583, -435, -455, -460, -595, -462, -438, -457, -595, -459, -440, -595, -443, -595, -445, -448, -595, -449, -595, -469, -8, -18, -595, -28, -269, -595, -595, -412, -595, -248, -250, -595, -595, -59, -245, -405, -595, -595, -61, -406, -595, -595, -298, -585, -572, -573, -572, -573, -583, -194, -595, -379, -583, -381, -11, -53, -401, -378, -243, -11, -11, -294, -260, -259, -263, -595, -565, -566, -13, -595, -71, -595, -77, -83, -583, -572, -573, -244, -92, -94, -595, -79, -595, -203, -213, -583, -594, -594, -282, -583, -287, -587, -595, -583, -595, -502, -503, -595, -595, -513, -595, -516, -595, -518, -595, -344, -595, -346, -348, -355, -583, -533, -543, -553, -557, -594, -335, -594, -307, -336, -337, -310, -595, -313, -595, -583, -572, -573, -576, -289, -595, -106, -107, -110, -583, -11, -595, -497, -319, -595, -11, -521, -521, -595, -561, -461, -464, -465, -466, -467, -11, -439, -442, -444, -447, -451, -453, -122, -267, -595, -197, -595, -586, -260, -33, -199, -34, -200, -60, -35, -202, -36, -201, -62, -195, -595, -595, -595, -595, -412, -595, -559, -559, -360, -362, -362, -362, -377, -595, -583, -383, -528, -536, -537, -547, -595, -403, -402, -11, -595, -595, -254, -264, -16, -75, -90, -87, -297, -594, -340, -11, -422, -594, -423, -424, -595, -241, -391, -394, -396, -595, -559, -540, -558, -505, -506, -506, -531, -506, -506, -550, -506, -528, -545, -583, -595, -353, -595, -529, -595, -338, -595, -595, -11, -11, -312, -595, -11, -412, -595, -412, -595, -595, -11, -322, -595, -583, -595, -326, -595, -268, -32, -198, -249, -595, -236, -595, -358, -359, -368, -370, -595, -373, -595, -375, -380, -595, -595, -595, -535, -595, -399, -595, -414, -416, -9, -11, -428, -341, -595, -595, -426, -285, -11, -11, -392, -501, -595, -509, -595, -511, -595, -514, -595, -517, -519, -345, -347, -351, -595, -356, -304, -595, -305, -595, -595, -263, -594, -315, -318, -496, -595, -324, -498, -500, -499, -463, -559, -538, -361, -362, -362, -362, -362, -548, -362, -382, -583, -385, -387, -388, -546, -595, -290, -55, -427, -11, -97, -98, -595, -595, -105, -425, -595, -595, -506, -506, -506, -506, -349, -595, -354, -595, -11, -308, -311, -417, -418, -419, -11, -320, -11, -357, -595, -365, -595, -367, -595, -371, -595, -374, -376, -384, -595, -289, -576, -421, -246, -595, -595, -104, -395, -397, -595, -507, -510, -512, -515, -595, -352, -594, -595, -595, -362, -362, -362, -362, -386, -420, -583, -572, -573, -576, -103, -506, -350, -339, -316, -327, -595, -363, -366, -369, -372, -412, -508, -362, -364 ] clist = [ '216,275,275,275,14,408,326,333,437,14,258,372,296,2,266,270,677,486', '520,570,6,414,420,477,220,6,322,259,127,127,405,132,132,220,220,220', '427,14,301,301,563,566,122,205,430,310,310,337,338,830,654,341,654,731', '818,130,130,511,618,478,533,111,110,483,776,657,317,220,220,313,473', '220,346,356,356,690,692,694,219,310,310,310,821,115,579,498,799,262', '269,271,701,127,779,540,709,712,898,929,931,114,388,389,390,391,294', '657,925,277,277,277,645,901,292,686,687,14,380,833,650,651,220,220,220', '220,14,14,342,13,378,358,362,6,13,811,393,384,876,328,331,659,392,6', '602,604,204,351,593,401,600,603,603,486,276,276,276,523,526,394,648', '530,13,613,329,114,273,285,286,647,374,330,334,349,583,373,295,323,324', '680,325,339,834,275,327,952,340,654,654,336,336,386,835,336,721,960', '726,844,588,589,415,657,734,916,778,998,931,780,928,531,925,808,14,220', '220,220,777,335,220,220,220,220,220,220,683,898,884,818,885,633,472', '867,480,424,773,14,990,275,275,639,13,825,336,336,336,336,275,663,713', '13,13,481,414,420,783,672,957,803,880,684,376,818,817,377,819,379,1', '400,406,220,220,649,425,429,1006,652,812,381,220,382,383,821,736,921', '741,730,727,816,789,508,661,770,540,813,512,14,664,266,919,14,,270,665', '301,14,,,,522,,310,495,724,,,,,796,668,958,301,,,,,567,568,310,668,14', '220,,404,501,,13,1007,818,404,509,433,434,435,436,277,220,220,494,493', '399,,,277,858,859,,889,891,13,893,895,,896,,,220,497,,839,909,716,503', '295,744,292,744,,841,590,292,725,220,962,,735,114,668,759,,276,,619', '764,887,668,792,,276,,,,479,569,,625,,,795,,482,630,,,,,275,127,,13', '132,838,654,13,842,,,,13,846,415,612,,,922,657,923,295,,,114,,295,,130', ',,,220,918,,521,773,13,773,641,773,584,,,847,848,946,424,625,430,336', '336,,783,798,,783,,783,,783,999,624,275,,,,512,629,,587,985,986,987', '988,512,,540,540,829,415,792,,,963,14,591,14,804,,415,,,301,,220,660', '807,,,310,301,,6,,,,,310,220,,,,424,,,,,,,,646,994,424,,,912,,,,1016', '275,,,,,,,26,,773,275,773,26,773,,773,,415,,653,,,,14,,415,14,26,,783', ',783,220,783,,783,26,26,26,937,26,959,220,,,,,,14,788,424,,,,,773,424', ',682,,,,954,,,,,,,,26,26,897,,26,783,619,13,,13,781,805,220,220,,,,220', '220,127,787,220,132,,914,,512,,676,,,,619,748,,14,1015,797,,,14,14,625', '993,,630,130,806,26,710,710,781,301,26,26,26,26,26,26,310,849,,,301', ',,755,757,728,729,310,760,762,,,429,13,,,13,715,,,619,754,,,,,,706,840', '619,708,,,,843,,,,13,,,,,,,,,,220,,,,,14,220,,,,14,,,,,,,,,,14,878,', ',,882,,,,127,,220,26,26,26,26,781,,26,26,26,26,26,26,,,,13,,1000,,,13', '13,,26,,,,,,786,870,,,668,790,791,14,310,,,,,,,404,,,,14,,,,,852,,,', '26,26,903,,,,,774,,26,,,,38,,,,,38,,,,220,,14,14,26,,14,,26,336,,,14', '26,,336,,13,,,,,13,,38,299,299,814,,,814,,13,,,,,932,26,26,,,,,310,14', '850,,,940,,,14,14,26,26,310,,,344,360,360,360,,,,,,,,,,,973,26,,,,,', '13,,,,,,,,,,26,,13,,873,,,,,,710,,38,911,775,14,879,,915,,,38,38,,275', ',,424,,,336,,14,,,13,13,,14,13,14,415,,,,13,,,,905,906,,,908,,619,220', ',,,,,820,,822,16,26,,,,16,,,,424,,,,13,861,863,865,,,,13,13,,,,,,936', ',,,,,16,944,945,,,,,,,38,,814,,,774,,774,,774,,,26,,26,,,,,,,,26,38', ',,350,,,,,13,,,,,26,,,,,,,,,977,,,13,,,,,,13,,13,,,,,,991,,,,,,992,16', ',,,,,,,,16,16,,26,,38,26,,,38,,,26,299,38,,,,,,,,26,,,,,,26,,299,774', ',774,,774,,774,,38,965,967,969,971,,972,,,924,,926,,,,,,,,,,,,26,26', ',,,26,26,,,26,,,947,,948,774,949,,,,,,,26,16,,,,26,26,,428,15,,,,,15', ',,,,,,,,,16,,,,1011,1012,1013,1014,,,,,,,,,,,15,303,303,,,,,,,1018,', ',,,,,,,,,,,,995,,996,,997,,,,,,,26,348,357,357,,26,26,,16,1005,26,,16', ',,,,16,,332,26,,,,,,,,,,,26,,,,1017,,,,,,,16,,15,,,,,38,,38,,15,15,', ',299,,,,,39,,,299,,39,26,,,,,,,,,,,,26,,,,,,,,,,,,,,,39,300,300,,,,', ',,,,,,,,,26,,26,26,,,26,38,,,38,,26,,,,,,,345,361,361,361,,,,,,15,,', ',38,,,,,,,,,,,,,26,,,,,,15,26,26,,402,,,,,,432,39,,,,,,,,,39,39,,,,', ',,,,,,,,,,,,38,,,,,38,38,,,,,,,16,,16,26,299,,,,,15,,,,15,,299,,303', '15,,26,,,,,488,26,490,26,491,492,,,,303,,,,,,,,,15,26,,,,,,,,,,,39,', ',,,,,,,,,,,38,16,,,16,38,,,,,39,,,,,38,,,,,,,,,,,16,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,360,,,,,,38,,,,,,428,39,,,,39,38,,,300,39,,615,,16,,,', ',16,16,,,,,,300,,,,,,,,,39,,,,38,38,,,38,,,,,,38,,,,,,,,,,,,,,,,,,,', ',,,,,360,,,15,,15,,,38,,,303,938,,,38,38,,,303,655,16,332,,658,,16,', ',,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,655,,,332,547,,,,,38,,,,15,,,15,,,', ',,,,,16,38,702,,,,,38,,38,,,16,15,,,,,,,740,,432,,,,,,,,,,,,,,,,,,,', ',,,16,16,,39,16,39,,,,,16,300,,,,,,,,300,,,749,,,15,655,332,,,15,15', ',,,,,,,,,,303,16,,,,943,,,16,16,,303,,,,,,,,,793,,,,,,,,,,39,,,39,,', ',,,,,,802,,,,,,,,,,,,,39,,,,824,,16,,,15,,,,,15,,,,,,,,,16,15,,,,,16', ',16,,,547,,,,,,,,,,,,,,,,696,,,,,,,39,,851,,,39,39,,,357,,,,,,15,,300', ',,,,,,,,,15,300,,,,,,227,,,,,,,,,274,274,274,,,,,,,,,,,319,320,321,', '15,15,,,15,,,,,,15,,,274,274,,,,,,,39,,,,,39,,782,907,,,,,,357,39,,', ',,,,15,,,332,942,,,15,15,,,,,,,,,,,,,,,,,,,,,,,547,,547,,361,,,,696', ',39,827,,,,,,,,,,,39,,,,,,,15,,,,,,,,,,,,,,547,547,,15,,,,,,15,,15,39', '39,,,39,,,,,,39,,,,,,,,,,,,,,,,,,,,,,274,407,274,361,,426,431,,,,,39', ',,,939,,,39,39,,227,,,446,447,448,449,450,451,452,453,454,455,456,457', '458,459,460,461,462,463,464,465,466,467,468,469,470,471,696,,696,,,', '274,274,,,,,,,,274,,,,,,39,274,,274,,274,274,,,,,,,782,,782,,39,,,,', ',39,,39,,,,,,,,,,,,,,,,547,,,517,,,,,,,,950,696,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,696,,696,,,,,,,,,,,782,,,,,,,,274,,,,', ',,,,,,,,,,,,696,,,,,,,,,,,,,,,,,,,,,274,,426,640,407,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,274,,274,,274,,,,,,,,,,,,,,,274,,,,,,,,,674', '675,,,,,,,,,,274,,,274,,,,,,,,,,,,,,,,,,,,,,,,274,,,,,,,,,,,,,,,,,,', ',274,274,,,,,,,,,,274,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,274,751,,,274', '274,756,758,,,,761,763,,,640,765,,,,,,,,,,,,,,,,,,,,,,,,274,,,,,,,,', ',,,,,,,,,,,,,274,,,,,,,,,,,,,,,,,274,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,274,,853,,,,,,,,,,,,,,756,758,763,761,,856,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,274,', ',,,,,,,,,,,,,,,274,853,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,274' ] racc_goto_table = arr = ::Array.new(2972, 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 = [ '31,33,33,33,22,23,67,86,47,22,138,56,49,2,71,71,10,73,8,92,7,37,37,39', '22,7,31,36,57,57,27,61,61,22,22,22,27,22,22,22,89,89,15,15,18,64,64', '17,17,90,74,17,74,96,168,60,60,51,24,23,137,6,4,47,126,177,63,22,22', '50,37,22,22,22,22,166,166,166,20,64,64,64,173,5,54,47,11,38,38,38,116', '57,129,163,91,91,114,131,132,95,17,17,17,17,46,177,174,70,70,70,40,117', '45,121,121,22,154,11,40,40,22,22,22,22,22,22,4,21,152,55,55,7,21,129', '2,152,12,70,70,14,7,7,155,155,16,19,156,28,156,156,156,73,68,68,68,69', '69,30,42,69,21,62,66,95,44,44,44,72,84,85,88,93,94,97,9,98,99,100,101', '102,103,33,68,117,104,74,74,29,29,5,105,29,106,107,108,109,110,111,71', '177,112,113,118,131,132,124,130,133,174,134,22,22,22,22,127,135,22,22', '22,22,22,22,136,114,139,168,140,47,141,129,143,57,120,22,117,33,33,23', '21,116,29,29,29,29,33,51,92,21,21,144,37,37,169,51,145,146,147,137,150', '168,127,151,127,153,1,20,20,22,22,47,20,20,117,47,120,157,22,158,159', '173,160,126,161,8,162,167,40,31,47,24,163,170,49,22,47,71,171,22,,71', '23,22,22,,,,31,,64,7,54,,,,,24,37,11,22,,,,,17,17,64,37,22,22,,68,50', ',21,90,168,68,63,29,29,29,29,70,22,22,6,4,9,,,70,121,121,,166,166,21', '166,166,,166,,,22,46,,24,91,23,46,9,156,45,156,,24,36,45,23,22,96,,47', '95,37,39,,68,,31,39,121,37,73,,68,,,,44,4,,71,,,51,,44,71,,,,,33,57', ',21,61,89,74,21,8,,,,21,8,71,15,,,127,177,127,9,,,95,,9,,60,,,,22,120', ',29,120,21,120,31,120,95,,,137,137,127,57,71,18,29,29,,169,47,,169,', '169,,169,10,38,33,,,,49,38,,29,166,166,166,166,49,,163,163,47,71,73', ',,121,22,29,22,27,,71,,,22,,22,2,69,,,64,22,,7,,,,,64,22,,,,57,,,,,', ',,38,127,57,,,8,,,,166,33,,,,,,,41,,120,33,120,41,120,,120,,71,,70,', ',,22,,71,22,41,,169,,169,22,169,,169,41,41,41,89,41,92,22,,,,,,22,86', '57,,,,,120,57,,70,,,,89,,,,,,,,41,41,47,,41,169,31,21,,21,31,67,22,22', ',,,22,22,57,138,22,61,,47,,49,,29,,,,31,15,,22,24,49,,,22,22,71,8,,71', '60,31,41,95,95,31,22,41,41,41,41,41,41,64,56,,,22,,,20,20,95,95,64,20', '20,,,20,21,,,21,68,,,31,70,,,,,,9,17,31,9,,,,17,,,,21,,,,,,,,,,22,,', ',,22,22,,,,22,,,,,,,,,,22,67,,,,67,,,,57,,22,41,41,41,41,31,,41,41,41', '41,41,41,,,,21,,23,,,21,21,,41,,,,,,9,22,,,37,9,9,22,64,,,,,,,68,,,', '22,,,,,20,,,,41,41,17,,,,,122,,41,,,,52,,,,,52,,,,22,,22,22,41,,22,', '41,29,,,22,41,,29,,21,,,,,21,,52,52,52,122,,,122,,21,,,,,22,41,41,,', ',,64,22,9,,,22,,,22,22,41,41,64,,,52,52,52,52,,,,,,,,,,,31,41,,,,,,21', ',,,,,,,,,41,,21,,9,,,,,,95,,52,95,125,22,9,,95,,,52,52,,33,,,57,,,29', ',22,,,21,21,,22,21,22,71,,,,21,,,,9,9,,,9,,31,22,,,,,,125,,125,26,41', ',,,26,,,,57,,,,21,123,123,123,,,,21,21,,,,,,9,,,,,,26,9,9,,,,,,,52,', '122,,,122,,122,,122,,,41,,41,,,,,,,,41,52,,,26,,,,,21,,,,,41,,,,,,,', ',9,,,21,,,,,,21,,21,,,,,,9,,,,,,9,26,,,,,,,,,26,26,,41,,52,41,,,52,', ',41,52,52,,,,,,,,41,,,,,,41,,52,122,,122,,122,,122,,52,123,123,123,123', ',123,,,125,,125,,,,,,,,,,,,41,41,,,,41,41,,,41,,,125,,125,122,125,,', ',,,,41,26,,,,41,41,,26,25,,,,,25,,,,,,,,,,26,,,,123,123,123,123,,,,', ',,,,,,25,25,25,,,,,,,123,,,,,,,,,,,,,,125,,125,,125,,,,,,,41,25,25,25', ',41,41,,26,125,41,,26,,,,,26,,65,41,,,,,,,,,,,41,,,,125,,,,,,,26,,25', ',,,,52,,52,,25,25,,,52,,,,,53,,,52,,53,41,,,,,,,,,,,,41,,,,,,,,,,,,', ',,53,53,53,,,,,,,,,,,,,,41,,41,41,,,41,52,,,52,,41,,,,,,,53,53,53,53', ',,,,,25,,,,52,,,,,,,,,,,,,41,,,,,,25,41,41,,65,,,,,,65,53,,,,,,,,,53', '53,,,,,,,,,,,,,,,,,52,,,,,52,52,,,,,,,26,,26,41,52,,,,,25,,,,25,,52', ',25,25,,41,,,,,65,41,65,41,65,65,,,,25,,,,,,,,,25,41,,,,,,,,,,,53,,', ',,,,,,,,,,52,26,,,26,52,,,,,53,,,,,52,,,,,,,,,,,26,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,52,,,,,,52,,,,,,26,53,,,,53,52,,,53,53,,65,,26,,,,,26,26', ',,,,,53,,,,,,,,,53,,,,52,52,,,52,,,,,,52,,,,,,,,,,,,,,,,,,,,,,,,,52', ',,25,,25,,,52,,,25,52,,,52,52,,,25,65,26,65,,65,,26,,,,,,,,,,26,,,,', ',,,,,,,,,,,,,,,,,,65,,,65,115,,,,,52,,,,25,,,25,,,,,,,,,26,52,65,,,', ',52,,52,,,26,25,,,,,,,25,,65,,,,,,,,,,,,,,,,,,,,,,,26,26,,53,26,53,', ',,,26,53,,,,,,,,53,,,65,,,25,65,65,,,25,25,,,,,,,,,,,25,26,,,,26,,,26', '26,,25,,,,,,,,,65,,,,,,,,,,53,,,53,,,,,,,,,65,,,,,,,,,,,,,53,,,,65,', '26,,,25,,,,,25,,,,,,,,,26,25,,,,,26,,26,,,115,,,,,,,,,,,,,,,,115,,,', ',,,53,,65,,,53,53,,,25,,,,,,25,,53,,,,,,,,,,25,53,,,,,,32,,,,,,,,,32', '32,32,,,,,,,,,,,32,32,32,,25,25,,,25,,,,,,25,,,32,32,,,,,,,53,,,,,53', ',115,65,,,,,,25,53,,,,,,,25,,,65,25,,,25,25,,,,,,,,,,,,,,,,,,,,,,,115', ',115,,53,,,,115,,53,115,,,,,,,,,,,53,,,,,,,25,,,,,,,,,,,,,,115,115,', '25,,,,,,25,,25,53,53,,,53,,,,,,53,,,,,,,,,,,,,,,,,,,,,,32,32,32,53,', '32,32,,,,,53,,,,53,,,53,53,,32,,,32,32,32,32,32,32,32,32,32,32,32,32', '32,32,32,32,32,32,32,32,32,32,32,32,32,32,115,,115,,,,32,32,,,,,,,,32', ',,,,,53,32,,32,,32,32,,,,,,,115,,115,,53,,,,,,53,,53,,,,,,,,,,,,,,,', '115,,,32,,,,,,,,115,115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,115,,115,,,,,,,,,,,115,,,,,,,,32,,,,,,,,,,,,,,,,,115,,,,,,,,,', ',,,,,,,,,,,32,,32,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,32', ',32,,,,,,,,,,,,,,,32,,,,,,,,,32,32,,,,,,,,,,32,,,32,,,,,,,,,,,,,,,,', ',,,,,,,32,,,,,,,,,,,,,,,,,,,,32,32,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,32,32,,,32,32,32,32,,,,32,32,,,32,32,,,,,,,,,,,,,,,,,,,', ',,,,32,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,32,,,,,,,,,,,,,,32,32,32,32', ',32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',32,,,,,,,,,,,,,,,,,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,32' ] racc_goto_check = arr = ::Array.new(2972, 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, 264, 13, nil, 59, 78, 58, 20, -305, 141, -503, -591, -663, nil, -355, 34, 135, -16, -169, 77, 58, 127, 4, -204, -350, 1205, 991, -177, -60, 124, 35, -19, 1993, -28, nil, nil, 3, -189, 61, -239, -362, 551, -318, nil, 135, 79, 71, -209, nil, -22, 34, -257, 827, 1334, -270, 60, -60, 20, nil, nil, 47, 23, -237, 25, 11, 1231, 103, -53, 123, -172, 78, -12, -306, -260, -435, nil, nil, nil, nil, nil, nil, nil, nil, nil, 97, 109, -54, nil, 108, -297, -657, -473, -323, 103, -186, 96, -536, 102, 118, 118, -344, 120, 114, -529, 118, -522, -384, -716, -389, -534, -166, -175, -390, -648, -730, 1424, -458, -717, -441, nil, -411, -421, 178, 230, -438, 297, -579, -429, nil, -551, -662, -771, -770, -128, -474, 153, -309, -275, -12, -585, -584, -29, nil, -37, -19, -654, -423, -547, nil, nil, 181, 182, 46, 180, 32, -238, -231, 190, 191, 191, -315, -314, -301, -242, nil, nil, -462, -404, -635, -391, -394, -561, nil, -609, -756, nil, nil, -422 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 343, 290, nil, 519, nil, 831, nil, 287, 288, nil, nil, nil, 11, 12, 18, 226, 318, nil, nil, 224, 225, nil, nil, 17, nil, 438, 21, 22, 23, 24, nil, 671, nil, nil, nil, 307, nil, 25, 409, 32, nil, nil, 34, 37, 36, nil, 221, 222, 355, nil, 129, 417, 128, 131, 75, 76, nil, 90, 46, 280, nil, 800, 410, nil, 411, 422, 626, 484, 278, 264, 47, 48, 49, 50, 51, 52, 53, 54, 55, nil, 265, 61, nil, nil, nil, nil, nil, nil, nil, 564, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 698, 823, nil, 699, 920, 772, 535, nil, 536, nil, nil, 537, nil, 539, 642, nil, nil, nil, 545, nil, nil, nil, nil, nil, nil, nil, nil, nil, 421, nil, nil, nil, nil, nil, 74, 77, 78, nil, nil, nil, nil, nil, 598, nil, nil, nil, nil, nil, nil, 815, 733, 534, nil, 538, 549, 551, 552, 784, 555, 556, 785, 559, 562, 282 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 144, :_reduce_none, 2, 145, :_reduce_2, 0, 146, :_reduce_3, 1, 146, :_reduce_4, 3, 146, :_reduce_5, 2, 146, :_reduce_6, 1, 148, :_reduce_none, 4, 148, :_reduce_8, 4, 151, :_reduce_9, 2, 152, :_reduce_10, 0, 156, :_reduce_11, 1, 156, :_reduce_12, 3, 156, :_reduce_13, 2, 156, :_reduce_14, 1, 157, :_reduce_none, 4, 157, :_reduce_16, 0, 173, :_reduce_17, 4, 150, :_reduce_18, 3, 150, :_reduce_19, 3, 150, :_reduce_20, 3, 150, :_reduce_21, 2, 150, :_reduce_22, 3, 150, :_reduce_23, 3, 150, :_reduce_24, 3, 150, :_reduce_25, 3, 150, :_reduce_26, 3, 150, :_reduce_27, 4, 150, :_reduce_28, 1, 150, :_reduce_none, 3, 150, :_reduce_30, 3, 150, :_reduce_31, 6, 150, :_reduce_32, 5, 150, :_reduce_33, 5, 150, :_reduce_34, 5, 150, :_reduce_35, 5, 150, :_reduce_36, 3, 150, :_reduce_37, 3, 150, :_reduce_38, 3, 150, :_reduce_39, 1, 150, :_reduce_none, 3, 161, :_reduce_41, 3, 161, :_reduce_42, 1, 172, :_reduce_none, 3, 172, :_reduce_44, 3, 172, :_reduce_45, 3, 172, :_reduce_46, 2, 172, :_reduce_47, 1, 172, :_reduce_none, 1, 160, :_reduce_none, 1, 163, :_reduce_none, 1, 163, :_reduce_none, 1, 177, :_reduce_none, 4, 177, :_reduce_53, 0, 185, :_reduce_54, 5, 182, :_reduce_55, 1, 184, :_reduce_none, 2, 176, :_reduce_57, 3, 176, :_reduce_58, 4, 176, :_reduce_59, 5, 176, :_reduce_60, 4, 176, :_reduce_61, 5, 176, :_reduce_62, 2, 176, :_reduce_63, 2, 176, :_reduce_64, 2, 176, :_reduce_65, 2, 176, :_reduce_66, 2, 176, :_reduce_67, 1, 162, :_reduce_68, 3, 162, :_reduce_69, 1, 189, :_reduce_70, 3, 189, :_reduce_71, 1, 188, :_reduce_none, 2, 188, :_reduce_73, 3, 188, :_reduce_74, 5, 188, :_reduce_75, 2, 188, :_reduce_76, 4, 188, :_reduce_77, 2, 188, :_reduce_78, 4, 188, :_reduce_79, 1, 188, :_reduce_80, 3, 188, :_reduce_81, 1, 192, :_reduce_none, 3, 192, :_reduce_83, 2, 191, :_reduce_84, 3, 191, :_reduce_85, 1, 194, :_reduce_86, 3, 194, :_reduce_87, 1, 193, :_reduce_88, 1, 193, :_reduce_89, 4, 193, :_reduce_90, 3, 193, :_reduce_91, 3, 193, :_reduce_92, 3, 193, :_reduce_93, 3, 193, :_reduce_94, 2, 193, :_reduce_95, 1, 193, :_reduce_96, 1, 169, :_reduce_97, 1, 169, :_reduce_98, 4, 169, :_reduce_99, 3, 169, :_reduce_100, 3, 169, :_reduce_101, 3, 169, :_reduce_102, 3, 169, :_reduce_103, 2, 169, :_reduce_104, 1, 169, :_reduce_105, 1, 197, :_reduce_106, 1, 197, :_reduce_none, 2, 198, :_reduce_108, 1, 198, :_reduce_109, 3, 198, :_reduce_110, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 202, :_reduce_116, 1, 202, :_reduce_none, 1, 158, :_reduce_none, 1, 158, :_reduce_none, 1, 159, :_reduce_120, 0, 205, :_reduce_121, 4, 159, :_reduce_122, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_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_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_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_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_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_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_none, 3, 175, :_reduce_194, 5, 175, :_reduce_195, 3, 175, :_reduce_196, 5, 175, :_reduce_197, 6, 175, :_reduce_198, 5, 175, :_reduce_199, 5, 175, :_reduce_200, 5, 175, :_reduce_201, 5, 175, :_reduce_202, 4, 175, :_reduce_203, 3, 175, :_reduce_204, 3, 175, :_reduce_205, 3, 175, :_reduce_206, 3, 175, :_reduce_207, 3, 175, :_reduce_208, 3, 175, :_reduce_209, 3, 175, :_reduce_210, 3, 175, :_reduce_211, 3, 175, :_reduce_212, 4, 175, :_reduce_213, 2, 175, :_reduce_214, 2, 175, :_reduce_215, 3, 175, :_reduce_216, 3, 175, :_reduce_217, 3, 175, :_reduce_218, 3, 175, :_reduce_219, 3, 175, :_reduce_220, 3, 175, :_reduce_221, 3, 175, :_reduce_222, 3, 175, :_reduce_223, 3, 175, :_reduce_224, 3, 175, :_reduce_225, 3, 175, :_reduce_226, 3, 175, :_reduce_227, 3, 175, :_reduce_228, 2, 175, :_reduce_229, 2, 175, :_reduce_230, 3, 175, :_reduce_231, 3, 175, :_reduce_232, 3, 175, :_reduce_233, 3, 175, :_reduce_234, 3, 175, :_reduce_235, 6, 175, :_reduce_236, 1, 175, :_reduce_none, 1, 208, :_reduce_none, 1, 209, :_reduce_none, 2, 209, :_reduce_none, 4, 209, :_reduce_241, 2, 209, :_reduce_242, 3, 214, :_reduce_243, 0, 215, :_reduce_244, 1, 215, :_reduce_none, 0, 166, :_reduce_246, 1, 166, :_reduce_none, 2, 166, :_reduce_none, 4, 166, :_reduce_249, 2, 166, :_reduce_250, 1, 187, :_reduce_251, 2, 187, :_reduce_252, 2, 187, :_reduce_253, 4, 187, :_reduce_254, 1, 187, :_reduce_255, 0, 218, :_reduce_256, 2, 181, :_reduce_257, 2, 217, :_reduce_258, 2, 216, :_reduce_259, 0, 216, :_reduce_260, 1, 211, :_reduce_261, 2, 211, :_reduce_262, 3, 211, :_reduce_263, 4, 211, :_reduce_264, 1, 171, :_reduce_265, 1, 171, :_reduce_none, 3, 170, :_reduce_267, 4, 170, :_reduce_268, 2, 170, :_reduce_269, 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_280, 0, 241, :_reduce_281, 4, 207, :_reduce_282, 0, 242, :_reduce_283, 0, 243, :_reduce_284, 6, 207, :_reduce_285, 0, 244, :_reduce_286, 4, 207, :_reduce_287, 3, 207, :_reduce_288, 3, 207, :_reduce_289, 2, 207, :_reduce_290, 3, 207, :_reduce_291, 3, 207, :_reduce_292, 1, 207, :_reduce_293, 4, 207, :_reduce_294, 3, 207, :_reduce_295, 1, 207, :_reduce_296, 5, 207, :_reduce_297, 4, 207, :_reduce_298, 3, 207, :_reduce_299, 2, 207, :_reduce_300, 1, 207, :_reduce_none, 2, 207, :_reduce_302, 2, 207, :_reduce_303, 6, 207, :_reduce_304, 6, 207, :_reduce_305, 0, 245, :_reduce_306, 0, 246, :_reduce_307, 7, 207, :_reduce_308, 0, 247, :_reduce_309, 0, 248, :_reduce_310, 7, 207, :_reduce_311, 5, 207, :_reduce_312, 4, 207, :_reduce_313, 0, 249, :_reduce_314, 0, 250, :_reduce_315, 9, 207, :_reduce_316, 0, 251, :_reduce_317, 6, 207, :_reduce_318, 0, 252, :_reduce_319, 7, 207, :_reduce_320, 0, 253, :_reduce_321, 5, 207, :_reduce_322, 0, 254, :_reduce_323, 6, 207, :_reduce_324, 0, 255, :_reduce_325, 0, 256, :_reduce_326, 9, 207, :_reduce_327, 1, 207, :_reduce_328, 1, 207, :_reduce_329, 1, 207, :_reduce_330, 1, 207, :_reduce_331, 1, 165, :_reduce_none, 1, 232, :_reduce_none, 1, 232, :_reduce_none, 2, 232, :_reduce_335, 1, 234, :_reduce_none, 1, 234, :_reduce_none, 1, 233, :_reduce_none, 5, 233, :_reduce_339, 1, 154, :_reduce_none, 2, 154, :_reduce_341, 1, 236, :_reduce_none, 1, 236, :_reduce_none, 1, 257, :_reduce_344, 3, 257, :_reduce_345, 1, 260, :_reduce_346, 3, 260, :_reduce_347, 1, 259, :_reduce_none, 4, 259, :_reduce_349, 6, 259, :_reduce_350, 3, 259, :_reduce_351, 5, 259, :_reduce_352, 2, 259, :_reduce_353, 4, 259, :_reduce_354, 1, 259, :_reduce_355, 3, 259, :_reduce_356, 4, 261, :_reduce_357, 2, 261, :_reduce_358, 2, 261, :_reduce_359, 1, 261, :_reduce_360, 2, 266, :_reduce_361, 0, 266, :_reduce_362, 6, 267, :_reduce_363, 8, 267, :_reduce_364, 4, 267, :_reduce_365, 6, 267, :_reduce_366, 4, 267, :_reduce_367, 2, 267, :_reduce_none, 6, 267, :_reduce_369, 2, 267, :_reduce_370, 4, 267, :_reduce_371, 6, 267, :_reduce_372, 2, 267, :_reduce_373, 4, 267, :_reduce_374, 2, 267, :_reduce_375, 4, 267, :_reduce_376, 1, 267, :_reduce_none, 0, 183, :_reduce_378, 1, 183, :_reduce_379, 3, 271, :_reduce_380, 1, 271, :_reduce_381, 4, 271, :_reduce_382, 1, 272, :_reduce_383, 4, 272, :_reduce_384, 1, 273, :_reduce_385, 3, 273, :_reduce_386, 1, 274, :_reduce_387, 1, 274, :_reduce_none, 0, 278, :_reduce_389, 0, 279, :_reduce_390, 4, 231, :_reduce_391, 4, 276, :_reduce_392, 1, 276, :_reduce_393, 0, 282, :_reduce_394, 4, 277, :_reduce_395, 0, 283, :_reduce_396, 4, 277, :_reduce_397, 0, 284, :_reduce_398, 5, 281, :_reduce_399, 2, 178, :_reduce_400, 4, 178, :_reduce_401, 5, 178, :_reduce_402, 5, 178, :_reduce_403, 2, 230, :_reduce_404, 4, 230, :_reduce_405, 4, 230, :_reduce_406, 3, 230, :_reduce_407, 3, 230, :_reduce_408, 3, 230, :_reduce_409, 2, 230, :_reduce_410, 1, 230, :_reduce_411, 4, 230, :_reduce_412, 0, 286, :_reduce_413, 5, 229, :_reduce_414, 0, 287, :_reduce_415, 5, 229, :_reduce_416, 5, 235, :_reduce_417, 1, 288, :_reduce_418, 1, 288, :_reduce_none, 6, 153, :_reduce_420, 0, 153, :_reduce_421, 1, 289, :_reduce_422, 1, 289, :_reduce_none, 1, 289, :_reduce_none, 2, 290, :_reduce_425, 1, 290, :_reduce_none, 2, 155, :_reduce_427, 1, 155, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 1, 220, :_reduce_432, 1, 292, :_reduce_433, 2, 292, :_reduce_434, 3, 293, :_reduce_435, 1, 293, :_reduce_436, 1, 293, :_reduce_437, 3, 221, :_reduce_438, 4, 222, :_reduce_439, 3, 223, :_reduce_440, 0, 297, :_reduce_441, 3, 297, :_reduce_442, 1, 298, :_reduce_443, 2, 298, :_reduce_444, 3, 225, :_reduce_445, 0, 300, :_reduce_446, 3, 300, :_reduce_447, 3, 224, :_reduce_448, 3, 226, :_reduce_449, 0, 301, :_reduce_450, 3, 301, :_reduce_451, 0, 302, :_reduce_452, 3, 302, :_reduce_453, 0, 294, :_reduce_454, 2, 294, :_reduce_455, 0, 295, :_reduce_456, 2, 295, :_reduce_457, 0, 296, :_reduce_458, 2, 296, :_reduce_459, 1, 299, :_reduce_460, 2, 299, :_reduce_461, 0, 304, :_reduce_462, 4, 299, :_reduce_463, 1, 303, :_reduce_464, 1, 303, :_reduce_465, 1, 303, :_reduce_466, 1, 303, :_reduce_none, 1, 203, :_reduce_468, 3, 204, :_reduce_469, 1, 291, :_reduce_470, 2, 291, :_reduce_471, 1, 206, :_reduce_472, 1, 206, :_reduce_473, 1, 206, :_reduce_474, 1, 206, :_reduce_475, 1, 195, :_reduce_476, 1, 195, :_reduce_477, 1, 195, :_reduce_478, 1, 195, :_reduce_479, 1, 195, :_reduce_480, 1, 196, :_reduce_481, 1, 196, :_reduce_482, 1, 196, :_reduce_483, 1, 196, :_reduce_484, 1, 196, :_reduce_485, 1, 196, :_reduce_486, 1, 196, :_reduce_487, 1, 227, :_reduce_488, 1, 227, :_reduce_489, 1, 164, :_reduce_490, 1, 164, :_reduce_491, 1, 168, :_reduce_492, 1, 168, :_reduce_493, 1, 237, :_reduce_494, 0, 305, :_reduce_495, 4, 237, :_reduce_496, 2, 237, :_reduce_497, 3, 239, :_reduce_498, 0, 307, :_reduce_499, 3, 239, :_reduce_500, 4, 306, :_reduce_501, 2, 306, :_reduce_502, 2, 306, :_reduce_503, 1, 306, :_reduce_504, 2, 309, :_reduce_505, 0, 309, :_reduce_506, 6, 280, :_reduce_507, 8, 280, :_reduce_508, 4, 280, :_reduce_509, 6, 280, :_reduce_510, 4, 280, :_reduce_511, 6, 280, :_reduce_512, 2, 280, :_reduce_513, 4, 280, :_reduce_514, 6, 280, :_reduce_515, 2, 280, :_reduce_516, 4, 280, :_reduce_517, 2, 280, :_reduce_518, 4, 280, :_reduce_519, 1, 280, :_reduce_520, 0, 280, :_reduce_521, 1, 275, :_reduce_522, 1, 275, :_reduce_523, 1, 275, :_reduce_524, 1, 275, :_reduce_525, 1, 258, :_reduce_none, 1, 258, :_reduce_527, 1, 311, :_reduce_528, 3, 311, :_reduce_529, 1, 268, :_reduce_530, 3, 268, :_reduce_531, 1, 312, :_reduce_532, 2, 313, :_reduce_533, 1, 313, :_reduce_534, 2, 314, :_reduce_535, 1, 314, :_reduce_536, 1, 262, :_reduce_537, 3, 262, :_reduce_538, 1, 308, :_reduce_539, 3, 308, :_reduce_540, 1, 315, :_reduce_none, 1, 315, :_reduce_none, 2, 263, :_reduce_543, 1, 263, :_reduce_544, 3, 316, :_reduce_545, 3, 317, :_reduce_546, 1, 269, :_reduce_547, 3, 269, :_reduce_548, 1, 310, :_reduce_549, 3, 310, :_reduce_550, 1, 318, :_reduce_none, 1, 318, :_reduce_none, 2, 270, :_reduce_553, 1, 270, :_reduce_554, 1, 319, :_reduce_none, 1, 319, :_reduce_none, 2, 265, :_reduce_557, 2, 264, :_reduce_558, 0, 264, :_reduce_559, 1, 240, :_reduce_none, 3, 240, :_reduce_561, 0, 228, :_reduce_562, 2, 228, :_reduce_none, 1, 213, :_reduce_564, 3, 213, :_reduce_565, 3, 320, :_reduce_566, 2, 320, :_reduce_567, 2, 320, :_reduce_568, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 180, :_reduce_none, 1, 180, :_reduce_none, 1, 180, :_reduce_none, 1, 180, :_reduce_none, 1, 285, :_reduce_none, 1, 285, :_reduce_none, 1, 285, :_reduce_none, 1, 179, :_reduce_none, 1, 179, :_reduce_none, 0, 147, :_reduce_none, 1, 147, :_reduce_none, 0, 174, :_reduce_none, 1, 174, :_reduce_none, 2, 190, :_reduce_585, 2, 167, :_reduce_586, 0, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 238, :_reduce_590, 1, 238, :_reduce_none, 1, 149, :_reduce_none, 2, 149, :_reduce_none, 0, 210, :_reduce_594 ] racc_reduce_n = 595 racc_shift_n = 1019 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tDSTAR => 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, :tREGEXP_OPT => 119, :tWORDS_BEG => 120, :tQWORDS_BEG => 121, :tSYMBOLS_BEG => 122, :tQSYMBOLS_BEG => 123, :tSTRING_DBEG => 124, :tSTRING_DVAR => 125, :tSTRING_END => 126, :tSTRING_DEND => 127, :tSTRING => 128, :tSYMBOL => 129, :tNL => 130, :tEH => 131, :tCOLON => 132, :tCOMMA => 133, :tSPACE => 134, :tSEMI => 135, :tLAMBDA => 136, :tLAMBEG => 137, :tCHARACTER => 138, :tRATIONAL => 139, :tIMAGINARY => 140, :tEQL => 141, :tLOWEST => 142 } racc_nt_base = 143 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tDSTAR", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING_DEND", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tRATIONAL", "tIMAGINARY", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "stmt_or_begin", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "backref", "lhs", "mrhs", "mrhs_arg", "expr", "@1", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@2", "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", "@3", "simple_numeric", "primary", "arg_value", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@4", "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", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "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", "@21", "@22", "f_args", "do_block", "@23", "@24", "@25", "operation3", "@26", "@27", "cases", "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", "@28", "@29", "args_tail", "@30", "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", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_9(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_10(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_11(val, _values, result) result = [] result end def _reduce_12(val, _values, result) result = [ val[0] ] result end def _reduce_13(val, _values, result) result = val[0] << val[2] result end def _reduce_14(val, _values, result) result = [ val[1] ] result end # reduce 15 omitted def _reduce_16(val, _values, result) diagnostic :error, :begin_in_method, nil, val[0] result end def _reduce_17(val, _values, result) @lexer.state = :expr_fname result end def _reduce_18(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_19(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_20(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_21(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_22(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_23(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_25(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_26(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_27(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_28(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end # reduce 29 omitted def _reduce_30(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_31(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_32(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_33(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_34(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_35(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_36(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_37(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_38(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_39(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end # reduce 40 omitted def _reduce_41(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_42(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end # reduce 43 omitted def _reduce_44(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_45(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_46(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_47(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 48 omitted # reduce 49 omitted # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_54(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_55(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end # reduce 56 omitted def _reduce_57(val, _values, result) result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) result end def _reduce_58(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_59(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_60(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_61(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) result end def _reduce_62(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_63(val, _values, result) result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) result end def _reduce_64(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) result end def _reduce_65(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_66(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_67(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_68(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_69(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_70(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_71(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 72 omitted def _reduce_73(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_74(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_75(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_76(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_77(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_78(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_79(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_80(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_81(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 82 omitted def _reduce_83(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_84(val, _values, result) result = [ val[0] ] result end def _reduce_85(val, _values, result) result = val[0] << val[1] result end def _reduce_86(val, _values, result) result = [ val[0] ] result end def _reduce_87(val, _values, result) result = val[0] << val[2] result end def _reduce_88(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_89(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_90(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_91(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_92(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_93(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_94(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_95(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_96(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_97(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_98(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_99(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_100(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_101(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_102(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_103(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_104(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_105(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_106(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 107 omitted def _reduce_108(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_109(val, _values, result) result = @builder.const(val[0]) result end def _reduce_110(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 111 omitted # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted # reduce 115 omitted def _reduce_116(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 117 omitted # reduce 118 omitted # reduce 119 omitted def _reduce_120(val, _values, result) result = [ val[0] ] result end def _reduce_121(val, _values, result) @lexer.state = :expr_fname result end def _reduce_122(val, _values, result) result = val[0] << val[3] result end # 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 # 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 def _reduce_194(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_195(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) result end def _reduce_196(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_197(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) result end def _reduce_198(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_199(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_200(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_201(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_202(val, _values, result) const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) result end def _reduce_203(val, _values, result) const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) result end def _reduce_204(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_205(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_207(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_208(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_209(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_210(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_211(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) result end def _reduce_214(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_215(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_218(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_224(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_225(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_229(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_230(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_231(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_232(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_233(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_234(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_235(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_236(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 237 omitted # reduce 238 omitted # reduce 239 omitted # reduce 240 omitted def _reduce_241(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_242(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_243(val, _values, result) result = val result end def _reduce_244(val, _values, result) result = [ nil, [], nil ] result end # reduce 245 omitted def _reduce_246(val, _values, result) result = [] result end # reduce 247 omitted # reduce 248 omitted def _reduce_249(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_250(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_251(val, _values, result) result = [ val[0] ] result end def _reduce_252(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_253(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_254(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_255(val, _values, result) result = [ val[0] ] result end def _reduce_256(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) result end def _reduce_257(val, _values, result) @lexer.cmdarg = val[0] result = val[1] result end def _reduce_258(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_259(val, _values, result) result = [ val[1] ] result end def _reduce_260(val, _values, result) result = [] result end def _reduce_261(val, _values, result) result = [ val[0] ] result end def _reduce_262(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_263(val, _values, result) result = val[0] << val[2] result end def _reduce_264(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_265(val, _values, result) result = @builder.array(nil, val[0], nil) result end # reduce 266 omitted def _reduce_267(val, _values, result) result = val[0] << val[2] result end def _reduce_268(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_269(val, _values, result) result = [ @builder.splat(val[0], 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 # reduce 278 omitted # reduce 279 omitted def _reduce_280(val, _values, result) result = @builder.call_method(nil, nil, val[0]) result end def _reduce_281(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_282(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin_keyword(val[0], val[2], val[3]) result end def _reduce_283(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_284(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_285(val, _values, result) @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) result end def _reduce_286(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_287(val, _values, result) result = @builder.begin(val[0], nil, val[3]) result end def _reduce_288(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_289(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_290(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_291(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_292(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_293(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_294(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_295(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_296(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_297(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_298(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_299(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_300(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 301 omitted def _reduce_302(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_303(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_304(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_305(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) 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 = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_309(val, _values, result) @lexer.cond.push(true) result end def _reduce_310(val, _values, result) @lexer.cond.pop result end def _reduce_311(val, _values, result) result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_312(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_313(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) result end def _reduce_314(val, _values, result) @lexer.cond.push(true) result end def _reduce_315(val, _values, result) @lexer.cond.pop result end def _reduce_316(val, _values, result) result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_317(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:class) result end def _reduce_318(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_319(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) result end def _reduce_320(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_321(val, _values, result) @static_env.extend_static @lexer.push_cmdarg result end def _reduce_322(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend result end def _reduce_323(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:def) result end def _reduce_324(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_325(val, _values, result) @lexer.state = :expr_fname result end def _reduce_326(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) result end def _reduce_327(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_328(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_329(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_330(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_331(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 332 omitted # reduce 333 omitted # reduce 334 omitted def _reduce_335(val, _values, result) result = val[1] result end # reduce 336 omitted # reduce 337 omitted # reduce 338 omitted def _reduce_339(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 340 omitted def _reduce_341(val, _values, result) result = val result end # reduce 342 omitted # reduce 343 omitted def _reduce_344(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_345(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_346(val, _values, result) result = [ val[0] ] result end def _reduce_347(val, _values, result) result = val[0] << val[2] result end # reduce 348 omitted def _reduce_349(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])) result end def _reduce_350(val, _values, result) result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) result end def _reduce_351(val, _values, result) result = val[0]. push(@builder.restarg(val[2])) result end def _reduce_352(val, _values, result) result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) result end def _reduce_353(val, _values, result) result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_354(val, _values, result) result = [ @builder.restarg(val[0], val[1]), *val[3] ] result end def _reduce_355(val, _values, result) result = [ @builder.restarg(val[0]) ] result end def _reduce_356(val, _values, result) result = [ @builder.restarg(val[0]), *val[2] ] result end def _reduce_357(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_358(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_359(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_360(val, _values, result) result = [ val[0] ] result end def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = [] result end def _reduce_363(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_364(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_365(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_366(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_367(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 368 omitted def _reduce_369(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_370(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_371(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_372(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_373(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_374(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_375(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_376(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 377 omitted def _reduce_378(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_379(val, _values, result) @lexer.state = :expr_value result end def _reduce_380(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_381(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_382(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_383(val, _values, result) result = [] result end def _reduce_384(val, _values, result) result = val[2] result end def _reduce_385(val, _values, result) result = [ val[0] ] result end def _reduce_386(val, _values, result) result = val[0] << val[2] result end def _reduce_387(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 388 omitted def _reduce_389(val, _values, result) @static_env.extend_dynamic result end def _reduce_390(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.clear result end def _reduce_391(val, _values, result) @lexer.cmdarg = val[2] @lexer.cmdarg.lexpop result = [ val[1], val[3] ] @static_env.unextend result end def _reduce_392(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_393(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_394(val, _values, result) @context.push(:lambda) result end def _reduce_395(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_396(val, _values, result) @context.push(:lambda) result end def _reduce_397(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_398(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_399(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_400(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_401(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_402(val, _values, result) lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_403(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_404(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_405(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_406(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_407(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_408(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_409(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_410(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_411(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_412(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_413(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_414(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_415(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_416(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_417(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_418(val, _values, result) result = [ val[0] ] result end # reduce 419 omitted def _reduce_420(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_421(val, _values, result) result = [] result end def _reduce_422(val, _values, result) result = [ val[0] ] result end # reduce 423 omitted # reduce 424 omitted def _reduce_425(val, _values, result) result = [ val[0], val[1] ] result end # reduce 426 omitted def _reduce_427(val, _values, result) result = [ val[0], val[1] ] result end # reduce 428 omitted # reduce 429 omitted # reduce 430 omitted # reduce 431 omitted def _reduce_432(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_433(val, _values, result) result = [ val[0] ] result end def _reduce_434(val, _values, result) result = val[0] << val[1] result end def _reduce_435(val, _values, result) result = @builder.string_compose(val[0], val[1], val[2]) result end def _reduce_436(val, _values, result) result = @builder.string(val[0]) result end def _reduce_437(val, _values, result) result = @builder.character(val[0]) result end def _reduce_438(val, _values, result) result = @builder.xstring_compose(val[0], val[1], val[2]) result end def _reduce_439(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_440(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_441(val, _values, result) result = [] result end def _reduce_442(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_443(val, _values, result) result = [ val[0] ] result end def _reduce_444(val, _values, result) result = val[0] << val[1] result end def _reduce_445(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_446(val, _values, result) result = [] result end def _reduce_447(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_448(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_449(val, _values, result) result = @builder.symbols_compose(val[0], val[1], val[2]) result end def _reduce_450(val, _values, result) result = [] result end def _reduce_451(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_452(val, _values, result) result = [] result end def _reduce_453(val, _values, result) result = val[0] << @builder.symbol_internal(val[1]) result end def _reduce_454(val, _values, result) result = [] result end def _reduce_455(val, _values, result) result = val[0] << val[1] result end def _reduce_456(val, _values, result) result = [] result end def _reduce_457(val, _values, result) result = val[0] << val[1] result end def _reduce_458(val, _values, result) result = [] result end def _reduce_459(val, _values, result) result = val[0] << val[1] result end def _reduce_460(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_461(val, _values, result) result = val[1] result end def _reduce_462(val, _values, result) @lexer.cond.push(false) @lexer.cmdarg.push(false) result end def _reduce_463(val, _values, result) @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_464(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_465(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_466(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 467 omitted def _reduce_468(val, _values, result) result = @builder.symbol(val[0]) result end def _reduce_469(val, _values, result) result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_470(val, _values, result) result = val[0] result end def _reduce_471(val, _values, result) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end result end def _reduce_472(val, _values, result) result = @builder.integer(val[0]) result end def _reduce_473(val, _values, result) result = @builder.float(val[0]) result end def _reduce_474(val, _values, result) result = @builder.rational(val[0]) result end def _reduce_475(val, _values, result) result = @builder.complex(val[0]) result end def _reduce_476(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_477(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_478(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_479(val, _values, result) result = @builder.const(val[0]) result end def _reduce_480(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_481(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_482(val, _values, result) result = @builder.self(val[0]) result end def _reduce_483(val, _values, result) result = @builder.true(val[0]) result end def _reduce_484(val, _values, result) result = @builder.false(val[0]) result end def _reduce_485(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_486(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_487(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_488(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_489(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_490(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_491(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_492(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_493(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_494(val, _values, result) result = nil result end def _reduce_495(val, _values, result) @lexer.state = :expr_value result end def _reduce_496(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_497(val, _values, result) yyerrok result = nil result end def _reduce_498(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_499(val, _values, result) result = @lexer.in_kwarg @lexer.in_kwarg = true result end def _reduce_500(val, _values, result) @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) result end def _reduce_501(val, _values, result) result = val[0].concat(val[2]).concat(val[3]) result end def _reduce_502(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_503(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_504(val, _values, result) result = [ val[0] ] result end def _reduce_505(val, _values, result) result = val[1] result end def _reduce_506(val, _values, result) result = [] result end def _reduce_507(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_508(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_509(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_510(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_511(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_512(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_513(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_514(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_515(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_516(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_517(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_518(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_519(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_520(val, _values, result) result = val[0] result end def _reduce_521(val, _values, result) result = [] result end def _reduce_522(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_523(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_524(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_525(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 526 omitted def _reduce_527(val, _values, result) @static_env.declare val[0][0] result = val[0] result end def _reduce_528(val, _values, result) result = @builder.arg(val[0]) result end def _reduce_529(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_530(val, _values, result) result = [ val[0] ] result end def _reduce_531(val, _values, result) result = val[0] << val[2] result end def _reduce_532(val, _values, result) check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] result end def _reduce_533(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_534(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_535(val, _values, result) result = @builder.kwoptarg(val[0], val[1]) result end def _reduce_536(val, _values, result) result = @builder.kwarg(val[0]) result end def _reduce_537(val, _values, result) result = [ val[0] ] result end def _reduce_538(val, _values, result) result = val[0] << val[2] result end def _reduce_539(val, _values, result) result = [ val[0] ] result end def _reduce_540(val, _values, result) result = val[0] << val[2] result end # reduce 541 omitted # reduce 542 omitted def _reduce_543(val, _values, result) @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] result end def _reduce_544(val, _values, result) result = [ @builder.kwrestarg(val[0]) ] result end def _reduce_545(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_546(val, _values, result) result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_547(val, _values, result) result = [ val[0] ] result end def _reduce_548(val, _values, result) result = val[0] << val[2] result end def _reduce_549(val, _values, result) result = [ val[0] ] result end def _reduce_550(val, _values, result) result = val[0] << val[2] result end # reduce 551 omitted # reduce 552 omitted def _reduce_553(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_554(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 555 omitted # reduce 556 omitted def _reduce_557(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_558(val, _values, result) result = [ val[1] ] result end def _reduce_559(val, _values, result) result = [] result end # reduce 560 omitted def _reduce_561(val, _values, result) result = val[1] result end def _reduce_562(val, _values, result) result = [] result end # reduce 563 omitted def _reduce_564(val, _values, result) result = [ val[0] ] result end def _reduce_565(val, _values, result) result = val[0] << val[2] result end def _reduce_566(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_567(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end def _reduce_568(val, _values, result) result = @builder.kwsplat(val[0], val[1]) result end # reduce 569 omitted # reduce 570 omitted # reduce 571 omitted # reduce 572 omitted # reduce 573 omitted # reduce 574 omitted # reduce 575 omitted # reduce 576 omitted # reduce 577 omitted # reduce 578 omitted # reduce 579 omitted # reduce 580 omitted # reduce 581 omitted # reduce 582 omitted # reduce 583 omitted # reduce 584 omitted def _reduce_585(val, _values, result) result = val[1] result end def _reduce_586(val, _values, result) result = val[1] result end # reduce 587 omitted # reduce 588 omitted # reduce 589 omitted def _reduce_590(val, _values, result) yyerrok result end # reduce 591 omitted # reduce 592 omitted # reduce 593 omitted def _reduce_594(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby21 end # module Parser parser-2.7.0.2/lib/parser/rubymotion.y0000644000004100000410000023122313617025313017653 0ustar www-datawww-dataclass Parser::RubyMotion 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 tUPLUS tUMINUS tUNARY_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 tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER tANDDOT prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: compstmt bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt { result = [ val[0] ] } | stmts terms stmt { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klBEGIN tLCURLY compstmt tRCURLY { if @context.indirectly_in_def? diagnostic :error, :begin_in_method, nil, val[0] end result = @builder.preexe(val[0], val[1], val[2], val[3]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | lhs tEQL command_call { result = @builder.assign(val[0], val[1], val[2]) } | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_call { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_call { @builder.op_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL arg_value { result = @builder.multi_assign(val[0], val[1], val[2]) } | mlhs tEQL mrhs { result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | expr expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } block_command: block_call | block_call call_op operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], *val[3]) } | block_call tCOLON2 operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], *val[3]) } cmd_brace_block: tLBRACE_ARG { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } command: operation command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], *val[1]) } | operation command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], *val[1]) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value call_op operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], *val[3]) } | primary_value call_op operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], *val[3]) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], *val[3]) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], *val[3]) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], *val[1]) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], *val[1]) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) } | var_lhs tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] } | tCOLON3 tCONSTANT tOP_ASGN arg { diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] } | backref tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM tINTEGER tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) } | tUNARY_NUM tFLOAT tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | args tCOMMA assocs tCOMMA args opt_block_arg { val[2][-1] = @builder.objc_varargs(val[2][-1], val[4]) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[5]) } | block_arg { result = [ val[0] ] } call_args2: arg_value tCOMMA args opt_block_arg { result = [ val[0], *val[2].concat(val[3]) ] } | arg_value tCOMMA block_arg { result = [ val[0], val[2] ] } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil), *val[1] ] } | arg_value tCOMMA assocs opt_block_arg { result = [ val[0], @builder.associate(nil, val[2], nil), *val[3] ] } | arg_value tCOMMA args tCOMMA assocs opt_block_arg { result = [ val[0], *val[2]. push(@builder.associate(nil, val[4], nil)). concat(val[5]) ] } | block_arg { result = [ val[0] ] } command_args: { result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) } open_args { @lexer.cmdarg = val[0] result = val[1] } open_args: call_args { result = [ nil, val[0], nil ] } | tLPAREN_ARG { @lexer.state = :expr_endarg } rparen { result = [ val[0], [], val[2] ] } | tLPAREN_ARG call_args2 { @lexer.state = :expr_endarg } rparen { result = [ val[0], val[1], val[3] ] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | tCOMMA { result = [] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN bodystmt kEND { result = @builder.begin_keyword(val[0], val[1], val[2]) } | tLPAREN_ARG expr { @lexer.state = :expr_endarg } rparen { result = @builder.begin(val[0], val[1], val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | operation brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.push_cmdarg @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.push_cmdarg } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { result = val[0]. push(@builder.objc_restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { result = val[0]. push(@builder.objc_restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.objc_restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.objc_restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { result = [ @builder.objc_restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { result = [ @builder.objc_restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.objc_restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.objc_restarg(val[0]), *val[2] ] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_f_block_arg { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_arg { result = [ val[0] ] } opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: # nothing { result = [] } | tSEMI bv_decls { result = val[1] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist lambda_body { result = [ val[1], val[2] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args opt_bv_decl { result = @builder.args(nil, val[0].concat(val[1]), nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call call_op operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call tCOLON2 operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } method_call: operation paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value call_op operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value call_op paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } | kDO { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = @builder.string_compose(val[0], val[1], val[2]) } | tSTRING { result = @builder.string(val[0]) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = @builder.xstring_compose(val[0], val[1], val[2]) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cond.push(false) @lexer.cmdarg.push(false) } compstmt tRCURLY { @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: tINTEGER { result = @builder.integer(val[0]) } | tFLOAT { result = @builder.float(val[0]) } | tUNARY_NUM tINTEGER =tLOWEST { num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } | tUNARY_NUM tFLOAT =tLOWEST { num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: variable { result = @builder.accessible(val[0]) } var_lhs: variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: term { result = nil } | tLT expr_value term { result = [ val[0], val[1] ] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | f_args term { result = @builder.args(nil, val[0], nil) } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_arg { result = [ val[0] ] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] result = @builder.arg(val[0]) } | tIDENTIFIER tASSOC tIDENTIFIER { @static_env.declare val[2][0] result = @builder.objc_kwarg(val[0], val[1], val[2]) } | tLABEL tIDENTIFIER { @static_env.declare val[1][0] result = @builder.objc_kwarg(val[0], nil, val[1]) } f_arg_item: f_norm_arg | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_opt: tIDENTIFIER tEQL arg_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: tIDENTIFIER tEQL primary_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | # nothing { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: call_op | tCOLON2 call_op: tDOT { result = [:dot, val[0][1]] } | tANDDOT { result = [:anddot, val[0][1]] } opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 19 # closest released match: v1_9_0_2 end def default_encoding Encoding::BINARY end parser-2.7.0.2/lib/parser/ruby26.y0000644000004100000410000025023713617025313016603 0ustar www-datawww-dataclass Parser::Ruby26 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 tUPLUS tUMINUS tUNARY_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 tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER tRATIONAL tIMAGINARY tLABEL_END tANDDOT prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN begin_block { result = @builder.preexe(val[0], *val[1]) } begin_block: tLCURLY top_compstmt tRCURLY { result = val } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :error, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt_or_begin { result = [ val[0] ] } | stmts terms stmt_or_begin { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt_or_begin: stmt | klBEGIN begin_block { diagnostic :error, :begin_in_method, nil, val[0] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL mrhs_arg { result = @builder.multi_assign(val[0], val[1], val[2]) } | expr command_asgn: lhs tEQL command_rhs { result = @builder.assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_rhs { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_rhs { @builder.op_assign(val[0], val[1], val[2]) } command_rhs: command_call =tOP_ASGN | command_call kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | command_asgn expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr expr_value_do: { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop result = [ val[1], val[2] ] } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @context.push(:block) } brace_body tRCURLY { result = [ val[0], *val[2], val[3] ] @context.pop } fcall: operation command: fcall command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | fcall command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value call_op operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value call_op operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | k_return call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value call_op tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value call_op tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 | tDSTAR | 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_rhs { result = @builder.assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value call_op tCONSTANT tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | tCOLON3 tCONSTANT tOP_ASGN arg_rhs { const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) } | backref tOP_ASGN arg_rhs { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tDOT2 { result = @builder.range_inclusive(val[0], val[1], nil) } | arg tDOT3 { result = @builder.range_exclusive(val[0], val[1], nil) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM simple_numeric tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | rel_expr =tCMP | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary relop: tGT | tLT | tGEQ | tLEQ rel_expr: arg relop arg =tGT { result = @builder.binary_op(val[0], val[1], val[2]) } | rel_expr relop arg =tGT { result = @builder.binary_op(val[0], val[1], val[2]) } arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } arg_rhs: arg =tOP_ASGN | arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { # When branch gets invoked by RACC's lookahead # and command args start with '[' or '(' # we need to put `true` to the cmdarg stack # **before** `false` pushed by lexer # m [], n # ^ # Right here we have cmdarg [...0] because # lexer pushed it on '[' # We need to modify cmdarg stack to [...10] # # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack # and later lexer pushes corresponding bits on top of it. last_token = @last_token[0] lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.push(true) @lexer.cmdarg.push(top) else @lexer.cmdarg.push(true) end } call_args { # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) # but the push must be done after cmdarg.pop() in the parser. # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, # cmdarg.pop() to pop 1 pushed by command_args, # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. last_token = @last_token[0] lookahead = last_token == :tLBRACE_ARG if lookahead top = @lexer.cmdarg.pop @lexer.cmdarg.pop @lexer.cmdarg.push(top) else @lexer.cmdarg.pop end result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs_arg: mrhs { result = @builder.array(nil, val[0], nil) } | arg_value mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN { @lexer.cmdarg.push(false) } bodystmt kEND { @lexer.cmdarg.pop result = @builder.begin_keyword(val[0], val[2], val[3]) } | tLPAREN_ARG stmt { @lexer.state = :expr_endarg } rparen { result = @builder.begin(val[0], val[1], val[3]) } | tLPAREN_ARG { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], nil, val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | k_return { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | fcall brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE expr_value_do compstmt kEND { result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) } | kUNTIL expr_value_do compstmt kEND { result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN expr_value_do compstmt kEND { result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.cmdarg.push(false) } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.cmdarg.pop @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.cmdarg.push(false) @lexer.cond.push(false) @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.cmdarg.pop @lexer.cond.pop @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary k_return: kRETURN { if @context.in_class? diagnostic :error, :invalid_return, nil, val[0] end } then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { result = val[0]. push(@builder.restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { result = [ @builder.restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { result = [ @builder.restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.restarg(val[0]), *val[2] ] } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_block_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_block_args_tail: tCOMMA block_args_tail { result = val[1] } | # nothing { result = [] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_block_args_tail { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | block_args_tail opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: opt_nl { result = [] } | opt_nl tSEMI bv_decls opt_nl { result = val[2] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist { @lexer.cmdarg.push(false) } lambda_body { @lexer.cmdarg.pop result = [ val[1], val[3] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } bodystmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @context.push(:block) } do_body kEND { result = [ val[0], *val[2], val[3] ] @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call dot_or_colon operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call dot_or_colon operation2 opt_paren_args brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | block_call dot_or_colon operation2 command_args do_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } method_call: fcall paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value call_op operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value call_op paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @context.push(:block) } brace_body tRCURLY { result = [ val[0], *val[2], val[3] ] @context.pop } | kDO { @context.push(:block) } do_body kEND { result = [ val[0], *val[2], val[3] ] @context.pop } brace_body: { @static_env.extend_dynamic } opt_block_param compstmt { result = [ val[1], val[2] ] @static_env.unextend } do_body: { @static_env.extend_dynamic } { @lexer.cmdarg.push(false) } opt_block_param bodystmt { result = [ val[2], val[3] ] @static_env.unextend @lexer.cmdarg.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { string = @builder.string_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tSTRING { string = @builder.string(val[0]) result = @builder.dedent_string(string, @lexer.dedent_level) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { string = @builder.xstring_compose(val[0], val[1], val[2]) result = @builder.dedent_string(string, @lexer.dedent_level) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } symbols: tSYMBOLS_BEG symbol_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } symbol_list: # nothing { result = [] } | symbol_list word tSPACE { result = val[0] << @builder.word(val[1]) } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } qsym_list: # nothing { result = [] } | qsym_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.symbol_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cmdarg.push(false) @lexer.cond.push(false) } compstmt tSTRING_DEND { @lexer.cmdarg.pop @lexer.cond.pop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { @lexer.state = :expr_end result = @builder.symbol(val[0]) } dsym: tSYMBEG string_contents tSTRING_END { @lexer.state = :expr_end result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: simple_numeric { result = val[0] } | tUNARY_NUM simple_numeric =tLOWEST { if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end } simple_numeric: tINTEGER { @lexer.state = :expr_end result = @builder.integer(val[0]) } | tFLOAT { @lexer.state = :expr_end result = @builder.float(val[0]) } | tRATIONAL { @lexer.state = :expr_end result = @builder.rational(val[0]) } | tIMAGINARY { @lexer.state = :expr_end result = @builder.complex(val[0]) } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: tLT { @lexer.state = :expr_value } expr_value term { result = [ val[0], val[2] ] } | # nothing { result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | { result = @lexer.in_kwarg @lexer.in_kwarg = true } f_args term { @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_args_tail: tCOMMA args_tail { result = val[1] } | # nothing { result = [] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | args_tail { result = val[0] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] result = val[0] } f_arg_asgn: f_norm_arg { result = val[0] } f_arg_item: f_arg_asgn { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_label: tLABEL { check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] } f_kw: f_label arg_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kw: f_label primary_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kwarg: f_block_kw { result = [ val[0] ] } | f_block_kwarg tCOMMA f_block_kw { result = val[0] << val[2] } f_kwarg: f_kw { result = [ val[0] ] } | f_kwarg tCOMMA f_kw { result = val[0] << val[2] } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.kwrestarg(val[0]) ] } f_opt: f_arg_asgn tEQL arg_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: f_arg_asgn tEQL primary_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } | tSTRING_BEG string_contents tLABEL_END arg_value { result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) } | tDSTAR arg_value { result = @builder.kwsplat(val[0], val[1]) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: call_op | tCOLON2 call_op: tDOT { result = [:dot, val[0][1]] } | tANDDOT { result = [:anddot, val[0][1]] } opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 26 end def default_encoding Encoding::UTF_8 end parser-2.7.0.2/lib/parser/lexer/0000755000004100000410000000000013617025313016366 5ustar www-datawww-dataparser-2.7.0.2/lib/parser/lexer/stack_state.rb0000644000004100000410000000122513617025313021220 0ustar www-datawww-data# frozen_string_literal: true module Parser class Lexer::StackState def initialize(name) @name = name.freeze clear end def clear @stack = 0 end def push(bit) bit_value = bit ? 1 : 0 @stack = (@stack << 1) | bit_value bit end def pop bit_value = @stack & 1 @stack >>= 1 bit_value == 1 end def lexpop @stack = ((@stack >> 1) | (@stack & 1)) @stack[0] == 1 end def active? @stack[0] == 1 end def empty? @stack == 0 end def to_s "[#{@stack.to_s(2)} <= #{@name}]" end alias inspect to_s end end parser-2.7.0.2/lib/parser/lexer/literal.rb0000644000004100000410000001464413617025313020360 0ustar www-datawww-data# encoding: binary # frozen_string_literal: true module Parser class Lexer::Literal DELIMITERS = { '(' => ')', '[' => ']', '{' => '}', '<' => '>' } TYPES = { # type start token interpolate? "'" => [ :tSTRING_BEG, false ], "<<'" => [ :tSTRING_BEG, false ], '%q' => [ :tSTRING_BEG, false ], '"' => [ :tSTRING_BEG, true ], '<<"' => [ :tSTRING_BEG, true ], '%' => [ :tSTRING_BEG, true ], '%Q' => [ :tSTRING_BEG, true ], '%w' => [ :tQWORDS_BEG, false ], '%W' => [ :tWORDS_BEG, true ], '%i' => [ :tQSYMBOLS_BEG, false ], '%I' => [ :tSYMBOLS_BEG, true ], ":'" => [ :tSYMBEG, false ], '%s' => [ :tSYMBEG, false ], ':"' => [ :tSYMBEG, true ], '/' => [ :tREGEXP_BEG, true ], '%r' => [ :tREGEXP_BEG, true ], '%x' => [ :tXSTRING_BEG, true ], '`' => [ :tXSTRING_BEG, true ], '<<`' => [ :tXSTRING_BEG, true ], } attr_reader :heredoc_e, :str_s, :dedent_level attr_accessor :saved_herebody_s def initialize(lexer, str_type, delimiter, str_s, heredoc_e = nil, indent = false, dedent_body = false, label_allowed = false) @lexer = lexer @nesting = 1 # DELIMITERS and TYPES are hashes with keys encoded in binary. # Coerce incoming data to the same encoding. str_type = coerce_encoding(str_type) delimiter = coerce_encoding(delimiter) unless TYPES.include?(str_type) lexer.send(:diagnostic, :error, :unexpected_percent_str, { :type => str_type }, @lexer.send(:range, str_s, str_s + 2)) end # String type. For :'foo', it is :' @str_type = str_type # Start of the string type specifier. @str_s = str_s @start_tok, @interpolate = TYPES[str_type] @start_delim = DELIMITERS.include?(delimiter) ? delimiter : nil @end_delim = DELIMITERS.fetch(delimiter, delimiter) @heredoc_e = heredoc_e @indent = indent @label_allowed = label_allowed @dedent_body = dedent_body @dedent_level = nil @interp_braces = 0 @space_emitted = true # Monolithic strings are glued into a single token, e.g. # tSTRING_BEG tSTRING_CONTENT tSTRING_END -> tSTRING. @monolithic = (@start_tok == :tSTRING_BEG && %w(' ").include?(str_type) && !heredoc?) # Capture opening delimiter in percent-literals. @str_type += delimiter if @str_type.start_with?('%'.freeze) clear_buffer emit_start_tok unless @monolithic end def interpolate? @interpolate end def words? type == :tWORDS_BEG || type == :tQWORDS_BEG || type == :tSYMBOLS_BEG || type == :tQSYMBOLS_BEG end def regexp? type == :tREGEXP_BEG end def heredoc? !!@heredoc_e end def plain_heredoc? heredoc? && !@dedent_body end def squiggly_heredoc? heredoc? && @dedent_body end def backslash_delimited? @end_delim == '\\'.freeze end def type @start_tok end def munge_escape?(character) character = coerce_encoding(character) if words? && character =~ /[ \t\v\r\f\n]/ true else ['\\'.freeze, @start_delim, @end_delim].include?(character) end end def nest_and_try_closing(delimiter, ts, te, lookahead=nil) delimiter = coerce_encoding(delimiter) if @start_delim && @start_delim == delimiter @nesting += 1 elsif delimiter?(delimiter) @nesting -= 1 end # Finalize if last matching delimiter is closed. if @nesting == 0 if words? extend_space(ts, ts) end if lookahead && @label_allowed && lookahead[0] == ?: && lookahead[1] != ?: && @start_tok == :tSTRING_BEG # This is a quoted label. flush_string emit(:tLABEL_END, @end_delim, ts, te + 1) elsif @monolithic # Emit the string as a single token. emit(:tSTRING, @buffer, @str_s, te) else # If this is a heredoc, @buffer contains the sentinel now. # Just throw it out. Lexer flushes the heredoc after each # non-heredoc-terminating \n anyway, so no data will be lost. flush_string unless heredoc? emit(:tSTRING_END, @end_delim, ts, te) end end end def infer_indent_level(line) return if !@dedent_body indent_level = 0 line.each_char do |char| case char when ?\s indent_level += 1 when ?\t indent_level += (8 - indent_level % 8) else if @dedent_level.nil? || @dedent_level > indent_level @dedent_level = indent_level end break end end end def start_interp_brace @interp_braces += 1 end def end_interp_brace_and_try_closing @interp_braces -= 1 (@interp_braces == 0) end def extend_string(string, ts, te) @buffer_s ||= ts @buffer_e = te @buffer << string end def flush_string if @monolithic emit_start_tok @monolithic = false end unless @buffer.empty? emit(:tSTRING_CONTENT, @buffer, @buffer_s, @buffer_e) clear_buffer extend_content end end def extend_content @space_emitted = false end def extend_space(ts, te) flush_string unless @space_emitted emit(:tSPACE, nil, ts, te) @space_emitted = true end end def supports_line_continuation_via_slash? !words? && @interpolate end protected def delimiter?(delimiter) if @indent @end_delim == delimiter.lstrip else @end_delim == delimiter end end def coerce_encoding(string) string.b end def clear_buffer @buffer = ''.dup # Prime the buffer with lexer encoding; otherwise, # concatenation will produce varying results. @buffer.force_encoding(@lexer.source_buffer.source.encoding) @buffer_s = nil @buffer_e = nil end def emit_start_tok str_e = @heredoc_e || @str_s + @str_type.length emit(@start_tok, @str_type, @str_s, str_e) end def emit(token, type, s, e) @lexer.send(:emit, token, type, s, e) end end end parser-2.7.0.2/lib/parser/lexer/dedenter.rb0000644000004100000410000000375513617025313020517 0ustar www-datawww-data# frozen_string_literal: true module Parser class Lexer::Dedenter # Tab (\t) counts as 8 spaces TAB_WIDTH = 8 def initialize(dedent_level) @dedent_level = dedent_level @at_line_begin = true @indent_level = 0 end # For a heredoc like # <<-HERE # a # b # HERE # this method gets called with " a\n" and " b\n" # # However, the following heredoc: # # <<-HERE # a\ # b # HERE # calls this method only once with a string " a\\\n b\n" # # This is important because technically it's a single line, # but it has to be concatenated __after__ dedenting. # # It has no effect for non-squiggly heredocs, i.e. it simply removes "\\\n" # Of course, lexer could do it but once again: it's all because of dedenting. # def dedent(string) original_encoding = string.encoding # Prevent the following error when processing binary encoded source. # "\xC0".split # => ArgumentError (invalid byte sequence in UTF-8) lines = string.force_encoding(Encoding::BINARY).split("\\\n") lines.map! {|s| s.force_encoding(original_encoding) } if @at_line_begin lines_to_dedent = lines else _first, *lines_to_dedent = lines end lines_to_dedent.each do |line| left_to_remove = @dedent_level remove = 0 line.each_char do |char| break if left_to_remove <= 0 case char when ?\s remove += 1 left_to_remove -= 1 when ?\t break if TAB_WIDTH * (remove / TAB_WIDTH + 1) > @dedent_level remove += 1 left_to_remove -= TAB_WIDTH else # no more spaces or tabs break end end line.slice!(0, remove) end string.replace(lines.join) @at_line_begin = string.end_with?("\n") end def interrupt @at_line_begin = false end end end parser-2.7.0.2/lib/parser/lexer/explanation.rb0000644000004100000410000000257613617025313021247 0ustar www-datawww-data# frozen_string_literal: true module Parser module Lexer::Explanation def self.included(klass) klass.class_exec do alias_method :state_before_explanation=, :state= alias_method :advance_before_explanation, :advance remove_method :state=, :advance end end # Like #advance, but also pretty-print the token and its position # in the stream to `stdout`. def advance type, (val, range) = advance_before_explanation more = "(in-kwarg)" if @in_kwarg puts decorate(range, Color.green("#{type} #{val.inspect}"), "#{state.to_s.ljust(12)} #{@cond} #{@cmdarg} #{more}") [ type, [val, range] ] end def state=(new_state) puts " #{Color.yellow(">>> STATE SET <<<", bold: true)} " + "#{new_state.to_s.ljust(12)} #{@cond} #{@cmdarg}".rjust(66) self.state_before_explanation = new_state end private def decorate(range, token, info) from, to = range.begin.column, range.end.column line = range.source_line + ' ' line[from...to] = Color.underline(line[from...to]) tail_len = to - from - 1 tail = '~' * (tail_len >= 0 ? tail_len : 0) decoration = "#{" " * from}#{Color.red("^#{tail}", bold: true)} #{token} ". ljust(68) + info [ line, decoration ] end end end parser-2.7.0.2/lib/parser/diagnostic.rb0000644000004100000410000001035413617025313017723 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # @api public # # @!attribute [r] level # @see LEVELS # @return [Symbol] diagnostic level # # @!attribute [r] reason # @see Parser::MESSAGES # @return [Symbol] reason for error # # @!attribute [r] arguments # @see Parser::MESSAGES # @return [Symbol] extended arguments that describe the error # # @!attribute [r] message # @return [String] error message # # @!attribute [r] location # Main error-related source range. # @return [Parser::Source::Range] # # @!attribute [r] highlights # Supplementary error-related source ranges. # @return [Array] # class Diagnostic ## # Collection of the available diagnostic levels. # # @return [Array] # LEVELS = [:note, :warning, :error, :fatal].freeze attr_reader :level, :reason, :arguments attr_reader :location, :highlights ## # @param [Symbol] level # @param [Symbol] reason # @param [Hash] arguments # @param [Parser::Source::Range] location # @param [Array] highlights # def initialize(level, reason, arguments, location, highlights=[]) unless LEVELS.include?(level) raise ArgumentError, "Diagnostic#level must be one of #{LEVELS.join(', ')}; " \ "#{level.inspect} provided." end raise 'Expected a location' unless location @level = level @reason = reason @arguments = (arguments || {}).dup.freeze @location = location @highlights = highlights.dup.freeze freeze end ## # @return [String] the rendered message. # def message MESSAGES[@reason] % @arguments end ## # Renders the diagnostic message as a clang-like diagnostic. # # @example # diagnostic.render # => # # [ # # "(fragment:0):1:5: error: unexpected token $end", # # "foo +", # # " ^" # # ] # # @return [Array] # def render if @location.line == @location.last_line || @location.is?("\n") ["#{@location}: #{@level}: #{message}"] + render_line(@location) else # multi-line diagnostic first_line = first_line_only(@location) last_line = last_line_only(@location) num_lines = (@location.last_line - @location.line) + 1 buffer = @location.source_buffer last_lineno, last_column = buffer.decompose_position(@location.end_pos) ["#{@location}-#{last_lineno}:#{last_column}: #{@level}: #{message}"] + render_line(first_line, num_lines > 2, false) + render_line(last_line, false, true) end end private ## # Renders one source line in clang diagnostic style, with highlights. # # @return [Array] # def render_line(range, ellipsis=false, range_end=false) source_line = range.source_line highlight_line = ' ' * source_line.length @highlights.each do |highlight| line_range = range.source_buffer.line_range(range.line) if highlight = highlight.intersect(line_range) highlight_line[highlight.column_range] = '~' * highlight.size end end if range.is?("\n") highlight_line += "^" else if !range_end && range.size >= 1 highlight_line[range.column_range] = '^' + '~' * (range.size - 1) else highlight_line[range.column_range] = '~' * range.size end end highlight_line += '...' if ellipsis [source_line, highlight_line]. map { |line| "#{range.source_buffer.name}:#{range.line}: #{line}" } end ## # If necessary, shrink a `Range` so as to include only the first line. # # @return [Parser::Source::Range] # def first_line_only(range) if range.line != range.last_line range.resize(range.source =~ /\n/) else range end end ## # If necessary, shrink a `Range` so as to include only the last line. # # @return [Parser::Source::Range] # def last_line_only(range) if range.line != range.last_line range.adjust(begin_pos: range.source =~ /[^\n]*\z/) else range end end end end parser-2.7.0.2/lib/parser/macruby.rb0000644000004100000410000072010113617025313017237 0ustar www-datawww-data# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- # # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.15 # from Racc grammer file "". # require 'racc/parser.rb' require 'parser' module Parser class MacRuby < Parser::Base def version 19 # closest released match: v1_9_0_2 end def default_encoding Encoding::BINARY end ##### State transition tables begin ### clist = [ '-286,-97,203,204,609,-95,-99,-286,-286,-286,739,726,-286,-286,-286,255', '-286,577,535,467,634,206,535,561,-94,535,-286,-286,-286,556,562,203', '204,669,796,652,-286,-286,608,-286,-286,-286,-286,-286,535,103,738,535', '661,247,102,-93,-94,-96,-86,686,248,-100,207,-97,-94,755,300,301,-97', '-95,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286', '-286,576,670,-286,-286,-286,-80,741,-286,-80,686,-286,-66,103,-286,-286', '-95,-286,102,-286,-89,-286,254,-286,-286,-286,-286,-286,-286,-286,-286', '-286,-91,-286,203,204,-97,-286,-286,-286,-95,-97,207,-286,-286,-95,-286', '-286,-286,-286,-286,-531,-286,103,-286,555,-98,103,102,-94,103,-87,102', '669,-94,102,-286,-286,686,-286,-286,-286,-286,-286,660,103,103,-85,-86', '103,102,102,103,-92,102,801,-89,102,-96,-98,-89,-87,490,-96,207,-96', '-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286,-286', '103,832,-286,-286,-286,102,594,609,-401,-465,-286,476,-89,-286,207,-89', '-465,-87,-286,809,-286,-89,-286,-286,-286,-286,-286,-286,-286,-535,-286', '-99,-286,203,204,475,-535,-535,-535,590,-470,608,-535,-535,-532,-535', '-286,-286,207,-90,-531,-286,609,-87,-535,-98,-87,-528,103,652,-401,541', '-87,102,255,-535,-535,-401,-535,-535,-535,-535,-535,485,486,677,-401', '518,517,516,522,519,-89,255,-90,-462,608,547,-97,-93,-88,548,-462,418', '-401,-535,-535,-535,-535,-535,-535,-535,-535,-535,-535,-535,-535,-535', '-535,-457,566,-535,-535,-535,-65,595,-457,609,-268,-535,467,-528,-535', '207,-529,-457,818,-535,250,-535,465,-535,-535,-535,-535,-535,-535,-535', '-463,-535,-535,-535,-100,-528,566,-463,463,250,-535,-535,254,608,-457', '792,-535,-535,-535,859,-88,-457,-535,-535,-535,-535,-96,74,-535,-535', '-535,254,-535,568,567,564,75,-94,-460,99,-460,-535,-535,-535,-535,-460', '76,-460,503,452,-529,505,-535,-535,-460,-535,-535,-535,-535,-535,103', '820,-535,-535,202,102,-464,568,567,-535,-535,822,-529,-464,-531,-531', '718,566,-535,-535,203,204,-535,-535,-535,-535,-535,-535,-535,-535,-535', '-535,-535,-535,-535,-535,-535,-535,-535,-535,-535,-287,740,-535,-467', '825,-535,-92,-287,-535,-535,-467,-535,-100,-535,826,-535,-287,-535,-535', '-535,-535,-535,-535,-535,750,-535,-535,-535,751,-466,518,517,516,522', '519,566,-466,568,567,578,566,-535,-535,-535,-535,-460,-535,833,-535', '-468,-96,206,-460,-460,-460,103,-468,-460,-460,-460,102,-460,103,-287', '420,524,207,102,226,-460,-287,-460,-460,-460,528,527,531,530,103,-287', '839,-460,-460,102,-460,-460,-460,-460,-460,677,840,518,517,516,522,519', '568,567,573,566,223,568,567,571,225,224,221,222,750,203,204,-460,-460', '-460,-460,-460,-460,-460,-460,-460,-460,-460,-460,-460,-460,796,652', '-460,-460,-460,-287,-460,-460,226,419,-460,589,-287,-460,-460,645,-460', '-531,-460,417,-460,-287,-460,-460,-460,-460,-460,-460,-460,103,-460', '-532,-460,207,102,568,567,569,503,-470,223,502,908,226,225,224,-460', '-460,-460,-460,-457,-460,490,-460,-87,-460,378,-457,-457,-457,-95,207', '-457,-457,-457,521,-457,518,517,516,522,519,203,204,-457,223,-457,-457', '-457,225,224,503,-85,852,505,855,-457,-457,-93,-457,-457,-457,-457,-457', '677,-91,518,517,516,522,519,-99,524,510,677,857,518,517,516,522,519', '528,527,531,530,859,-457,-457,-457,-457,-457,-457,-457,-457,-457,-457', '-457,-457,-457,-457,859,673,-457,-457,-457,551,-457,-457,207,864,-457', '673,550,-457,-457,866,-457,365,-457,868,-457,552,-457,-457,-457,-457', '-457,-457,-457,689,-457,677,-457,518,517,516,522,519,543,106,107,108', '109,110,207,544,-457,-457,-457,-457,299,-457,541,-457,542,-457,275,64', '65,66,9,52,874,298,503,58,59,505,524,876,62,207,60,61,63,28,29,67,68', '531,530,879,-269,579,27,26,25,91,90,92,93,582,677,18,518,517,516,522', '519,8,42,682,10,95,94,96,85,51,87,86,88,585,89,97,98,886,83,84,39,40', '38,677,887,518,517,516,522,519,677,673,518,517,516,522,519,493,245,-286', '676,890,37,892,494,31,-286,465,53,54,895,-532,55,416,33,-286,680,226', '41,677,673,518,517,516,522,519,19,524,226,676,900,82,74,77,78,226,79', '80,531,530,901,75,81,5,64,65,66,9,52,57,902,76,58,59,679,671,524,62', '668,60,61,63,28,29,67,68,665,531,530,663,-266,27,26,25,91,90,92,93,910', '677,18,518,517,516,522,519,8,42,7,10,95,94,96,85,51,87,86,88,912,89', '97,98,913,83,84,39,40,38,677,918,518,517,516,522,519,677,673,518,517', '516,522,519,-280,207,481,863,920,37,923,-280,31,482,925,53,54,859,375', '55,-280,33,480,377,376,41,677,673,518,517,516,522,519,19,524,859,207', '930,82,74,77,78,207,79,80,531,530,226,75,81,275,64,65,66,9,52,57,498', '76,58,59,198,910,524,62,652,60,61,63,28,29,67,68,250,531,530,939,859', '27,26,25,91,90,92,93,859,677,18,518,517,516,522,519,8,42,859,10,95,94', '96,85,51,87,86,88,943,89,97,98,859,83,84,39,40,38,677,910,518,517,516', '522,519,677,673,518,517,516,522,519,-469,859,-286,414,197,37,196,-469', '31,-286,415,53,54,195,-532,55,-469,33,-286,416,599,41,677,673,518,517', '516,522,519,19,524,645,496,859,82,74,77,78,465,79,80,531,530,207,75', '81,275,64,65,66,9,52,57,111,76,58,59,207,859,524,62,962,60,61,63,28', '29,67,68,910,531,530,452,541,27,26,25,91,90,92,93,452,830,18,518,517', '516,367,519,8,42,207,10,95,94,96,85,51,87,86,88,467,89,97,98,743,83', '84,39,40,38,830,-329,518,517,516,507,519,677,-329,518,517,516,522,519', '-469,727,898,-329,506,37,465,-469,31,899,545,53,54,207,762,55,-469,33', '897,467,499,41,677,645,518,517,516,522,519,19,524,207,498,226,82,74', '77,78,250,79,80,531,530,959,75,81,275,64,65,66,9,52,57,250,76,58,59', '645,492,524,62,546,60,61,63,28,29,67,68,226,531,530,226,491,27,26,25', '91,90,92,93,769,-267,18,-266,773,226,750,720,8,42,787,10,95,94,96,85', '51,87,86,88,487,89,97,98,717,83,84,39,40,38,226,-554,-554,-554,-554', '232,234,223,-280,-554,-554,225,224,221,222,-280,240,241,790,37,669,207', '31,652,-280,53,54,800,250,55,207,33,223,207,229,41,225,224,221,222,233', '231,227,19,228,259,960,483,82,74,77,78,207,79,80,,,,75,81,275,64,65', '66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,106,107,108,109,110', '27,26,25,91,90,92,93,712,713,18,,714,97,98,,8,42,,10,95,94,96,85,51', '87,86,88,,89,97,98,551,83,84,39,40,38,226,929,200,106,107,108,109,110', '-286,201,552,,,,,-286,240,241,199,37,-532,,31,,-286,53,54,,,55,,33,223', ',229,41,225,224,221,222,,,227,19,228,,,,82,74,77,78,,79,80,,,,75,81', '275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,106,107,108', '109,110,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85,51,87,86', '88,,89,97,98,,83,84,39,40,38,226,,,,,,,,,,,,,,,,240,241,,37,,,31,,,53', '54,,,55,,33,223,,229,41,225,224,221,222,,,227,19,228,,,,82,74,77,78', ',79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29', '67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,583,8,42,,10,95,94,96,85,51', '87,86,88,,89,97,98,,83,84,39,40,38,226,230,235,236,237,232,234,242,243', '238,239,,219,220,,,240,241,,37,,,31,,,53,54,,,55,,33,223,,229,41,225', '224,221,222,233,231,227,19,228,,,,82,74,77,78,,79,80,,,,75,81,,244,-281', '-233,,,57,,76,-281,-281,-281,,,-281,-281,-281,751,-281,518,517,516,522', '519,,,,,-281,-281,-281,,,,,,,,-281,-281,,-281,-281,-281,-281,-281,,', ',,,,,,524,,,,,,,,,528,527,531,530,,-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,5,64,65,66,9,52,', ',,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,', ',,,,8,42,7,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,226', '-554,-554,-554,-554,232,234,,,-554,-554,,,,,,240,241,,37,,,31,,,53,54', ',,55,,33,223,,229,41,225,224,221,222,233,231,227,19,228,,,,82,74,77', '78,,79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28', '29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85,51', '87,86,88,,89,97,98,,83,84,39,40,38,226,-554,-554,-554,-554,232,234,', ',-554,-554,,,,,,240,241,,37,,,277,,,53,54,,,55,,33,223,,229,41,225,224', '221,222,233,231,227,19,228,,,,82,74,77,78,,79,80,,,,75,81,275,64,65', '66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90', '92,93,,,18,,,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39', '40,38,226,-554,-554,-554,-554,232,234,,,-554,-554,,,,,,240,241,,37,', ',31,,,53,54,,,55,,33,223,,229,41,225,224,221,222,233,231,227,19,228', ',,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62', ',60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,226,-554,-554,-554,-554', '232,234,,,-554,-554,,,,,,240,241,,37,,,31,,,53,54,,,55,,33,223,,229', '41,225,224,221,222,233,231,227,19,228,,,,82,74,77,78,,79,80,,,,75,81', '275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26', '25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98', ',83,84,39,40,38,226,,,,,,,,,,,,,,,,240,241,,37,,,31,,,53,54,,,55,,33', '223,,229,41,225,224,221,222,,,227,19,228,,,,82,74,77,78,,79,80,,,,75', '81,275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27', '26,25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97', '98,,83,84,39,40,38,226,230,235,236,237,232,234,242,,238,239,,,,,,240', '241,,37,,,277,,,53,54,,,55,,33,223,,229,41,225,224,221,222,233,231,227', '19,228,,,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59', ',,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42', ',10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,226,230,235,236', '237,232,234,242,243,238,239,,-554,-554,,,240,241,,37,,,31,,,53,54,,', '55,,33,223,,229,41,225,224,221,222,233,231,227,19,228,,,,82,74,77,78', ',79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29', '67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85,51,87', '86,88,,89,97,98,,83,84,39,40,38,226,-554,-554,-554,-554,232,234,,,-554', '-554,,,,,,240,241,,37,,,31,,,53,54,,,55,,33,223,,229,41,225,224,221', '222,233,231,227,19,228,,,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9', '52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93', ',,18,,,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38', '226,230,235,236,237,232,234,242,243,238,239,,-554,-554,,,240,241,,37', ',,31,,,53,54,,,55,,33,223,,229,41,225,224,221,222,233,231,227,19,228', ',,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62', ',60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,226,,,,,,,,,,,,,,,,240', '241,,37,,,31,,,53,54,,,55,,33,223,,229,41,225,224,221,222,,,227,19,228', ',,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62', ',60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,583,8,42,,10', '95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,226,230,235,236,237', '232,234,242,243,238,239,,219,220,,,240,241,,37,,,31,,,53,54,,,55,,33', '223,,229,41,225,224,221,222,233,231,227,19,228,,,,82,74,77,78,,79,80', ',,,75,81,,244,-537,,,,57,,76,-537,-537,-537,,,-537,-537,-537,521,-537', '518,517,516,522,519,,,,-537,-537,-537,-537,,,,,,,,-537,-537,,-537,-537', '-537,-537,-537,,,,,,,,,524,707,,,,,,,,528,527,531,530,,-537,-537,-537', '-537,-537,-537,-537,-537,-537,-537,-537,-537,-537,-537,,,-537,-537,-537', ',,-537,,,-537,,,-537,-537,,-537,,-537,,-537,,-537,-537,-537,-537,-537', '-537,-537,-536,-537,-537,-537,,,,-536,-536,-536,,,-536,-536,-536,226', '-536,-537,-537,-537,-537,,-537,,-537,-536,-536,-536,-536,,,240,241,', ',,-536,-536,,-536,-536,-536,-536,-536,,,,223,,229,,225,224,221,222,', ',,,,,,,,,,-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,275,64,65,66,9,52,,,,58,59,,,,62,,60,61,63', '28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,226,230,235,236,237,232,234,,', '238,239,,,,,,240,241,,37,,,31,,,53,54,,,55,,33,223,,229,41,225,224,221', '222,233,231,227,19,228,,,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9', '52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93', ',,18,,,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38', '226,,,,,,,,,,,,,,,,240,241,,37,,,31,,,53,54,,,55,,33,223,,,41,225,224', '221,222,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57,', '76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18', ',,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,226', ',,,,,,,,,,,,,,,240,241,,37,,,277,,,53,54,,,55,,33,223,,229,41,225,224', '221,222,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57,', '76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18', ',,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,', ',,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,82,74,77', '78,,79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28', '29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85,51', '87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53,54', ',,55,,33,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,275,64,65,66', '9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92', '93,,,18,,,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40', '38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,82', '74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61', '63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96', '85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,31', ',,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,275', '64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25', '91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83', '84,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,', ',19,,,,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57,,76,58,59,', ',,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42', ',10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,', ',,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80', ',,,75,81,275,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68', ',,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42,,10,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33', ',,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,275,64,65,66,9,52,57', ',76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18', ',,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,', ',,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,82,74,77', '78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29', '67,68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86', '88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,', '55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52', '57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,', ',18,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,', ',,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82,74,77', '78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29', '67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86', '88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,', '55,,,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18', ',,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,', ',,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67', '68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,207,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,289,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,,521,295', '518,517,516,522,519,,,,,,,,,,,,,,,846,,,217,,,53,54,,,55,,,,,,524,,', ',,,,,,528,527,531,530,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,', '76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83,84,39,40,38', ',,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,268,,266,,41,,,,,,,,216,', ',,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95', '94,96,85,51,87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,', ',211,,,217,,,53,54,,,55,,268,,266,,41,,,,,,,,216,,,,,82,74,77,78,,79', '80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68', ',,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65', '66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91', '90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39', '40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,', ',,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211', ',,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288', '294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,', '83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,', ',,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,', ',,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,', ',,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,', ',,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79', '80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68', ',,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65', '66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91', '90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39', '40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,', ',,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211', ',,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288', '294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,', '83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,', ',,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,', ',,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,', ',,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,', ',,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79', '80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68', ',,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65', '66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91', '90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39', '40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,', ',,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211', ',,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288', '294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,', '83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,', ',,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,', ',,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,', ',,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,', ',,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79', '80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68', ',,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65', '66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91', '90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39', '40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,', ',,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211', ',,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288', '294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,', '83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,', ',,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,9,52,57,,76,58,59', ',,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,8,42', '7,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,', ',,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80', ',,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,', ',,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218', ',,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83,84,39,40,38,,,,', ',,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,268,,266,,41,,,,,,,,216,,,,,82', '74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63', '28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51', '87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',457,54,,,55,,268,,266,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25', '91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83', '84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,268,,266,,41', ',,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,207,64,65,66,,52,57,,76,58', '59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218', ',,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,', ',,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67', '68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86', '88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,', '55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52', '57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92', '93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38', ',,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82', '74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63', '291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96', '85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217', ',,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64', '65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294', '91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84', '39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216', ',,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211', ',,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288', '294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,', '83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,', ',,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,', ',,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42', ',,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,', ',,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80', ',,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,', ',,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,9,52,57', ',76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18', ',,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,', ',,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,82,74,77', '78,,79,80,,,,75,81,,64,65,66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29', '67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,586,8,42,,10,95,94,96,85,51', '87,86,88,,89,97,98,,83,84,39,40,38,226,230,235,236,237,232,234,242,243', '238,239,,219,220,,,240,241,,37,,,31,,,53,54,,,55,,33,223,,229,41,225', '224,221,222,233,231,227,19,228,,,,82,74,77,78,,79,80,,,,75,81,,244,', ',,367,57,,76,64,65,66,,52,,,,58,59,,,,62,,60,61,63,291,292,67,68,,,', ',,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270', '89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,', ',,266,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83,84,39,40,38', ',,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,629,,266,,41,,,,,,,,216,', ',,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96', '85,51,87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,', ',217,,,53,54,,,55,,,,266,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75', '81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26', '25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98', ',83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,268,,266', ',41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76', '58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218', ',,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,', ',,,,,,,,,,,,211,,,217,,,53,54,,,55,,629,,266,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217', ',,53,54,,,55,,629,,266,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25', '91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84', '39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216', ',,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,289,,,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,,521,295,518,517,516,522,519,', ',,,,,,,,,,,,,889,,,217,,,53,54,,,55,,,,,,524,,,,,,,,,528,527,531,530', '82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61', '63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94', '96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,', ',217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25', '91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83', '84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,268,,266,,41', ',,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59', ',,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42', ',,95,94,96,85,51,87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,', ',,,,,,211,,,217,,,53,54,,,55,,268,,266,,41,,,,,,,,216,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67', '68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', '270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,', '55,,268,,266,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66', ',52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90', '92,93,,,218,,,,,,,289,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,,751', '295,518,517,516,522,519,,,,,,,,,,,,,,,285,,,282,,,53,54,,,55,,281,,', ',524,,,,,,,,,528,527,531,530,82,74,77,78,,79,80,,,,75,81,,64,65,66,', '52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90', '92,93,,,218,,,,,,,289,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,,,295', '226,230,235,236,237,232,234,242,243,238,239,,219,220,,,240,241,,285', ',,217,,,53,54,,,55,,,223,,229,,225,224,221,222,233,231,227,,228,,,,82', '74,77,78,,79,80,,,,75,81,,244,,297,,,57,,76,64,65,66,,52,,,,58,59,,', ',62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,', ',42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,', ',,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79', '80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68', ',,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,629,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64', '65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91', '90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39', '40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,19,,', ',,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61', '63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94', '96,85,51,87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211', ',,217,,,53,54,,,55,,268,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75', '81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287', '288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89', '97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,', ',41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76', '58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,', ',,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,', ',,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82,74,77,78,,79', '80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,', ',,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88,,89', '97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,', ',41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58', '59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,', '42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,226,230,235,236', '237,232,234,242,243,238,239,,219,220,,,240,241,,211,,-233,217,,,53,54', ',,55,,,223,,229,41,225,224,221,222,233,231,227,19,228,,,,82,74,77,78', ',79,80,,,,75,81,103,244,,-233,,102,57,,76,64,65,66,,52,,,,58,59,,,,62', ',60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,289', ',,95,94,96,85,51,87,86,88,,89,97,98,,83,84,,751,295,518,517,516,522', '519,,,,,,,,,,,,,,,330,,,31,,,53,54,,,55,,33,,,,524,,,,,,,,,528,527,531', '530,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,289,,,95', '94,96,335,51,87,86,336,,89,97,98,,83,84,,521,295,518,517,516,522,519', ',,,,,,,,,,,342,,,337,,,217,,,53,54,,,55,,,,,,524,707,,,,,,,,528,527', '531,530,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62', ',60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,289', ',,95,94,96,335,51,87,86,336,,89,97,98,,83,84,,521,295,518,517,516,522', '519,,,,,,,,,,,,,,,337,,,217,,,53,54,,,55,,,,,,524,,,,,,,,,528,527,531', '530,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96', '85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217', ',,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65', '66,9,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90', '92,93,,,18,,,,,,8,42,7,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39', '40,38,226,230,235,236,237,232,234,242,243,238,239,,219,220,,,240,241', ',37,,,31,,,53,54,,,55,,33,223,,229,41,225,224,221,222,233,231,227,19', '228,,,,82,74,77,78,,79,80,,,,75,81,,244,,,,367,57,,76,64,65,66,,52,', ',,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,', ',,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,', ',,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67', '68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,', '76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18', ',,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,', ',,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67', '68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,9,52,57', ',76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18', ',,,,,8,42,,10,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,', ',,,,,,,,,,,,,,,37,,,31,,,53,54,,,55,,33,,,,41,,,,,,,,19,,,,,82,74,77', '78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29', '67,68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86', '88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,', '55,,384,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,', '52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,384,,,,41,,,,,,,,216,,,,,82', '74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63', '28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51', '87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53', '54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66', ',52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92', '93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83,84,39,40', '38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,268,,266,,41,,,,,,,,216', ',,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,289,,,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,,,295,226,230,235,236,237,232', '234,242,243,238,239,,219,220,,,240,241,,285,,,217,,,53,54,,,55,,,223', ',229,,225,224,221,222,233,231,227,,228,,,,82,74,77,78,,79,80,,,,75,81', ',244,,478,,,57,,76,64,65,66,,52,,,,58,59,,,,62,,60,61,63,28,29,67,68', ',,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88,,89', '97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,', ',41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58', '59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218', ',,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,', ',,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67', '68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,289,,,95,94,96,85,51,87', '86,88,,89,97,98,,83,84,,521,295,518,517,516,522,519,,,,,,,,,,,,,,,285', ',,282,,,53,54,,,55,,,,,,524,,,,,,,,,528,527,531,530,82,74,77,78,,79', '80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68', ',,,,,287,288,294,91,90,92,93,,,218,,,,,,,289,,,95,94,96,85,51,87,86', '88,,89,97,98,,83,84,,521,295,518,517,516,522,519,,,,,,,,,,,,,,,285,', ',282,,,53,54,,,55,,,,,,524,,,,,,,,,528,527,531,530,82,74,77,78,,79,80', ',,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,', ',,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,496,,53,54,,', '55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52', '57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92', '93,,,218,,,,,,,289,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,,,295', ',,,,,,,,,,,,,,,,,,,285,,,282,,,53,54,,,55,,,,,,,,,,,,,,,,,,,82,74,77', '78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292', '67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87', '86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54', ',,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52', '57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,', ',18,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,', ',,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82,74,77', '78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29', '67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86', '88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,', '55,,,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218', ',,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,', ',,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67', '68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218', ',,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,', ',,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67', '68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,724,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64', '65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294', '91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84', '39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216', ',,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,28,29,67,68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96', '85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217', ',,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65', '66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90', '92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40', '38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,19,,,,,82', '74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63', '28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51', '87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,268,,266,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25', '91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83', '84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,268,,266,,41', ',,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59', ',,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,', ',,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,', ',,,,,,,,,211,,,217,,,53,54,,,55,,268,,,,41,,,,,,,,216,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67', '68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,', '76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217', ',,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64', '65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294', '91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83', '84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,629,,,,41,,,', ',,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,', ',,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,', ',,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,', ',,,,,,,,211,,,217,,,53,54,,,55,,384,,,,41,,,,,,,,216,,,,,82,74,77,78', ',79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67', '68,,,,,,27,26,25,91,90,92,93,,,18,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,19,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,', '76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65', '66,,52,57,,76,58,59,,,,62,,60,61,63,28,29,67,68,,,,,,27,26,25,91,90', '92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88,270,89,97,98,,83,84,39', '40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,268,,266,,41,,,,,,', ',216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62', ',60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42', ',,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,', ',,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80', ',,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,', ',,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51,87,86,88', ',89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55', ',,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57', ',76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93', ',,218,,,,,,,42,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,', ',,,,,,,,,,,,,,,,,,211,,,217,,,53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74', '77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291', '292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85', '51,87,86,88,,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,,,,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81,,64,65', '66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288,294,91', '90,92,93,,,218,,,,,,,289,,,95,94,96,85,51,87,86,88,,89,97,98,,83,84', ',,295,,,,,,,,,,,,,,,,,,,,285,,,282,,,53,54,,,55,,,,,,,,,,,,,,,,,,,82', '74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60,61,63', '28,29,67,68,,,,,,27,26,25,91,90,92,93,,,218,,,,,,,42,,,95,94,96,85,51', '87,86,88,270,89,97,98,,83,84,39,40,38,,,,,,,,,,,,,,,,,,,,211,,,217,', ',53,54,,,55,,268,,266,,41,,,,,,,,216,,,,,82,74,77,78,,79,80,,,,75,81', ',64,65,66,,52,57,,76,58,59,,,,62,,60,61,63,291,292,67,68,,,,,,287,288', '294,91,90,92,93,,,218,,,,,,,289,,,95,94,96,85,51,87,86,88,,89,97,98', ',83,84,,,295,,,,,,,,,,,,,,,,,,,,285,,,282,,,53,54,,,55,,,,,,,,,,,,,', ',,,,,82,74,77,78,,79,80,,,,75,81,,64,65,66,,52,57,,76,58,59,,,,62,,60', '61,63,291,292,67,68,,,,,,287,288,294,91,90,92,93,,,218,,,,,,,42,,,95', '94,96,85,51,87,86,88,,89,97,98,,83,84,39,40,38,226,230,235,236,237,232', '234,242,243,238,239,,219,220,,,240,241,,211,,,217,,,53,54,,,55,,,223', ',229,41,225,224,221,222,233,231,227,216,228,,,,82,74,77,78,,79,80,,', ',75,81,,244,-239,,,,57,,76,-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,,250,-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,,,,,,,,,,,,,,,,,,,,,,,-400', ',,,,,,-400,-400,-400,,-239,-400,-400,-400,,-400,,-239,,,,,250,-239,-400', '-400,-400,,,,,,,,,-400,-400,,-400,-400,-400,-400,-400,,,-239,,,,,,,', ',,,,,,-239,,,,,-239,-400,-400,-400,-400,-400,-400,-400,-400,-400,-400', '-400,-400,-400,-400,,,-400,-400,-400,,,-400,,250,-400,,,-400,-400,,-400', ',-400,,-400,,-400,-400,-400,-400,-400,-400,-400,-293,-400,-400,-400', ',,,-293,-293,-293,,,-293,-293,-293,,-293,-400,-400,,-400,,-400,,,,-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,,259,-293,,,-293,-293,,-293,,-293,,-293', ',-293,-293,-293,-293,-293,-293,-293,-239,-293,,-293,,,,-239,-239,-239', ',,-239,-239,-239,,-239,-293,-293,,-293,,-293,,,,-239,,,,,,,,,,-239,-239', ',-239,-239,-239,-239,-239,,,,,,393,397,,,394,,,,,,,,147,148,,144,126', '127,128,135,132,134,,,129,130,,,-239,149,150,136,137,,,-239,,,250,,250', '-239,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124,,,151', '-239,,,,,,,,,,,,,,-239,,,,,-239,162,173,163,186,159,179,169,168,189', '190,184,167,166,161,187,191,192,171,160,174,178,180,172,165,,,,181,188', '183,182,175,185,170,158,177,176,,,,,,157,164,155,156,152,153,154,114', '116,,,115,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149', '150,136,137,,,,,,,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123', '145,124,,,151,82,,,,,,,,,,,81,162,173,163,186,159,179,169,168,189,190', '184,167,166,161,187,191,192,171,160,174,178,180,172,165,,,,181,188,183', '182,175,185,170,158,177,176,,,,,,157,164,155,156,152,153,154,114,116', '113,,115,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149', '150,136,137,,,,,,,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123', '145,124,,,151,82,,,,,,,,,,,81,162,173,163,186,159,179,169,168,189,190', '184,167,166,161,187,191,192,171,160,174,178,180,172,165,,,,181,188,183', '182,175,185,170,158,177,176,,,,,,157,164,155,156,152,153,154,114,116', ',,115,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150', '136,137,,,,,,,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145', '124,,,151,82,,,,,,,,,,,81,162,173,163,186,159,179,169,168,189,190,184', '167,166,161,187,191,192,171,160,174,178,180,172,165,,,,181,188,183,182', '175,185,170,158,177,176,,,,,,157,164,155,156,152,153,154,114,116,,,115', ',,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136', '137,,,,,,,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124', ',,151,82,,,,,,,,,,,81,162,173,163,186,159,179,169,168,189,190,184,167', '166,161,187,191,192,171,160,174,178,180,172,165,,,,181,188,183,352,351', '353,350,158,177,176,,,,,,157,164,155,156,347,348,349,345,116,87,86,346', ',89,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136', '137,,,,,,357,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145', '124,,,151,162,173,163,186,159,179,169,168,189,190,184,167,166,161,187', '191,192,171,160,174,178,180,172,165,,,,181,188,183,182,175,185,170,158', '177,176,,,,,,157,164,155,156,152,153,154,114,116,,,115,,,,,,,,147,148', ',144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,,,,,', ',,,141,140,,125,146,143,142,138,139,133,131,123,145,124,400,404,151', ',399,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150', '136,137,,,,,,250,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123', '145,124,449,397,151,,450,,,,,,,,147,148,,144,126,127,128,135,132,134', ',,129,130,,,,149,150,136,137,,,,,,,,,,,,,,141,140,,125,146,143,142,138', '139,133,131,123,145,124,449,397,151,,450,,,,,,,,147,148,,144,126,127', '128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,,,,,,,,,141,140,,125', '146,143,142,138,139,133,131,123,145,124,600,397,151,,601,,,,,,,,147', '148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,250', ',,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124,602,404', '151,,603,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149', '150,136,137,,,,,,250,,,,,,,,141,140,,125,146,143,142,138,139,133,131', '123,145,124,638,397,151,,639,,,,,,,,147,148,,144,126,127,128,135,132', '134,,,129,130,,,,149,150,136,137,,,,,,250,,,,,,,,141,140,,125,146,143', '142,138,139,133,131,123,145,124,641,404,151,,642,,,,,,,,147,148,,144', '126,127,128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,250,,,,,,', ',141,140,,125,146,143,142,138,139,133,131,123,145,124,600,397,151,,601', ',,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136', '137,,,,,,250,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145', '124,602,404,151,,603,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129', '130,,,,149,150,136,137,,,,,,250,,,,,,,,141,140,,125,146,143,142,138', '139,133,131,123,145,124,692,397,151,,693,,,,,,,,147,148,,144,126,127', '128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,250,,,,,,,,141,140', ',125,146,143,142,138,139,133,131,123,145,124,694,404,151,,695,,,,,,', ',147,148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,', ',,,,250,,,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124', '697,404,151,,698,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130', ',,,149,150,136,137,,,,,,250,,,,,,,,141,140,,125,146,143,142,138,139', '133,131,123,145,124,449,397,151,,450,,,,,,,,147,148,,144,126,127,128', '135,132,134,,,129,130,,,,149,150,136,137,,,,,,250,,,,,,,,141,140,,125', '146,143,142,138,139,133,131,123,145,124,934,397,151,,935,,,,,,,,147', '148,,144,126,127,128,135,132,134,,,129,130,,,,149,150,136,137,,,,,,250', ',,,,,,,141,140,,125,146,143,142,138,139,133,131,123,145,124,936,404', '151,,937,,,,,,,,147,148,,144,126,127,128,135,132,134,,,129,130,,,,149', '150,136,137,,,,,,250,,,,,,,,141,140,,125,146,143,142,138,139,133,131', '123,145,124,953,404,151,,952,,,,,,,,147,148,,144,126,127,128,135,132', '134,,,129,130,,,,149,150,136,137,,,,,,250,,,,,,,,141,140,,125,146,143', '142,138,139,133,131,123,145,124,,,151,226,230,235,236,237,232,234,242', '243,238,239,,219,220,,,240,241,,,,,,,,,,,,,,,223,,229,,225,224,221,222', '233,231,227,,228,,226,230,235,236,237,232,234,242,243,238,239,,219,220', '207,244,240,241,,,,,,,,,,,,,,,223,,229,,225,224,221,222,233,231,227', ',228,,226,230,235,236,237,232,234,242,243,238,239,,219,220,,244,240', '241,,,,,,,,,,,,,,,223,,229,,225,224,221,222,233,231,227,,228,,226,230', '235,236,237,232,234,242,243,238,239,,219,220,,244,240,241,,,,,,,,,,', ',,,,223,,229,,225,224,221,222,233,231,227,,228,,226,230,235,236,237', '232,234,242,243,238,239,,219,220,,244,240,241,,,,,,,,,,,,,,,223,,229', ',225,224,221,222,233,231,227,,228,,226,230,235,236,237,232,234,242,243', '238,239,,219,220,,244,240,241,,,,,,,,,,,,,,,223,,229,,225,224,221,222', '233,231,227,,228,,226,230,235,236,237,232,234,242,243,238,239,,219,220', ',244,240,241,,,,,,,,,,,,,,,223,,229,,225,224,221,222,233,231,227,,228', ',226,230,235,236,237,232,234,242,243,238,239,,219,220,,244,240,241,', ',,,,,,,,,,,,,223,,229,,225,224,221,222,233,231,227,,228,,226,230,235', '236,237,232,234,242,243,238,239,,219,220,,244,240,241,,,,,,,,,,,,,,', '223,,229,,225,224,221,222,233,231,227,,228,,226,230,235,236,237,232', '234,242,243,238,239,,219,220,,244,240,241,,,,,,,,,,,,,,,223,,229,,225', '224,221,222,233,231,227,,228,,,,,,,,,,,,,,,,,244' ] racc_action_table = arr = ::Array.new(23593, 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 = [ '603,935,557,557,459,934,545,603,603,603,601,587,603,603,603,56,603,363', '867,618,477,18,321,355,955,772,603,603,603,341,355,411,411,521,681,681', '603,603,459,603,603,603,603,603,322,273,600,690,509,23,273,328,803,936', '587,537,23,331,18,601,587,618,38,38,693,692,603,603,603,603,603,603', '603,603,603,603,603,603,603,603,363,521,603,603,603,633,603,603,474', '804,603,633,557,603,603,600,603,557,603,639,603,56,603,603,603,603,603', '603,603,399,603,545,603,563,563,935,399,399,399,934,935,411,399,399', '934,399,603,603,603,603,936,603,867,603,341,603,321,867,955,772,638', '321,751,955,772,399,399,538,399,399,399,399,399,509,341,537,328,803', '322,341,537,690,331,322,690,639,690,936,695,693,692,417,936,700,694', '399,399,399,399,399,399,399,399,399,399,399,399,399,399,804,751,399', '399,399,804,399,615,765,350,399,280,639,399,563,639,350,638,399,705', '399,639,399,399,399,399,399,399,399,400,399,417,399,649,649,279,400', '400,400,394,210,615,400,400,695,400,399,399,278,399,694,399,447,638', '400,399,638,335,538,872,765,872,638,538,24,400,400,765,400,400,400,400', '400,295,295,676,765,676,676,676,676,676,394,290,695,351,447,337,394', '210,694,337,351,212,765,400,400,400,400,400,400,400,400,400,400,400', '400,400,400,335,359,400,400,400,276,400,335,458,723,400,267,335,400', '649,336,335,742,400,24,400,264,400,400,400,400,400,400,400,352,400,400', '400,212,335,574,352,263,290,697,641,24,458,345,676,602,400,400,956,400', '345,400,602,602,602,400,72,602,602,602,290,602,359,359,359,72,742,336', '1,346,602,602,602,602,336,72,346,658,249,336,658,602,602,336,602,602', '602,602,602,3,744,697,641,15,3,353,574,574,697,641,745,336,353,697,641', '574,364,697,641,309,309,602,602,602,602,602,602,602,602,602,602,602', '602,602,602,697,641,602,602,602,900,602,602,347,746,602,15,900,602,602', '347,602,15,602,748,602,900,602,602,602,602,602,602,602,749,602,602,602', '608,348,608,608,608,608,608,362,348,364,364,364,361,602,602,602,602', '88,602,753,602,349,602,218,88,88,88,556,349,88,88,88,556,88,708,483', '214,608,758,708,443,88,483,88,88,88,608,608,608,608,325,483,759,88,88', '325,88,88,88,88,88,863,760,863,863,863,863,863,362,362,362,360,443,361', '361,361,443,443,443,443,608,320,320,88,88,88,88,88,88,88,88,88,88,88', '88,88,88,945,945,88,88,88,548,88,88,424,213,88,393,548,88,88,764,88', '953,88,211,88,548,88,88,88,88,88,88,88,702,88,952,88,473,702,360,360', '360,311,36,424,311,863,423,424,424,88,88,88,88,85,88,299,88,393,88,193', '85,85,85,393,778,85,85,85,319,85,319,319,319,319,319,16,16,85,423,85', '85,85,423,423,312,36,779,312,780,85,85,36,85,85,85,85,85,864,299,864', '864,864,864,864,299,319,319,908,783,908,908,908,908,908,319,319,319', '319,784,85,85,85,85,85,85,85,85,85,85,85,85,85,85,786,864,85,85,85,339', '85,85,789,791,85,908,339,85,85,794,85,99,85,797,85,339,85,85,85,85,85', '85,85,540,85,939,85,939,939,939,939,939,329,632,632,632,632,632,42,329', '85,85,85,85,37,85,539,85,329,85,536,536,536,536,536,536,806,35,315,536', '536,315,939,810,536,811,536,536,536,536,536,536,536,939,939,814,815', '373,536,536,536,536,536,536,536,379,524,536,524,524,524,524,524,536', '536,534,536,536,536,536,536,536,536,536,536,385,536,536,536,827,536', '536,536,536,536,673,828,673,673,673,673,673,925,524,925,925,925,925', '925,302,21,642,524,834,536,835,302,536,642,837,536,536,841,642,536,302', '536,642,532,425,536,923,673,923,923,923,923,923,536,925,426,673,846', '536,536,536,536,427,536,536,925,925,849,536,536,111,111,111,111,111', '111,536,850,536,111,111,529,522,923,111,514,111,111,111,111,111,111', '111,513,923,923,512,387,111,111,111,111,111,111,111,865,790,111,790', '790,790,790,790,111,111,111,111,111,111,111,111,111,111,111,111,869', '111,111,111,870,111,111,111,111,111,943,875,943,943,943,943,943,962', '790,962,962,962,962,962,286,391,284,790,880,111,881,286,111,284,882', '111,111,883,113,111,286,111,284,113,113,111,859,943,859,859,859,859', '859,111,962,885,460,889,111,111,111,111,500,111,111,962,962,428,111', '111,777,777,777,777,777,777,111,896,111,777,777,13,957,859,777,497,777', '777,777,777,777,777,777,401,859,859,903,904,777,777,777,777,777,777', '777,905,792,777,792,792,792,792,792,777,777,906,777,777,777,777,777', '777,777,777,777,907,777,777,777,951,777,777,777,777,777,910,909,910', '910,910,910,910,857,792,857,857,857,857,857,283,950,698,209,12,777,11', '283,777,698,209,777,777,10,698,777,283,777,698,209,413,777,855,910,855', '855,855,855,855,777,857,488,484,967,777,777,777,777,931,777,777,857', '857,933,777,777,776,776,776,776,776,776,777,7,777,776,776,454,949,855', '776,948,776,776,776,776,776,776,776,944,855,855,596,326,776,776,776', '776,776,776,776,591,887,776,887,887,887,327,887,776,776,604,776,776', '776,776,776,776,776,776,776,316,776,776,776,606,776,776,776,776,776', '750,43,750,750,750,314,750,825,43,825,825,825,825,825,844,588,845,43', '313,776,619,844,776,845,330,776,776,621,626,776,844,776,845,628,308', '776,668,635,668,668,668,668,668,776,825,637,307,304,776,776,776,776', '640,776,776,825,825,946,776,776,195,195,195,195,195,195,776,643,776', '195,195,644,301,668,195,332,195,195,195,195,195,195,195,647,668,668', '648,300,195,195,195,195,195,195,195,650,584,195,653,654,442,662,577', '195,195,669,195,195,195,195,195,195,195,195,195,296,195,195,195,571', '195,195,195,195,195,437,437,437,437,437,437,437,442,847,437,437,442', '442,442,442,847,437,437,675,195,677,678,195,683,847,195,195,688,294', '195,691,195,437,289,437,195,437,437,437,437,437,437,437,195,437,288', '947,285,195,195,195,195,479,195,195,,,,195,195,843,843,843,843,843,843', '195,,195,843,843,,,,843,,843,843,843,843,843,843,843,472,472,472,472', '472,843,843,843,843,843,843,843,567,567,843,,567,567,567,,843,843,,843', '843,843,843,843,843,843,843,843,,843,843,843,888,843,843,843,843,843', '434,888,14,274,274,274,274,274,937,14,888,,,,,937,434,434,14,843,937', ',843,,937,843,843,,,843,,843,434,,434,843,434,434,434,434,,,434,843', '434,,,,843,843,843,843,,843,843,,,,843,843,919,919,919,919,919,919,843', ',843,919,919,,,,919,,919,919,919,919,919,919,919,6,6,6,6,6,919,919,919', '919,919,919,919,,,919,,,,,,919,919,,919,919,919,919,919,919,919,919', '919,,919,919,919,,919,919,919,919,919,433,,,,,,,,,,,,,,,,433,433,,919', ',,919,,,919,919,,,919,,919,433,,433,919,433,433,433,433,,,433,919,433', ',,,919,919,919,919,,919,919,,,,919,919,799,799,799,799,799,799,919,', '919,799,799,,,,799,,799,799,799,799,799,799,799,,,,,,799,799,799,799', '799,799,799,,,799,,,,,382,799,799,,799,799,799,799,799,799,799,799,799', ',799,799,799,,799,799,799,799,799,382,382,382,382,382,382,382,382,382', '382,382,,382,382,,,382,382,,799,,,799,,,799,799,,,799,,799,382,,382', '799,382,382,382,382,382,382,382,799,382,,,,799,799,799,799,,799,799', ',,,799,799,,382,51,382,,,799,,799,51,51,51,,,51,51,51,920,51,920,920', '920,920,920,,,,,51,51,51,,,,,,,,51,51,,51,51,51,51,51,,,,,,,,,920,,', ',,,,,,920,920,920,920,,51,51,51,51,51,51,51,51,51,51,51,51,51,51,,,51', '51,51,,,51,,,51,,,51,51,,51,,51,,51,,51,51,51,51,51,51,51,,51,,51,,', ',,,,,,,,,,,51,51,51,51,,51,,51,0,0,0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0', '0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0', '0,0,432,432,432,432,432,432,432,,,432,432,,,,,,432,432,,0,,,0,,,0,0', ',,0,,0,432,,432,0,432,432,432,432,432,432,432,0,432,,,,0,0,0,0,,0,0', ',,,0,0,282,282,282,282,282,282,0,,0,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,440', '440,440,440,440,440,440,,,440,440,,,,,,440,440,,282,,,282,,,282,282', ',,282,,282,440,,440,282,440,440,440,440,440,440,440,282,440,,,,282,282', '282,282,,282,282,,,,282,282,52,52,52,52,52,52,282,,282,52,52,,,,52,', '52,52,52,52,52,52,52,,,,,,52,52,52,52,52,52,52,,,52,,,,,,52,52,,52,52', '52,52,52,52,52,52,52,,52,52,52,,52,52,52,52,52,439,439,439,439,439,439', '439,,,439,439,,,,,,439,439,,52,,,52,,,52,52,,,52,,52,439,,439,52,439', '439,439,439,439,439,439,52,439,,,,52,52,52,52,,52,52,,,,52,52,917,917', '917,917,917,917,52,,52,917,917,,,,917,,917,917,917,917,917,917,917,', ',,,,917,917,917,917,917,917,917,,,917,,,,,,917,917,,917,917,917,917', '917,917,917,917,917,,917,917,917,,917,917,917,917,917,441,441,441,441', '441,441,441,,,441,441,,,,,,441,441,,917,,,917,,,917,917,,,917,,917,441', ',441,917,441,441,441,441,441,441,441,917,441,,,,917,917,917,917,,917', '917,,,,917,917,558,558,558,558,558,558,917,,917,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,436,,,,,,,,,,,,,,,,436,436,,558,,,558,,,558,558,,,558,,558,436', ',436,558,436,436,436,436,,,436,558,436,,,,558,558,558,558,,558,558,', ',,558,558,277,277,277,277,277,277,558,,558,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', '445,445,445,445,445,445,445,445,,445,445,,,,,,445,445,,277,,,277,,,277', '277,,,277,,277,445,,445,277,445,445,445,445,445,445,445,277,445,,,,277', '277,277,277,,277,277,,,,277,277,624,624,624,624,624,624,277,,277,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,624,624,,624,624', '624,,624,624,624,624,624,422,422,422,422,422,422,422,422,422,422,422', ',422,422,,,422,422,,624,,,624,,,624,624,,,624,,624,422,,422,624,422', '422,422,422,422,422,422,624,422,,,,624,624,624,624,,624,624,,,,624,624', '701,701,701,701,701,701,624,,624,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,438,438', '438,438,438,438,438,,,438,438,,,,,,438,438,,701,,,701,,,701,701,,,701', ',701,438,,438,701,438,438,438,438,438,438,438,701,438,,,,701,701,701', '701,,701,701,,,,701,701,769,769,769,769,769,769,701,,701,769,769,,,', '769,,769,769,769,769,769,769,769,,,,,,769,769,769,769,769,769,769,,', '769,,,,,,769,769,,769,769,769,769,769,769,769,769,769,,769,769,769,', '769,769,769,769,769,421,421,421,421,421,421,421,421,421,421,421,,421', '421,,,421,421,,769,,,769,,,769,769,,,769,,769,421,,421,769,421,421,421', '421,421,421,421,769,421,,,,769,769,769,769,,769,769,,,,769,769,706,706', '706,706,706,706,769,,769,706,706,,,,706,,706,706,706,706,706,706,706', ',,,,,706,706,706,706,706,706,706,,,706,,,,,,706,706,,706,706,706,706', '706,706,706,706,706,,706,706,706,,706,706,706,706,706,435,,,,,,,,,,', ',,,,,435,435,,706,,,706,,,706,706,,,706,,706,435,,435,706,435,435,435', '435,,,435,706,435,,,,706,706,706,706,,706,706,,,,706,706,911,911,911', '911,911,911,706,,706,911,911,,,,911,,911,911,911,911,911,911,911,,,', ',,911,911,911,911,911,911,911,,,911,,,,,605,911,911,,911,911,911,911', '911,911,911,911,911,,911,911,911,,911,911,911,911,911,605,605,605,605', '605,605,605,605,605,605,605,,605,605,,,605,605,,911,,,911,,,911,911', ',,911,,911,605,,605,911,605,605,605,605,605,605,605,911,605,,,,911,911', '911,911,,911,911,,,,911,911,,605,405,,,,911,,911,405,405,405,,,405,405', '405,878,405,878,878,878,878,878,,,,405,405,405,405,,,,,,,,405,405,,405', '405,405,405,405,,,,,,,,,878,878,,,,,,,,878,878,878,878,,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,404,405,405,405', ',,,404,404,404,,,404,404,404,429,404,405,405,405,405,,405,,405,404,404', '404,404,,,429,429,,,,404,404,,404,404,404,404,404,,,,429,,429,,429,429', '429,429,,,,,,,,,,,,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', '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,444,444,444,444', '444,444,444,,,444,444,,,,,,444,444,,217,,,217,,,217,217,,,217,,217,444', ',444,217,444,444,444,444,444,444,444,217,444,,,,217,217,217,217,,217', '217,,,,217,217,754,754,754,754,754,754,217,,217,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,431,,,,,,,,,,,,,,,,431,431,,754,,,754,,,754,754,,,754,,754,431', ',,754,431,431,431,431,,,,754,,,,,754,754,754,754,,754,754,,,,754,754', '31,31,31,31,31,31,754,,754,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,430,,,,,,,,,,,,,,,,430,430,,31,,,31,,,31,31,,,31', ',31,430,,430,31,430,430,430,430,,,,31,,,,,31,31,31,31,,31,31,,,,31,31', '652,652,652,652,652,652,31,,31,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,798,798,798,798,798,798,652,,652,798,798', ',,,798,,798,798,798,798,798,798,798,,,,,,798,798,798,798,798,798,798', ',,798,,,,,,798,798,,798,798,798,798,798,798,798,798,798,,798,798,798', ',798,798,798,798,798,,,,,,,,,,,,,,,,,,,,798,,,798,,,798,798,,,798,,798', ',,,798,,,,,,,,798,,,,,798,798,798,798,,798,798,,,,798,798,716,716,716', '716,716,716,798,,798,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,,,,716,,,,,,,,716,,,,,716,716,716,716', ',716,716,,,,716,716,533,533,533,533,533,533,716,,716,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,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,808,808,808', '808,808,808,533,,533,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,610,610,610,610,610,610,808,,808,610,610,,,,610', ',610,610,610,610,610,610,610,,,,,,610,610,610,610,610,610,610,,,610', ',,,,,610,610,,610,610,610,610,610,610,610,610,610,,610,610,610,,610', '610,610,610,610,,,,,,,,,,,,,,,,,,,,610,,,610,,,610,610,,,610,,610,,', ',610,,,,,,,,610,,,,,610,610,610,610,,610,610,,,,610,610,623,623,623', '623,623,623,610,,610,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,,623,623,623,,623,623,623,623,623,,,,,,,,,,,,,,,,,,', ',623,,,623,,,623,623,,,623,,623,,,,623,,,,,,,,623,,,,,623,623,623,623', ',623,623,,,,623,623,802,802,802,802,802,802,623,,623,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,,202,202,202', ',202,802,,802,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', ',203,203,203,,203,202,,202,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,,203,203,203,203,203,,,,,,,,,,,,,,,,,,,,203', ',,203,,,203,203,,,203,,,,,,203,,,,,,,,203,,,,,203,203,203,203,,203,203', ',,,203,203,,204,204,204,,204,203,,203,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,,204,204,204,204,204,,,,,,,,,,', ',,,,,,,,,204,,,204,,,204,204,,,204,,,,,,204,,,,,,,,204,,,,,204,204,204', '204,,204,204,,,,204,204,,205,205,205,,205,204,,204,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,,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,773,773', '773,,773,206,,206,773,773,,,,773,,773,773,773,773,773,773,773,,,,,,773', '773,773,773,773,773,773,,,773,,,,,,,773,,,773,773,773,773,773,773,773', '773,,773,773,773,,773,773,,510,773,510,510,510,510,510,,,,,,,,,,,,,', ',773,,,773,,,773,773,,,773,,,,,,510,,,,,,,,,510,510,510,510,773,773', '773,773,,773,773,,,,773,773,,762,762,762,,762,773,,773,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,,755,755,755', ',755,762,,762,755,755,,,,755,,755,755,755,755,755,755,755,,,,,,755,755', '755,755,755,755,755,,,755,,,,,,,755,,,755,755,755,755,755,755,755,755', '755,755,755,755,,755,755,755,755,755,,,,,,,,,,,,,,,,,,,,755,,,755,,', '755,755,,,755,,755,,755,,755,,,,,,,,755,,,,,755,755,755,755,,755,755', ',,,755,755,,216,216,216,,216,755,,755,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,,219,219,219,,219,216,,216,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,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,,221,221,221', ',221,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', ',222,222,222,,222,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,,223,223,223,,223,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,,224,224,224,,224,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,,225,225,225,,225,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,,226,226,226', ',226,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', ',227,227,227,,227,226,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,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,,5,5,5,5,5,244,,244,5,5,,,,5', ',5,5,5,5,5,5,5,,,,,,5,5,5,5,5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,', '5,5,5,,5,5,5,5,5,,,,,,,,,,,,,,,,,,,,5,,,5,,,5,5,,,5,,5,,,,5,,,,,,,,5', ',,,,5,5,5,5,,5,5,,,,5,5,,743,743,743,,743,5,,5,743,743,,,,743,,743,743', '743,743,743,743,743,,,,,,743,743,743,743,743,743,743,,,743,,,,,,,743', ',,743,743,743,743,743,743,743,743,,743,743,743,,743,743,743,743,743', ',,,,,,,,,,,,,,,,,,,743,,,743,,,743,743,,,743,,,,,,743,,,,,,,,743,,,', ',743,743,743,743,,743,743,,,,743,743,,250,250,250,,250,743,,743,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,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,,259,259,259,,259,251,,251,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,741,741,741,,741,259,,259,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,,740,740,740', ',740,741,,741,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', ',739,739,739,,739,740,,740,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,,266,266,266,,266,739,,739,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,,738,738,738,,738,266,,266,738,738,,,,738,,738', '738,738,738,738,738,738,,,,,,738,738,738,738,738,738,738,,,738,,,,,', ',738,,,738,738,738,738,738,738,738,738,,738,738,738,,738,738,738,738', '738,,,,,,,,,,,,,,,,,,,,738,,,738,,,738,738,,,738,,,,,,738,,,,,,,,738', ',,,,738,738,738,738,,738,738,,,,738,738,,268,268,268,,268,738,,738,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,,270,270,270', ',270,268,,268,270,270,,,,270,,270,270,270,270,270,270,270,,,,,,270,270', '270,270,270,270,270,,,270,,,,,,,270,,,270,270,270,270,270,270,270,270', ',270,270,270,,270,270,270,270,270,,,,,,,,,,,,,,,,,,,,270,,,270,,,270', '270,,,270,,,,,,270,,,,,,,,270,,,,,270,270,270,270,,270,270,,,,270,270', ',726,726,726,,726,270,,270,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,,,726,726,,,726,,,,,,726,,,,,,,,726,,,,,726,726,726,726,,726,726', ',,,726,726,,724,724,724,,724,726,,726,724,724,,,,724,,724,724,724,724', '724,724,724,,,,,,724,724,724,724,724,724,724,,,724,,,,,,,724,,,724,724', '724,724,724,724,724,724,,724,724,724,,724,724,724,724,724,,,,,,,,,,', ',,,,,,,,,724,,,724,,,724,724,,,724,,,,,,724,,,,,,,,724,,,,,724,724,724', '724,,724,724,,,,724,724,,275,275,275,275,275,724,,724,275,275,,,,275', ',275,275,275,275,275,275,275,,,,,,275,275,275,275,275,275,275,,,275', ',,,,,275,275,,275,275,275,275,275,275,275,275,275,,275,275,275,,275', '275,275,275,275,,,,,,,,,,,,,,,,,,,,275,,,275,,,275,275,,,275,,275,,', ',275,,,,,,,,275,,,,,275,275,275,275,,275,275,,,,275,275,,471,471,471', '471,471,275,,275,471,471,,,,471,,471,471,471,471,471,471,471,,,,,,471', '471,471,471,471,471,471,,,471,,,,,390,471,471,,471,471,471,471,471,471', '471,471,471,,471,471,471,,471,471,471,471,471,390,390,390,390,390,390', '390,390,390,390,390,,390,390,,,390,390,,471,,,471,,,471,471,,,471,,471', '390,,390,471,390,390,390,390,390,390,390,471,390,,,,471,471,471,471', ',471,471,,,,471,471,,390,,,,471,471,,471,465,465,465,,465,,,,465,465', ',,,465,,465,465,465,465,465,465,465,,,,,,465,465,465,465,465,465,465', ',,465,,,,,,,465,,,465,465,465,465,465,465,465,465,465,465,465,465,,465', '465,465,465,465,,,,,,,,,,,,,,,,,,,,465,,,465,,,465,465,,,465,,,,465', ',465,,,,,,,,465,,,,,465,465,465,465,,465,465,,,,465,465,,463,463,463', ',463,465,,465,463,463,,,,463,,463,463,463,463,463,463,463,,,,,,463,463', '463,463,463,463,463,,,463,,,,,,,463,,,463,463,463,463,463,463,463,463', '463,463,463,463,,463,463,463,463,463,,,,,,,,,,,,,,,,,,,,463,,,463,,', '463,463,,,463,,463,,463,,463,,,,,,,,463,,,,,463,463,463,463,,463,463', ',,,463,463,,457,457,457,,457,463,,463,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,,897,897,897,,897,457,,457,897,897,', ',,897,,897,897,897,897,897,897,897,,,,,,897,897,897,897,897,897,897', ',,897,,,,,,,897,,,897,897,897,897,897,897,897,897,897,897,897,897,,897', '897,897,897,897,,,,,,,,,,,,,,,,,,,,897,,,897,,,897,897,,,897,,897,,897', ',897,,,,,,,,897,,,,,897,897,897,897,,897,897,,,,897,897,,895,895,895', ',895,897,,897,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,,892,892,892,,892,895,,895,892,892,,,,892,,892,892,892,892,892', '892,892,,,,,,892,892,892,892,892,892,892,,,892,,,,,,,892,,,892,892,892', '892,892,892,892,892,892,892,892,892,,892,892,892,892,892,,,,,,,,,,,', ',,,,,,,,892,,,892,,,892,892,,,892,,892,,892,,892,,,,,,,,892,,,,,892', '892,892,892,,892,892,,,,892,892,,19,19,19,,19,892,,892,19,19,,,,19,', '19,19,19,19,19,19,19,,,,,,19,19,19,19,19,19,19,,,19,,,,,,,19,,,19,19', '19,19,19,19,19,19,,19,19,19,,19,19,19,19,19,,,,,,,,,,,,,,,,,,,,19,,', '19,,,19,19,,,19,,,,,,19,,,,,,,,19,,,,,19,19,19,19,,19,19,,,,19,19,,832', '832,832,,832,19,,19,832,832,,,,832,,832,832,832,832,832,832,832,,,,', ',832,832,832,832,832,832,832,,,832,,,,,,,832,,,832,832,832,832,832,832', '832,832,,832,832,832,,832,832,,852,832,852,852,852,852,852,,,,,,,,,', ',,,,,832,,,832,,,832,832,,,832,,,,,,852,,,,,,,,,852,852,852,852,832', '832,832,832,,832,832,,,,832,832,,818,818,818,,818,832,,832,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,,27,27,27,,27,818', ',818,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,,28,28,28,,28,27,,27,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,28,28,28,28,,,,,,,,,,,,,,,,,,,,28,,,28,,,28,28,,', '28,,28,,28,,28,,,,,,,,28,,,,,28,28,28,28,,28,28,,,,28,28,,29,29,29,', '29,28,,28,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,,,,,29', '29,29,29,,29,29,,,,29,29,,32,32,32,,32,29,,29,32,32,,,,32,,32,32,32', '32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32', '32,32,32,,32,32,32,,32,32,,822,32,822,822,822,822,822,,,,,,,,,,,,,,', '32,,,32,,,32,32,,,32,,32,,,,822,,,,,,,,,822,822,822,822,32,32,32,32', ',32,32,,,,32,32,,33,33,33,,33,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,817,817,817,817,817,817,817,817,817,817,817,,817', '817,,,817,817,,33,,,33,,,33,33,,,33,,,817,,817,,817,817,817,817,817', '817,817,,817,,,,33,33,33,33,,33,33,,,,33,33,,817,,33,,,33,,33,39,39', '39,,39,,,,39,39,,,,39,,39,39,39,39,39,39,39,,,,,,39,39,39,39,39,39,39', ',,39,,,,,,,39,,,39,39,39,39,39,39,39,39,,39,39,39,,39,39,39,39,39,,', ',,,,,,,,,,,,,,,,,39,,,39,,,39,39,,,39,,,,,,39,,,,,,,,39,,,,,39,39,39', '39,,39,39,,,,39,39,,40,40,40,,40,39,,39,40,40,,,,40,,40,40,40,40,40', '40,40,,,,,,40,40,40,40,40,40,40,,,40,,,,,,,40,,,40,40,40,40,40,40,40', '40,,40,40,40,,40,40,40,40,40,,,,,,,,,,,,,,,,,,,,40,,,40,,,40,40,,,40', ',,,,,40,,,,,,,,40,,,,,40,40,40,40,,40,40,,,,40,40,,41,41,41,,41,40,', '40,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,,801,801,801,,801,41,,41,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,,53,53,53,,53,801,,801,53,53,,,,53,', '53,53,53,53,53,53,53,,,,,,53,53,53,53,53,53,53,,,53,,,,,,,53,,,53,53', '53,53,53,53,53,53,,53,53,53,,53,53,53,53,53,,,,,,,,,,,,,,,,,,,,53,,', '53,,,53,53,,,53,,,,,,53,,,,,,,,53,,,,,53,53,53,53,,53,53,,,,53,53,,54', '54,54,,54,53,,53,54,54,,,,54,,54,54,54,54,54,54,54,,,,,,54,54,54,54', '54,54,54,,,54,,,,,,,54,,,54,54,54,54,54,54,54,54,54,54,54,54,,54,54', '54,54,54,,,,,,,,,,,,,,,,,,,,54,,,54,,,54,54,,,54,,54,,,,54,,,,,,,,54', ',,,,54,54,54,54,,54,54,,,,54,54,,55,55,55,,55,54,,54,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,,58,58', '58,,58,55,,55,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,,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,,62,62,62,,62', '59,,59,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,617', '617,617,617,617,617,617,617,617,617,617,,617,617,,,617,617,,62,,617', '62,,,62,62,,,62,,,617,,617,62,617,617,617,617,617,617,617,62,617,,,', '62,62,62,62,,62,62,,,,62,62,62,617,,617,,62,62,,62,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,,820,63,820,820,820,820', '820,,,,,,,,,,,,,,,63,,,63,,,63,63,,,63,,63,,,,820,,,,,,,,,820,820,820', '820,63,63,63,63,,63,63,,,,63,63,,64,64,64,,64,63,,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,,559,64,559,559,559,559,559,,,,,,,,', ',,,64,,,64,,,64,,,64,64,,,64,,,,,,559,559,,,,,,,,559,559,559,559,64', '64,64,64,,64,64,,,,64,64,,65,65,65,,65,64,,64,65,65,,,,65,,65,65,65', '65,65,65,65,,,,,,65,65,65,65,65,65,65,,,65,,,,,,,65,,,65,65,65,65,65', '65,65,65,,65,65,65,,65,65,,707,65,707,707,707,707,707,,,,,,,,,,,,,,', '65,,,65,,,65,65,,,65,,,,,,707,,,,,,,,,707,707,707,707,65,65,65,65,,65', '65,,,,65,65,,796,796,796,,796,65,,65,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,,101,101,101,101,101,796,,796,101,101,,,,101', ',101,101,101,101,101,101,101,,,,,,101,101,101,101,101,101,101,,,101', ',,,,,101,101,101,101,101,101,101,101,101,101,101,101,,101,101,101,,101', '101,101,101,101,20,20,20,20,20,20,20,20,20,20,20,,20,20,,,20,20,,101', ',,101,,,101,101,,,101,,101,20,,20,101,20,20,20,20,20,20,20,101,20,,', ',101,101,101,101,,101,101,,,,101,101,,20,,,,101,101,,101,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,106,,107', '107,107,,107,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,,108,108,108,,108,107,,107,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,,109,109,109,,109,108,,108,109,109,,,,109,,109', '109,109,109,109,109,109,,,,,,109,109,109,109,109,109,109,,,109,,,,,', ',109,,,109,109,109,109,109,109,109,109,,109,109,109,,109,109,109,109', '109,,,,,,,,,,,,,,,,,,,,109,,,109,,,109,109,,,109,,,,,,109,,,,,,,,109', ',,,,109,109,109,109,,109,109,,,,109,109,,110,110,110,110,110,109,,109', '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,110,,,,110,110', ',196,196,196,,196,110,,110,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,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,,197,197,197,,197,196,,196,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,,198,198,198,,198,197,,197,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', '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,,281,281,281,,281,199,,199,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,495,495,495,495,495', '495,495,495,495,495,495,,495,495,,,495,495,,281,,,281,,,281,281,,,281', ',,495,,495,,495,495,495,495,495,495,495,,495,,,,281,281,281,281,,281', '281,,,,281,281,,495,,281,,,281,,281,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,,670,670,670,,670,696,', '696,670,670,,,,670,,670,670,670,670,670,670,670,,,,,,670,670,670,670', '670,670,670,,,670,,,,,,,670,,,670,670,670,670,670,670,670,670,,670,670', '670,,670,670,670,670,670,,,,,,,,,,,,,,,,,,,,670,,,670,,,670,670,,,670', ',,,,,670,,,,,,,,670,,,,,670,670,670,670,,670,670,,,,670,670,,297,297', '297,,297,670,,670,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,,665,297,665,665,665,665,665,,,,,,,,,,,,,', ',297,,,297,,,297,297,,,297,,,,,,665,,,,,,,,,665,665,665,665,297,297', '297,297,,297,297,,,,297,297,,645,645,645,,645,297,,297,645,645,,,,645', ',645,645,645,645,645,645,645,,,,,,645,645,645,645,645,645,645,,,645', ',,,,,,645,,,645,645,645,645,645,645,645,645,,645,645,645,,645,645,,663', '645,663,663,663,663,663,,,,,,,,,,,,,,,645,,,645,,,645,645,,,645,,,,', ',663,,,,,,,,,663,663,663,663,645,645,645,645,,645,645,,,,645,645,,306', '306,306,,306,645,,645,306,306,,,,306,,306,306,306,306,306,306,306,,', ',,,306,306,306,306,306,306,306,,,306,,,,,,,306,,,306,306,306,306,306', '306,306,306,,306,306,306,,306,306,306,306,306,,,,,,,,,,,,,,,,,,,,306', ',,306,306,,306,306,,,306,,,,,,306,,,,,,,,306,,,,,306,306,306,306,,306', '306,,,,306,306,,634,634,634,,634,306,,306,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,,629,629,629,,629,634,,634,629,629,,,,629,,629,629', '629,629,629,629,629,,,,,,629,629,629,629,629,629,629,,,629,,,,,,,629', ',,629,629,629,629,629,629,629,629,,629,629,629,,629,629,629,629,629', ',,,,,,,,,,,,,,,,,,,629,,,629,,,629,629,,,629,,,,,,629,,,,,,,,629,,,', ',629,629,629,629,,629,629,,,,629,629,,323,323,323,,323,629,,629,323', '323,,,,323,,323,323,323,323,323,323,323,,,,,,323,323,323,323,323,323', '323,,,323,,,,,,,323,,,323,323,323,323,323,323,323,323,,323,323,323,', '323,323,323,323,323,,,,,,,,,,,,,,,,,,,,323,,,323,,,323,323,,,323,,,', ',,323,,,,,,,,323,,,,,323,323,323,323,,323,323,,,,323,323,,324,324,324', ',324,323,,323,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', ',595,595,595,,595,324,,324,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,,594,594,594,,594,595,,595,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,,594,594,594,,594,594,594,594,594,,,,,,,,,,', ',,,,,,,,,594,,,594,,,594,594,,,594,,,,,,594,,,,,,,,594,,,,,594,594,594', '594,,594,594,,,,594,594,,590,590,590,,590,594,,594,590,590,,,,590,,590', '590,590,590,590,590,590,,,,,,590,590,590,590,590,590,590,,,590,,,,,', ',590,,,590,590,590,590,590,590,590,590,,590,590,590,,590,590,590,590', '590,,,,,,,,,,,,,,,,,,,,590,,,590,,,590,590,,,590,,,,,,590,,,,,,,,590', ',,,,590,590,590,590,,590,590,,,,590,590,,589,589,589,,589,590,,590,589', '589,,,,589,,589,589,589,589,589,589,589,,,,,,589,589,589,589,589,589', '589,,,589,,,,,,,589,,,589,589,589,589,589,589,589,589,,589,589,589,', '589,589,589,589,589,,,,,,,,,,,,,,,,,,,,589,,,589,,,589,589,,,589,,,', ',,589,,,,,,,,589,,,,,589,589,589,589,,589,589,,,,589,589,,586,586,586', ',586,589,,589,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', ',585,585,585,,585,586,,586,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,,583,583,583,,583,585,,585,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,583', '583,583,,583,583,,,,583,583,,342,342,342,,342,583,,583,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,,555,555,555,,555,342,', '342,555,555,,,,555,,555,555,555,555,555,555,555,,,,,,555,555,555,555', '555,555,555,,,555,,,,,,,555,,,555,555,555,555,555,555,555,555,,555,555', '555,,555,555,555,555,555,,,,,,,,,,,,,,,,,,,,555,,,555,,,555,555,,,555', ',,,,,555,,,,,,,,555,,,,,555,555,555,555,,555,555,,,,555,555,,552,552', '552,,552,555,,555,552,552,,,,552,,552,552,552,552,552,552,552,,,,,,552', '552,552,552,552,552,552,,,552,,,,,,,552,,,552,552,552,552,552,552,552', '552,552,552,552,552,,552,552,552,552,552,,,,,,,,,,,,,,,,,,,,552,,,552', ',,552,552,,,552,,552,,552,,552,,,,,,,,552,,,,,552,552,552,552,,552,552', ',,,552,552,,542,542,542,,542,552,,552,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,,541,541,541,,541,542,,542,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,,357,357,357', ',357,541,,541,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', ',384,384,384,,384,357,,357,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,,505,505,505,,505,384,,384,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,,502,502,502,,502,505,,505,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,,498,498,498,,498', '502,,502,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', ',496,496,496,,496,498,,498,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,,492,492,492,,492,496,,496,492,492,,,,492,,492,492,492,492', '492,492,492,,,,,,492,492,492,492,492,492,492,,,492,,,,,,,492,,,492,492', '492,492,492,492,492,492,,492,492,492,,492,492,492,492,492,,,,,,,,,,', ',,,,,,,,,492,,,492,,,492,492,,,492,,,,,,492,,,,,,,,492,,,,,492,492,492', '492,,492,492,,,,492,492,,491,491,491,,491,492,,492,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,491,491,491,,491,491,,,,491,491,,416,416,416,,416,491,,491,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,,490,490', '490,,490,416,,416,490,490,,,,490,,490,490,490,490,490,490,490,,,,,,490', '490,490,490,490,490,490,,,490,,,,,,,490,,,490,490,490,490,490,490,490', '490,,490,490,490,,490,490,490,490,490,,,,,,,,,,,,,,,,,,,,490,,,490,', ',490,490,,,490,,,,,,490,,,,,,,,490,,,,,490,490,490,490,,490,490,,,,490', '490,,418,418,418,,418,490,,490,418,418,,,,418,,418,418,418,418,418,418', '418,,,,,,418,418,418,418,418,418,418,,,418,,,,,,,418,,,418,418,418,418', '418,418,418,418,,418,418,418,,418,418,418,418,418,,,,,,,,,,,,,,,,,,', ',418,,,418,,,418,418,,,418,,,,,,418,,,,,,,,418,,,,,418,418,418,418,', '418,418,,,,418,418,,419,419,419,,419,418,,418,419,419,,,,419,,419,419', '419,419,419,419,419,,,,,,419,419,419,419,419,419,419,,,419,,,,,,,419', ',,419,419,419,419,419,419,419,419,,419,419,419,,419,419,419,419,419', ',,,,,,,,,,,,,,,,,,,419,,,419,,,419,419,,,419,,,,,,419,,,,,,,,419,,,', ',419,419,419,419,,419,419,,,,419,419,,420,420,420,,420,419,,419,420', '420,,,,420,,420,420,420,420,420,420,420,,,,,,420,420,420,420,420,420', '420,,,420,,,,,,,420,,,420,420,420,420,420,420,420,420,,420,420,420,', '420,420,420,420,420,,,,,,,,,,,,,,,,,,,,420,,,420,,,420,420,,,420,,,', ',,420,,,,,,,,420,,,,,420,420,420,420,,420,420,,,,420,420,,487,487,487', ',487,420,,420,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,,480,480', '480,,480,487,,487,480,480,,,,480,,480,480,480,480,480,480,480,,,,,,480', '480,480,480,480,480,480,,,480,,,,,,,480,,,480,480,480,480,480,480,480', '480,480,480,480,480,,480,480,480,480,480,,,,,,,,,,,,,,,,,,,,480,,,480', ',,480,480,,,480,,480,,480,,480,,,,,,,,480,,,,,480,480,480,480,,480,480', ',,,480,480,,478,478,478,,478,480,,480,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,,467,467,467,,467,478,,478,467,467,,,,467,,467,467,467', '467,467,467,467,,,,,,467,467,467,467,467,467,467,,,467,,,,,,,467,,,467', '467,467,467,467,467,467,467,,467,467,467,,467,467,467,467,467,407,407', '407,407,407,407,407,407,407,407,407,,407,407,,,407,407,,467,,,467,,', '467,467,,,467,,,407,,407,467,407,407,407,407,407,407,407,467,407,,,', '467,467,467,467,,467,467,,,,467,467,,407,395,,,,467,,467,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,395', '395,395,395,395,,,395,395,395,,,395,,395,395,,,395,395,,395,,395,,395', ',395,395,395,395,395,395,395,448,395,395,395,,,,448,448,448,,,448,448', '448,,448,395,395,,395,,395,,,,448,,,,,,,,,,448,448,,448,448,448,448', '448,,,,,,,,,,,,,,,,,,,,,,,25,,,,,,,25,25,25,,448,25,25,25,,25,,448,', ',,,448,448,25,25,25,,,,,,,,,25,25,,25,25,25,25,25,,,448,,,,,,,,,,,,', ',448,,,,,448,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,26,25,25,25,,,,26', '26,26,,,26,26,26,,26,25,25,,25,,25,,,,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,451', '26,,26,,,,451,451,451,,,451,451,451,,451,26,26,,26,,26,,,,451,,,,,,', ',,,451,451,,451,451,451,451,451,,,,,,200,200,,,200,,,,,,,,200,200,,200', '200,200,200,200,200,200,,,200,200,,,451,200,200,200,200,,,451,,,200', ',451,451,,,,,200,200,,200,200,200,200,200,200,200,200,200,200,200,,', '200,451,,,,,,,,,,,,,,451,,,,,451,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,9,,,9,9,,,,,,,,,,,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8', '8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8', ',8,8,8,8,8,8,8,,,8,8,,,,8,8,8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8', '8,8,,,8,8,,,,,,,,,,,8,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,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,581,,,581,581,,,,581,581,581', '581,,,,,,,,,,,,,,581,581,,581,581,581,581,581,581,581,581,581,581,581', ',,581,581,,,,,,,,,,,581,374,374,374,374,374,374,374,374,374,374,374', '374,374,374,374,374,374,374,374,374,374,374,374,374,,,,374,374,374,374', '374,374,374,374,374,374,,,,,,374,374,374,374,374,374,374,374,374,,,374', ',,,,,,,374,374,,374,374,374,374,374,374,374,,,374,374,,,,374,374,374', '374,,,,,,,,,,,,,,374,374,,374,374,374,374,374,374,374,374,374,374,374', ',,374,374,,,,,,,,,,,374,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,66,66,,,,,,66,,,,,,,,66,66,,66,66,66,66,66,66,66,66', '66,66,66,,,66,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,,,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,201,201', '709,,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,247,247,201,,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,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,414,414,248,,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', '415,415,414,,415,,,,,,,,415,415,,415,415,415,415,415,415,415,,,415,415', ',,,415,415,415,415,,,,,,415,,,,,,,,415,415,,415,415,415,415,415,415', '415,415,415,415,415,481,481,415,,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,482,482,481,,482,,,,,,,,482', '482,,482,482,482,482,482,482,482,,,482,482,,,,482,482,482,482,,,,,,482', ',,,,,,,482,482,,482,482,482,482,482,482,482,482,482,482,482,493,493', '482,,493,,,,,,,,493,493,,493,493,493,493,493,493,493,,,493,493,,,,493', '493,493,493,,,,,,493,,,,,,,,493,493,,493,493,493,493,493,493,493,493', '493,493,493,494,494,493,,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,543,543,494,,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,544,544,543,,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,550,550,544,,550,,,,,,,,550,550,,550,550,550,550,550,550,550,,,550', '550,,,,550,550,550,550,,,,,,550,,,,,,,,550,550,,550,550,550,550,550', '550,550,550,550,550,550,551,551,550,,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,898,898,551,,898,,,,,,', ',898,898,,898,898,898,898,898,898,898,,,898,898,,,,898,898,898,898,', ',,,,898,,,,,,,,898,898,,898,898,898,898,898,898,898,898,898,898,898', '899,899,898,,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,929,929,899,,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,446,446,446,446,446,446', '446,446,446,446,446,,446,446,,,446,446,,,,,,,,,,,,,,,446,,446,,446,446', '446,446,446,446,446,,446,,646,646,646,646,646,646,646,646,646,646,646', ',646,646,446,446,646,646,,,,,,,,,,,,,,,646,,646,,646,646,646,646,646', '646,646,,646,,722,722,722,722,722,722,722,722,722,722,722,,722,722,', '646,722,722,,,,,,,,,,,,,,,722,,722,,722,722,722,722,722,722,722,,722', ',725,725,725,725,725,725,725,725,725,725,725,,725,725,,722,725,725,', ',,,,,,,,,,,,,725,,725,,725,725,725,725,725,725,725,,725,,729,729,729', '729,729,729,729,729,729,729,729,,729,729,,725,729,729,,,,,,,,,,,,,,', '729,,729,,729,729,729,729,729,729,729,,729,,731,731,731,731,731,731', '731,731,731,731,731,,731,731,,729,731,731,,,,,,,,,,,,,,,731,,731,,731', '731,731,731,731,731,731,,731,,734,734,734,734,734,734,734,734,734,734', '734,,734,734,,731,734,734,,,,,,,,,,,,,,,734,,734,,734,734,734,734,734', '734,734,,734,,736,736,736,736,736,736,736,736,736,736,736,,736,736,', '734,736,736,,,,,,,,,,,,,,,736,,736,,736,736,736,736,736,736,736,,736', ',261,261,261,261,261,261,261,261,261,261,261,,261,261,,736,261,261,', ',,,,,,,,,,,,,261,,261,,261,261,261,261,261,261,261,,261,,819,819,819', '819,819,819,819,819,819,819,819,,819,819,,261,819,819,,,,,,,,,,,,,,', '819,,819,,819,819,819,819,819,819,819,,819,,,,,,,,,,,,,,,,,819' ] racc_action_check = arr = ::Array.new(23593, 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 = [ 1874, 366, nil, 261, nil, 9244, 1473, 1010, 21559, 21435, 970, 939, 937, 914, 1354, 305, 589, nil, -68, 12002, 14768, 792, nil, -28, 228, 21087, 21196, 12377, 12502, 12627, nil, 3744, 12752, 12877, nil, 617, 506, 678, 1, 13010, 13135, 13260, 601, 1103, nil, nil, nil, nil, nil, nil, nil, 1741, 2124, 13510, 13635, 13760, -10, nil, 13885, 14010, nil, nil, 14135, 14268, 14393, 14518, 21931, nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 603, nil, nil, 473, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 700, nil, 14768, nil, nil, nil, nil, 14901, 15026, 15151, 15276, 15401, 863, nil, 904, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 480, nil, 1238, 15526, 15651, 15776, 15901, 21303, 22103, 4869, 4994, 5119, 5244, 5369, nil, nil, 994, 143, 517, 196, 427, 406, nil, 5869, 3494, 390, 5994, 6119, 6244, 6369, 6494, 6619, 6744, 6869, 6994, 7119, 7244, 7369, 7494, 7619, 7744, 7869, 7994, 8119, 8244, 8369, 8494, 8619, 8744, 8869, 8994, 9119, nil, nil, 22163, 22223, 280, 9494, 9619, nil, nil, nil, nil, nil, nil, nil, 9744, nil, 23419, nil, 206, 190, nil, 10244, 222, 10494, nil, 10619, nil, nil, -81, 1393, 10994, 168, 2499, 111, 134, 71, 16026, 1999, 991, 868, 1296, 866, nil, 1260, 1211, 247, nil, nil, nil, 1243, 201, 1165, 16409, nil, 519, 1200, 1185, 741, nil, 1160, nil, 16659, 1218, 1204, 371, nil, 465, 508, 1103, 1072, 621, 1082, nil, nil, 567, 501, 10, 32, 17034, 17159, 380, 1125, 1024, 27, 644, 1148, 33, 1230, nil, nil, 221, 288, 225, nil, 611, nil, 28, 18159, nil, nil, 264, 290, 354, 380, 400, 121, 197, 250, 316, nil, -54, nil, 18784, nil, 239, 467, 408, 403, -43, 344, nil, nil, nil, nil, nil, nil, nil, nil, 654, 21807, nil, nil, nil, nil, 662, nil, nil, 1613, nil, 18909, 665, nil, 762, nil, nil, 11119, 818, nil, 478, 142, 20912, nil, nil, nil, 109, 218, 923, nil, nil, 3361, 3252, nil, 20784, nil, nil, nil, -5, nil, 998, 22283, 22343, 19784, 85, 20034, 20159, 20284, 2874, 2624, 530, 495, 772, 783, 790, 920, 3310, 3744, 3619, 1874, 1488, 1363, 2999, 2374, 1238, 2749, 2124, 1999, 2249, 1213, 430, 3494, 2499, 23051, 167, 21021, nil, nil, 21305, nil, nil, 999, nil, nil, 11502, 232, -70, 849, nil, nil, 11377, nil, 11252, nil, 20784, nil, nil, nil, 11119, 1348, 460, -41, nil, nil, -109, 20659, 1230, 20534, 22403, 22463, 414, 1011, nil, nil, 20409, 970, nil, 19909, 19659, 19534, 22523, 22583, 16026, 19409, 990, 19284, nil, 855, nil, 19159, nil, nil, 19034, nil, nil, nil, 20, 5507, nil, 761, 758, 750, nil, nil, nil, nil, nil, nil, -54, 825, nil, 724, nil, nil, nil, nil, 824, nil, nil, 786, 4244, 772, nil, 738, 29, 121, 719, 703, 18659, 18534, 22643, 22703, -18, nil, nil, 481, nil, 22763, 22823, 18409, nil, nil, 18284, 357, -34, 2374, 14406, nil, nil, nil, 77, nil, nil, nil, 1346, nil, nil, nil, 1180, nil, nil, 273, nil, nil, 1151, nil, nil, nil, 21683, nil, 18034, 1146, 17909, 17784, -75, 1100, 17659, 17534, 1053, nil, nil, 17409, 17284, 1044, nil, nil, nil, -40, -76, 343, 0, 1033, 3124, 1045, nil, 405, nil, 4494, nil, nil, nil, nil, 122, nil, 14135, -68, 1070, nil, 1080, nil, 4619, 2624, nil, 1078, nil, 1125, 16909, nil, nil, 683, -44, 16784, 1087, nil, 1098, 116, 75, 1142, 313, 743, 1157, 1121, 16534, 23097, 1196, 1199, 186, 1266, nil, 3869, 1148, 1191, nil, nil, nil, 249, nil, nil, nil, 1149, 16547, nil, 16422, nil, nil, 1164, 1233, 16284, nil, nil, 753, nil, 1193, 213, 1237, 1199, nil, nil, 21, nil, 1313, nil, nil, nil, nil, 1322, nil, 35, 1208, 41, 40, 150, 144, 16159, 312, 993, nil, 47, 2749, 456, nil, nil, 199, 2999, 14531, 364, 22043, nil, nil, nil, nil, nil, nil, 4119, nil, nil, nil, nil, nil, 23143, 178, 10869, 23189, 10744, nil, nil, 23235, nil, 23281, nil, nil, 23327, nil, 23373, nil, 10369, 10119, 9994, 9869, 229, 9369, 259, 269, 303, nil, 334, 321, 1128, 55, nil, 466, 3619, 5744, nil, nil, 368, 396, 509, nil, 5619, nil, 439, 172, nil, nil, nil, 2874, nil, nil, 13, 5494, nil, nil, 1113, 988, 488, 507, 509, nil, nil, 529, 539, nil, 554, nil, nil, 565, 849, 563, 974, nil, 689, nil, 14643, 693, 3994, 1613, nil, 13385, 4744, 28, 63, nil, 736, nil, 4369, nil, 743, 628, nil, nil, 652, 636, nil, 12877, 12252, 23465, 14281, nil, 12765, nil, nil, 1135, nil, 690, 676, nil, nil, nil, 12127, nil, 710, 695, nil, 699, nil, nil, nil, 702, nil, 1363, 1116, 1118, 796, 1235, nil, 749, 862, nil, 12140, nil, nil, 1039, nil, 1010, nil, 914, nil, nil, nil, 466, 596, 770, nil, 6, nil, 910, 914, nil, 234, nil, nil, 921, nil, nil, 3216, nil, 818, 820, 824, 827, nil, 845, nil, 1099, 1346, 921, nil, nil, 11877, nil, nil, 11752, 989, 11627, 22883, 22943, 351, nil, nil, 886, 887, 895, 905, 915, 606, 926, 1003, 3124, nil, nil, nil, nil, nil, 2249, nil, 1488, 1705, nil, nil, 789, nil, 760, nil, nil, nil, 23003, nil, 977, nil, 985, -7, -11, 41, 1360, nil, 663, nil, nil, nil, 878, 1008, 540, 1227, 1341, 1000, 997, 940, 919, 495, 481, nil, 12, 217, 872, nil, nil, nil, nil, 885, nil, nil, nil, nil, 972, nil ] racc_action_default = [ -3, -554, -1, -540, -4, -554, -7, -554, -554, -554, -554, -554, -554, -554, -554, -280, -39, -40, -542, -554, -45, -47, -48, -49, -255, -255, -255, -290, -325, -326, -65, -11, -69, -77, -79, -554, -469, -554, -554, -554, -554, -554, -542, -232, -273, -274, -275, -276, -277, -278, -279, -530, -11, -554, -553, -522, -298, -380, -554, -554, -303, -306, -540, -554, -554, -554, -554, -327, -328, -418, -419, -420, -421, -422, -437, -425, -426, -439, -441, -430, -435, -451, -439, -453, -454, -528, -458, -459, -529, -461, -462, -463, -464, -465, -466, -467, -468, -471, -472, -554, -2, -541, -549, -550, -551, -6, -554, -554, -554, -554, -554, -3, -15, -554, -106, -107, -108, -109, -110, -111, -112, -113, -114, -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, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -20, -115, -11, -554, -554, -554, -241, -554, -554, -554, -554, -554, -554, -542, -543, -44, -554, -469, -554, -280, -554, -554, -224, -554, -11, -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, -388, -390, -554, -554, -54, -241, -554, -297, -393, -402, -404, -60, -399, -61, -542, -62, -233, -243, -265, -265, -248, -554, -266, -554, -524, -554, -63, -64, -540, -12, -554, -67, -11, -542, -554, -70, -73, -11, -85, -554, -554, -92, -290, -293, -542, -554, -325, -326, -329, -400, -554, -75, -554, -81, -287, -455, -456, -554, -209, -210, -225, -554, -410, -554, -283, -234, -546, -546, -554, -554, -546, -554, -299, -300, -492, -46, -554, -554, -554, -554, -540, -554, -541, -469, -554, -554, -280, -554, -339, -340, -101, -102, -554, -104, -554, -280, -554, -554, -469, -318, -106, -107, -147, -148, -149, -165, -170, -177, -180, -320, -554, -520, -554, -423, -554, -554, -554, -554, -554, -554, 969, -5, -552, -21, -22, -23, -24, -25, -554, -554, -17, -18, -19, -116, -554, -27, -36, -188, -266, -554, -554, -28, -37, -38, -29, -190, -542, -242, -531, -532, -255, -397, -533, -534, -532, -531, -255, -396, -398, -533, -534, -35, -198, -41, -42, -43, -542, -296, -554, -554, -554, -241, -287, -554, -554, -554, -199, -200, -201, -202, -203, -204, -205, -206, -211, -212, -213, -214, -215, -216, -217, -218, -219, -220, -221, -222, -223, -226, -227, -228, -229, -542, -369, -255, -531, -532, -255, -52, -55, -542, -256, -257, -258, -369, -369, -542, -292, -244, -264, -245, -264, -262, -554, -267, -527, -10, -541, -14, -542, -66, -285, -82, -71, -554, -542, -241, -554, -554, -91, -554, -455, -456, -554, -78, -83, -554, -554, -554, -554, -554, -230, -554, -553, -553, -282, -542, -235, -548, -547, -237, -548, -288, -289, -523, -554, -492, -383, -519, -519, -519, -491, -493, -494, -495, -496, -497, -498, -554, -501, -554, -503, -509, -511, -512, -514, -515, -516, -554, -11, -330, -331, -11, -554, -554, -554, -554, -554, -241, -554, -554, -287, -311, -101, -102, -103, -554, -554, -241, -314, -473, -554, -554, -554, -11, -492, -322, -538, -539, -542, -424, -438, -443, -554, -445, -427, -440, -554, -442, -429, -554, -432, -434, -554, -452, -8, -16, -554, -26, -554, -272, -554, -554, -401, -554, -554, -554, -56, -240, -394, -554, -554, -58, -395, -295, -544, -531, -532, -531, -532, -542, -188, -554, -370, -374, -372, -11, -50, -391, -51, -392, -369, -238, -45, -554, -265, -254, -542, -260, -11, -11, -291, -265, -263, -268, -554, -525, -526, -13, -68, -554, -74, -80, -542, -531, -532, -239, -88, -90, -554, -76, -554, -197, -207, -208, -542, -553, -337, -11, -411, -553, -412, -413, -284, -546, -381, -384, -386, -374, -554, -484, -554, -487, -489, -554, -554, -554, -500, -341, -554, -343, -345, -352, -498, -542, -513, -517, -553, -332, -553, -304, -333, -334, -307, -554, -310, -554, -542, -531, -532, -535, -286, -554, -101, -102, -105, -542, -11, -554, -475, -316, -554, -11, -492, -554, -554, -521, -444, -447, -448, -449, -450, -11, -428, -431, -433, -436, -117, -189, -270, -554, -191, -554, -545, -31, -193, -32, -194, -57, -33, -196, -34, -195, -59, -554, -554, -554, -554, -401, -554, -519, -519, -519, -368, -554, -374, -554, -498, -507, -554, -11, -554, -251, -259, -542, -554, -554, -246, -264, -269, -72, -86, -84, -294, -9, -11, -417, -338, -554, -554, -415, -236, -11, -11, -542, -519, -519, -504, -518, -519, -519, -510, -519, -499, -505, -542, -554, -350, -554, -502, -554, -335, -554, -554, -11, -11, -309, -554, -11, -401, -554, -401, -554, -474, -11, -319, -554, -542, -477, -323, -554, -271, -30, -192, -554, -231, -359, -361, -554, -364, -366, -554, -371, -554, -375, -376, -378, -379, -554, -389, -554, -265, -250, -265, -261, -403, -405, -265, -416, -11, -93, -554, -554, -100, -414, -554, -554, -382, -554, -480, -482, -554, -485, -554, -488, -554, -490, -342, -344, -348, -554, -353, -301, -554, -302, -554, -554, -268, -553, -312, -315, -554, -321, -476, -492, -446, -519, -519, -519, -519, -508, -519, -373, -554, -506, -554, -53, -249, -264, -252, -247, -264, -410, -241, -554, -554, -99, -385, -387, -519, -519, -519, -519, -346, -554, -351, -554, -11, -305, -308, -406, -407, -408, -11, -317, -11, -554, -356, -358, -554, -362, -554, -365, -367, -377, -554, -287, -265, -409, -542, -531, -532, -535, -98, -478, -554, -481, -483, -486, -554, -349, -553, -554, -554, -519, -519, -519, -519, -286, -535, -253, -401, -519, -347, -336, -313, -324, -354, -554, -357, -360, -363, -479, -519, -355 ] clist = [ '117,117,253,257,205,354,308,24,262,262,262,311,24,321,322,312,315,325', '497,15,280,453,293,293,15,540,24,794,306,104,276,395,401,706,24,24,24', '309,24,208,310,650,320,320,101,296,320,120,120,488,15,286,286,293,293', '293,391,515,117,24,24,368,369,370,371,24,24,533,536,24,511,15,462,464', '122,122,112,194,448,451,745,630,331,340,340,381,388,785,104,100,320', '320,320,320,684,687,587,6,549,501,504,678,6,508,865,829,781,454,24,278', '831,748,2,24,24,24,24,24,24,105,15,630,799,249,256,258,746,884,768,15', '15,862,565,13,572,575,360,612,13,193,614,364,341,344,334,374,615,581', '326,620,313,610,622,385,385,627,455,627,621,260,271,272,623,624,13,778', '758,356,314,317,318,332,553,355,560,500,909,323,396,798,262,780,324', '783,1,13,696,408,409,410,411,917,701,405,808,558,559,709,6,878,749,828', '24,24,24,24,24,372,6,24,24,24,24,24,15,366,380,386,389,509,944,659,406', '373,24,884,319,797,246,776,635,262,262,777,13,447,15,458,688,644,262', '459,928,13,13,395,401,831,515,914,789,862,827,654,772,957,358,24,24', '359,361,662,362,781,574,363,24,711,253,716,779,293,257,604,785,484,276', ',537,538,,276,24,,24,489,,293,,24,,958,880,477,15,,15,515,,104,286,15', '781,,,,,320,320,742,,699,640,,471,,286,,,754,,,,,640,,557,,13,,24,24', ',,,,,637,881,,882,563,765,,,,747,719,,24,13,104,919,,,473,,,,470,479', '873,,732,24,,117,554,737,,903,,472,592,640,,,588,630,597,,,640,456,', ',764,655,,,,460,396,,,,803,262,,691,,,,,,805,279,405,13,700,13,539,', '120,,13,915,,619,,,,,24,626,,592,,756,592,,,606,,,761,802,,948,672,122', '309,580,,,515,775,836,,,,,,,627,385,,,811,396,,262,,658,24,,489,,293', ',,396,,,405,489,,293,24,,649,,,,656,,405,24,,,15,,,,591,,,286,690,,596', ',,24,,,286,,,,702,,705,,,,,,843,,,396,,262,,,,,,396,,,,262,,,405,,,320', '24,,405,24,,,,611,,24,613,,15,,,15,,,,24,,,24,685,685,24,,,632,,379', '916,,117,,,316,15,,,,,703,704,627,,715,627,672,,588,791,279,,,,24,24', ',,,24,24,,13,,,932,,728,730,,,911,733,735,515,24,592,,120,597,489,588', '293,,,,,15,24,24,,766,,293,770,,955,,774,,15,15,891,,893,122,813,721', '894,804,279,286,,806,,279,,24,810,,,,286,,13,,,13,,15,,,,,,588,,,320', ',,,,,588,,,,,13,,,,,,,,,,117,,24,,672,,672,24,,,,835,24,,,837,383,387', '841,15,,,24,,15,,,807,640,,,,24,812,15,,,,,954,,,13,,,816,,,,,867,,', '933,,13,13,,,,24,875,293,,,,,,,,,,15,,,24,,907,672,320,,,24,24,13,,466', '15,468,,469,847,,,15,15,,,,,,,24,,24,24,,,24,,,,,,24,,15,15,,,15,293', '672,,672,,15,,,685,,,,13,,14,,,13,,14,,,,,,,,13,24,340,,931,,209,,,672', ',,,15,209,209,209,,14,284,284,,,,947,,,396,,262,,,,,,,,,13,14,209,,405', ',,209,209,,,209,329,339,339,13,,24,584,,,681,13,13,683,,,,,,,24,588', ',405,,,24,,24,,,,15,13,13,,,13,15,14,15,,,13,209,209,209,209,14,14,744', ',36,,,,,36,,,,,,,,,,,,,,,,,,,,,13,,618,,,36,283,283,628,753,316,,631', ',,,,,,412,,,759,760,,,36,,,784,,,786,,,,,328,343,343,343,,,653,,,,628', ',,316,771,,,,14,209,209,209,209,,,209,209,209,209,209,,13,,,,461,,13', '36,13,14,,,,,,,36,36,383,,,,,474,,,,,,,,,,,11,,,,,11,,,209,209,,,,814', ',,,209,,,,,,,,,,,723,,,11,,14,,14,,,,284,14,,,,,,,,,,,834,11,,,284,', ',,,,,,333,,,842,36,,,,,763,849,850,,,,,,,209,209,,883,,,885,,36,,,,', ',869,870,,,872,209,11,,,,,,,,,11,11,,788,904,209,,905,,906,,,598,,,', ',,,,,,,,,,,,,,896,,,,,,,36,,36,,,,283,36,,,,,,,,,,,616,,815,,283,,625', ',,209,,,,,,,,949,,633,950,,951,,,636,,,,,11,,,,,,956,,,,,,,945,,,657', ',,946,209,,11,,,,,,,967,,,,,14,,,,,,,284,,209,,,,,,871,284,,,,,,,,,209', ',,,,,,,,,,,,,,,,,,,710,11,,11,,,,,11,,,,,,,,,14,,,14,,,,,,209,,,,,,', ',,,209,,,209,,,14,,,,,,,,,,,,,,,,757,,,628,,,871,,,,,36,,,,209,209,', '283,,209,209,,,,,,283,767,,,,,,,,14,,,,,,,,,,,,,14,14,,,,,,,793,,,284', ',,,,,,,,,,284,,36,,,36,,14,,,,,,,,,,,,,,,,,,,,36,,,,,,,,,,,,,,,,,,,', ',,,,209,,,,,14,,,,,14,,,,,838,,11,,,14,,,,,,,,36,,209,,,,,851,,,,,,36', '36,,,,861,,,,,,283,,,,,,14,,,,,283,,,,,877,,36,,,14,,,,845,,11,14,14', '11,,,,,,,,,,,,,,,,,,209,,14,14,11,,14,664,666,667,,,14,,,,,,,36,,,,', '36,,,,,,,,,,36,,888,,,,,,,,,,,14,,,,,,,,,11,,,,,,,,,,,,,11,11,,36,,', ',,,,,,,,,,,,36,,,,844,,,36,36,,,11,,,209,,,,,,,,,,,,,,14,36,36,,215', '36,14,,14,,,36,261,261,261,,,,,,,,,,303,304,305,,,,,,11,,,343,,11,,261', '261,,,,,,36,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,', ',11,,,,848,,,11,11,,,,,,36,,,,,,36,,36,,821,823,824,,,11,11,,,11,,,', ',,11,,,,,,,,,,,,,,,,,,,,853,854,,,856,858,,860,,,,,,,,11,,,,,,,382,261', '390,261,,,407,,,,,,,,,,,,,,215,,,421,422,423,424,425,426,427,428,429', '430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446', ',,,,,261,261,,,,,,11,,261,,,,11,,11,261,,261,,261,,,,,921,922,924,926', ',927,,,,,,,,,,,,,,,,,,938,940,941,942,,,,,495,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,961,963,964,965,,,,,966,,,,,,,,,,,968,,,,,,,,,,,,,,,,', ',,,,,261,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,261,,407,605,390,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,617,,,,,,261,,261,,261,,,,,,,,,,,,,261,,,,', ',,,,,646,647,648,,,,,,261,,,,261,,,261,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,261,261,,,,,,,,,,261,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,722,,261,725', ',,729,731,,,,734,736,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,261,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,261,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,261,,817,,,,,,,,,,,,729,731,736,734,,819,,,,,,,,', ',,,261,,,,,,,261,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,261,,,,,,,,,', ',,,,,,,817,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,261,,,261,,261' ] racc_goto_table = arr = ::Array.new(2630, 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 = [ '52,52,64,64,29,51,8,39,31,31,31,61,39,16,16,63,63,16,10,24,45,36,58', '58,24,87,39,85,29,90,41,34,34,91,39,39,39,27,39,18,60,11,27,27,6,46', '27,55,55,47,24,24,24,58,58,58,22,116,52,39,39,16,16,16,16,39,39,84,84', '39,125,24,66,66,56,56,14,14,34,34,113,154,24,24,24,25,25,150,90,4,27', '27,27,27,86,86,23,7,49,62,62,109,7,62,110,120,149,22,39,42,121,118,2', '39,39,39,39,39,39,5,24,154,98,35,35,35,114,151,12,24,24,107,144,20,144', '144,140,65,20,15,65,140,50,50,19,28,38,57,4,67,59,37,68,61,61,67,69', '67,71,40,40,40,37,37,20,118,72,79,80,81,83,88,89,92,93,94,110,95,64', '96,31,114,97,114,1,20,99,27,27,27,27,100,101,52,102,103,104,105,7,106', '111,119,39,39,39,39,39,7,7,39,39,39,39,39,24,5,18,18,18,122,110,123', '18,2,39,151,124,11,126,127,47,31,31,128,20,129,24,131,87,47,31,132,120', '20,20,34,34,121,116,133,109,107,118,134,135,110,138,39,39,139,141,125', '142,149,143,145,39,146,64,147,148,58,64,22,150,29,41,,16,16,,41,39,', '39,45,,58,,39,,85,113,46,24,,24,116,,90,24,24,149,,,,,27,27,23,,49,34', ',6,,24,,,37,,,,,34,,27,,20,,39,39,,,,,,22,114,,114,27,23,,,,116,144', ',39,20,90,91,,,42,,,,4,42,86,,36,39,,52,90,36,,114,,7,64,34,,,29,154', '64,,,34,40,,,47,25,,,,40,64,,,,23,31,,22,,,,,,23,9,52,20,22,20,4,,55', ',20,11,,63,,,,,39,63,,64,,66,64,,,29,,,66,84,,114,108,56,27,14,,,116', '62,67,,,,,,,67,61,,,125,64,,31,,63,39,,45,,58,,,64,,,52,45,,58,39,,27', ',,,60,,52,39,,,24,,,,35,,,24,61,,35,,,39,,,24,,,,16,,8,,,,,,84,,,64', ',31,,,,,,64,,,,31,,,52,,,27,39,,52,39,,,,35,,39,35,,24,,,24,,,,39,,', '39,90,90,39,,,7,,9,87,,52,,,26,24,,,,,90,90,67,,24,67,108,,29,108,9', ',,,39,39,,,,39,39,,20,,,10,,18,18,,,84,18,18,116,39,64,,55,64,45,29', '58,,,,,24,39,39,,45,,58,60,,23,,60,,24,24,66,,66,56,51,14,66,16,9,24', ',8,,9,,39,8,,,,24,,20,,,20,,24,,,,,,29,,,27,,,,,,29,,,,,20,,,,,,,,,', '52,,39,,108,,108,39,,,,61,39,,,63,26,26,61,24,,,39,,24,,,90,34,,,,39', '90,24,,,,,66,,,20,,,18,,,,,16,,,22,,20,20,,,,39,8,58,,,,,,,,,,24,,,39', ',108,108,27,,,39,39,20,,26,24,26,,26,24,,,24,24,,,,,,,39,,39,39,,,39', ',,,,,39,,24,24,,,24,58,108,,108,,24,,,90,,,,20,,21,,,20,,21,,,,,,,,20', '39,24,,63,,21,,,108,,,,24,21,21,21,,21,21,21,,,,8,,,64,,31,,,,,,,,,20', '21,21,,52,,,21,21,,,21,21,21,21,20,,39,26,,,9,20,20,9,,,,,,,39,29,,52', ',,39,,39,,,,24,20,20,,,20,24,21,24,,,20,21,21,21,21,21,21,112,,48,,', ',,48,,,,,,,,,,,,,,,,,,,,,20,,26,,,48,48,48,26,9,26,,26,,,,,,,43,,,9', '9,,,48,,,112,,,112,,,,,48,48,48,48,,,26,,,,26,,,26,9,,,,21,21,21,21', '21,,,21,21,21,21,21,,20,,,,43,,20,48,20,21,,,,,,,48,48,26,,,,,43,,,', ',,,,,,,17,,,,,17,,,21,21,,,,9,,,,21,,,,,,,,,,,26,,,17,,21,,21,,,,21', '21,,,,,,,,,,,9,17,,,21,,,,,,,,17,,,9,48,,,,,26,9,9,,,,,,,21,21,,112', ',,112,,48,,,,,,9,9,,,9,21,17,,,,,,,,,17,17,,26,112,21,,112,,112,,,43', ',,,,,,,,,,,,,,,,,9,,,,,,,48,,48,,,,48,48,,,,,,,,,,,43,,26,,48,,43,,', '21,,,,,,,,112,,43,112,,112,,,43,,,,,17,,,,,,112,,,,,,,9,,,43,,,9,21', ',17,,,,,,,112,,,,,21,,,,,,,21,,21,,,,,,26,21,,,,,,,,,21,,,,,,,,,,,,', ',,,,,,,43,17,,17,,,,,17,,,,,,,,,21,,,21,,,,,,21,,,,,,,,,,21,,,21,,,21', ',,,,,,,,,,,,,,,43,,,26,,,26,,,,,48,,,,21,21,,48,,21,21,,,,,,48,43,,', ',,,,,21,,,,,,,,,,,,,21,21,,,,,,,43,,,21,,,,,,,,,,,21,,48,,,48,,21,,', ',,,,,,,,,,,,,,,,,48,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,21,,,,,21,,,,,43,', '17,,,21,,,,,,,,48,,21,,,,,43,,,,,,48,48,,,,43,,,,,,48,,,,,,21,,,,,48', ',,,,43,,48,,,21,,,,21,,17,21,21,17,,,,,,,,,,,,,,,,,,21,,21,21,17,,21', '115,115,115,,,21,,,,,,,48,,,,,48,,,,,,,,,,48,,21,,,,,,,,,,,21,,,,,,', ',,17,,,,,,,,,,,,,17,17,,48,,,,,,,,,,,,,,,48,,,,48,,,48,48,,,17,,,21', ',,,,,,,,,,,,,21,48,48,,30,48,21,,21,,,48,30,30,30,,,,,,,,,,30,30,30', ',,,,,17,,,48,,17,,30,30,,,,,,48,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,17,,,,,,,,,,,,,,,17,,,,17,,,17,17,,,,,,48,,,,,,48,,48,,115,115,115', ',,17,17,,,17,,,,,,17,,,,,,,,,,,,,,,,,,,,115,115,,,115,115,,115,,,,,', ',,17,,,,,,,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,,,', ',,17,,30,,,,17,,17,30,,30,,30,,,,,115,115,115,115,,115,,,,,,,,,,,,,', ',,,,115,115,115,115,,,,,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,115,115', '115,115,,,,,115,,,,,,,,,,,115,,,,,,,,,,,,,,,,,,,,,,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' ] racc_goto_check = arr = ::Array.new(2630, 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, 112, nil, 86, 114, 41, 97, -46, 375, -289, -456, -522, nil, 68, 130, -45, 1078, 20, 81, 133, 836, -143, -295, 19, -111, 521, -16, 33, -14, 1732, -19, nil, nil, -169, 99, -228, -296, -306, 7, 132, -1, 78, 789, nil, -12, 12, -248, 950, -239, 78, -61, -8, nil, nil, 39, 66, -231, -10, 96, -14, -43, -212, -39, -22, -311, -191, -308, -305, -95, nil, -299, -456, nil, nil, nil, nil, nil, nil, 101, 113, 113, nil, 113, -254, -654, -443, -301, 108, -169, 26, -526, 107, -181, -134, 117, -505, 121, -565, -360, -682, -361, -510, -149, -158, -363, -614, -659, -85, -423, -688, -408, 340, -528, -482, 1127, -262, nil, -497, -549, -645, -640, -100, -288, 169, -249, 207, -431, -428, -10, nil, -17, -14, -623, -245, -400, nil, nil, 184, 185, 59, 182, 183, -98, -227, 185, -300, -299, -393, -557, -578, -695, nil, nil, -384 ] racc_goto_default = [ nil, nil, nil, 3, nil, 4, 327, 274, nil, 307, nil, 795, nil, 273, nil, nil, nil, 213, 17, 12, 214, 302, nil, nil, 212, nil, 267, 16, nil, 413, 20, 21, 22, 23, 643, nil, nil, nil, nil, 290, 392, 30, nil, nil, 32, 35, 34, nil, 210, 338, nil, 119, 398, 118, 121, 70, 71, nil, 43, nil, 651, 263, nil, 264, 403, 593, nil, 265, nil, nil, 251, nil, nil, 44, 45, 46, 47, 48, 49, 50, nil, 252, 56, nil, nil, nil, nil, nil, nil, nil, 534, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 674, 523, nil, 675, nil, 512, nil, 514, nil, 782, 607, nil, nil, nil, 520, nil, nil, nil, 708, nil, nil, nil, nil, 402, nil, nil, nil, nil, nil, 69, 72, 73, nil, nil, nil, nil, nil, 570, nil, nil, nil, 513, 525, 526, 752, 529, 532, 269 ] racc_reduce_table = [ 0, 0, :racc_error, 1, 138, :_reduce_none, 2, 139, :_reduce_2, 0, 140, :_reduce_3, 1, 140, :_reduce_4, 3, 140, :_reduce_5, 2, 140, :_reduce_6, 1, 142, :_reduce_none, 4, 142, :_reduce_8, 4, 145, :_reduce_9, 2, 146, :_reduce_10, 0, 150, :_reduce_11, 1, 150, :_reduce_12, 3, 150, :_reduce_13, 2, 150, :_reduce_14, 0, 165, :_reduce_15, 4, 144, :_reduce_16, 3, 144, :_reduce_17, 3, 144, :_reduce_18, 3, 144, :_reduce_19, 2, 144, :_reduce_20, 3, 144, :_reduce_21, 3, 144, :_reduce_22, 3, 144, :_reduce_23, 3, 144, :_reduce_24, 3, 144, :_reduce_25, 4, 144, :_reduce_26, 3, 144, :_reduce_27, 3, 144, :_reduce_28, 3, 144, :_reduce_29, 6, 144, :_reduce_30, 5, 144, :_reduce_31, 5, 144, :_reduce_32, 5, 144, :_reduce_33, 5, 144, :_reduce_34, 3, 144, :_reduce_35, 3, 144, :_reduce_36, 3, 144, :_reduce_37, 3, 144, :_reduce_38, 1, 144, :_reduce_none, 1, 164, :_reduce_none, 3, 164, :_reduce_41, 3, 164, :_reduce_42, 3, 164, :_reduce_43, 2, 164, :_reduce_44, 1, 164, :_reduce_none, 1, 153, :_reduce_none, 1, 155, :_reduce_none, 1, 155, :_reduce_none, 1, 169, :_reduce_none, 4, 169, :_reduce_50, 4, 169, :_reduce_51, 0, 175, :_reduce_52, 5, 173, :_reduce_53, 2, 168, :_reduce_54, 3, 168, :_reduce_55, 4, 168, :_reduce_56, 5, 168, :_reduce_57, 4, 168, :_reduce_58, 5, 168, :_reduce_59, 2, 168, :_reduce_60, 2, 168, :_reduce_61, 2, 168, :_reduce_62, 2, 168, :_reduce_63, 2, 168, :_reduce_64, 1, 156, :_reduce_65, 3, 156, :_reduce_66, 1, 179, :_reduce_67, 3, 179, :_reduce_68, 1, 178, :_reduce_none, 2, 178, :_reduce_70, 3, 178, :_reduce_71, 5, 178, :_reduce_72, 2, 178, :_reduce_73, 4, 178, :_reduce_74, 2, 178, :_reduce_75, 4, 178, :_reduce_76, 1, 178, :_reduce_77, 3, 178, :_reduce_78, 1, 182, :_reduce_none, 3, 182, :_reduce_80, 2, 181, :_reduce_81, 3, 181, :_reduce_82, 1, 184, :_reduce_83, 3, 184, :_reduce_84, 1, 183, :_reduce_85, 4, 183, :_reduce_86, 3, 183, :_reduce_87, 3, 183, :_reduce_88, 3, 183, :_reduce_89, 3, 183, :_reduce_90, 2, 183, :_reduce_91, 1, 183, :_reduce_92, 1, 154, :_reduce_93, 4, 154, :_reduce_94, 3, 154, :_reduce_95, 3, 154, :_reduce_96, 3, 154, :_reduce_97, 3, 154, :_reduce_98, 2, 154, :_reduce_99, 1, 154, :_reduce_100, 1, 186, :_reduce_101, 1, 186, :_reduce_none, 2, 187, :_reduce_103, 1, 187, :_reduce_104, 3, 187, :_reduce_105, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 191, :_reduce_111, 1, 191, :_reduce_none, 1, 151, :_reduce_none, 1, 151, :_reduce_none, 1, 152, :_reduce_115, 0, 194, :_reduce_116, 4, 152, :_reduce_117, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 3, 167, :_reduce_188, 5, 167, :_reduce_189, 3, 167, :_reduce_190, 5, 167, :_reduce_191, 6, 167, :_reduce_192, 5, 167, :_reduce_193, 5, 167, :_reduce_194, 5, 167, :_reduce_195, 5, 167, :_reduce_196, 4, 167, :_reduce_197, 3, 167, :_reduce_198, 3, 167, :_reduce_199, 3, 167, :_reduce_200, 3, 167, :_reduce_201, 3, 167, :_reduce_202, 3, 167, :_reduce_203, 3, 167, :_reduce_204, 3, 167, :_reduce_205, 3, 167, :_reduce_206, 4, 167, :_reduce_207, 4, 167, :_reduce_208, 2, 167, :_reduce_209, 2, 167, :_reduce_210, 3, 167, :_reduce_211, 3, 167, :_reduce_212, 3, 167, :_reduce_213, 3, 167, :_reduce_214, 3, 167, :_reduce_215, 3, 167, :_reduce_216, 3, 167, :_reduce_217, 3, 167, :_reduce_218, 3, 167, :_reduce_219, 3, 167, :_reduce_220, 3, 167, :_reduce_221, 3, 167, :_reduce_222, 3, 167, :_reduce_223, 2, 167, :_reduce_224, 2, 167, :_reduce_225, 3, 167, :_reduce_226, 3, 167, :_reduce_227, 3, 167, :_reduce_228, 3, 167, :_reduce_229, 3, 167, :_reduce_230, 6, 167, :_reduce_231, 1, 167, :_reduce_none, 1, 163, :_reduce_none, 1, 196, :_reduce_none, 2, 196, :_reduce_none, 4, 196, :_reduce_236, 2, 196, :_reduce_237, 3, 201, :_reduce_238, 0, 202, :_reduce_239, 1, 202, :_reduce_none, 0, 159, :_reduce_241, 1, 159, :_reduce_none, 1, 177, :_reduce_243, 2, 177, :_reduce_244, 2, 177, :_reduce_245, 4, 177, :_reduce_246, 6, 177, :_reduce_247, 1, 177, :_reduce_248, 4, 205, :_reduce_249, 3, 205, :_reduce_250, 2, 205, :_reduce_251, 4, 205, :_reduce_252, 6, 205, :_reduce_253, 1, 205, :_reduce_254, 0, 207, :_reduce_255, 2, 172, :_reduce_256, 1, 206, :_reduce_257, 0, 208, :_reduce_258, 3, 206, :_reduce_259, 0, 209, :_reduce_260, 4, 206, :_reduce_261, 2, 204, :_reduce_262, 2, 203, :_reduce_263, 1, 203, :_reduce_264, 0, 203, :_reduce_265, 1, 198, :_reduce_266, 2, 198, :_reduce_267, 3, 198, :_reduce_268, 4, 198, :_reduce_269, 3, 162, :_reduce_270, 4, 162, :_reduce_271, 2, 162, :_reduce_272, 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_281, 3, 195, :_reduce_282, 0, 231, :_reduce_283, 4, 195, :_reduce_284, 3, 195, :_reduce_285, 3, 195, :_reduce_286, 2, 195, :_reduce_287, 3, 195, :_reduce_288, 3, 195, :_reduce_289, 1, 195, :_reduce_290, 4, 195, :_reduce_291, 3, 195, :_reduce_292, 1, 195, :_reduce_293, 5, 195, :_reduce_294, 4, 195, :_reduce_295, 3, 195, :_reduce_296, 2, 195, :_reduce_297, 1, 195, :_reduce_none, 2, 195, :_reduce_299, 2, 195, :_reduce_300, 6, 195, :_reduce_301, 6, 195, :_reduce_302, 0, 232, :_reduce_303, 0, 233, :_reduce_304, 7, 195, :_reduce_305, 0, 234, :_reduce_306, 0, 235, :_reduce_307, 7, 195, :_reduce_308, 5, 195, :_reduce_309, 4, 195, :_reduce_310, 0, 236, :_reduce_311, 0, 237, :_reduce_312, 9, 195, :_reduce_313, 0, 238, :_reduce_314, 6, 195, :_reduce_315, 0, 239, :_reduce_316, 7, 195, :_reduce_317, 0, 240, :_reduce_318, 5, 195, :_reduce_319, 0, 241, :_reduce_320, 6, 195, :_reduce_321, 0, 242, :_reduce_322, 0, 243, :_reduce_323, 9, 195, :_reduce_324, 1, 195, :_reduce_325, 1, 195, :_reduce_326, 1, 195, :_reduce_327, 1, 195, :_reduce_328, 1, 158, :_reduce_none, 1, 221, :_reduce_none, 1, 221, :_reduce_none, 2, 221, :_reduce_332, 1, 223, :_reduce_none, 1, 223, :_reduce_none, 1, 222, :_reduce_none, 5, 222, :_reduce_336, 1, 148, :_reduce_none, 2, 148, :_reduce_338, 1, 225, :_reduce_none, 1, 225, :_reduce_none, 1, 244, :_reduce_none, 3, 244, :_reduce_342, 1, 247, :_reduce_343, 3, 247, :_reduce_344, 1, 246, :_reduce_none, 4, 246, :_reduce_346, 6, 246, :_reduce_347, 3, 246, :_reduce_348, 5, 246, :_reduce_349, 2, 246, :_reduce_350, 4, 246, :_reduce_351, 1, 246, :_reduce_352, 3, 246, :_reduce_353, 6, 248, :_reduce_354, 8, 248, :_reduce_355, 4, 248, :_reduce_356, 6, 248, :_reduce_357, 4, 248, :_reduce_358, 2, 248, :_reduce_none, 6, 248, :_reduce_360, 2, 248, :_reduce_361, 4, 248, :_reduce_362, 6, 248, :_reduce_363, 2, 248, :_reduce_364, 4, 248, :_reduce_365, 2, 248, :_reduce_366, 4, 248, :_reduce_367, 1, 248, :_reduce_368, 0, 174, :_reduce_369, 1, 174, :_reduce_370, 3, 254, :_reduce_371, 1, 254, :_reduce_372, 4, 254, :_reduce_373, 0, 255, :_reduce_374, 2, 255, :_reduce_375, 1, 256, :_reduce_376, 3, 256, :_reduce_377, 1, 257, :_reduce_378, 1, 257, :_reduce_none, 0, 261, :_reduce_380, 3, 220, :_reduce_381, 4, 259, :_reduce_382, 1, 259, :_reduce_383, 0, 264, :_reduce_384, 4, 260, :_reduce_385, 0, 265, :_reduce_386, 4, 260, :_reduce_387, 0, 266, :_reduce_388, 5, 263, :_reduce_389, 2, 170, :_reduce_390, 4, 170, :_reduce_391, 4, 170, :_reduce_392, 2, 219, :_reduce_393, 4, 219, :_reduce_394, 4, 219, :_reduce_395, 3, 219, :_reduce_396, 3, 219, :_reduce_397, 3, 219, :_reduce_398, 2, 219, :_reduce_399, 1, 219, :_reduce_400, 4, 219, :_reduce_401, 0, 268, :_reduce_402, 5, 218, :_reduce_403, 0, 269, :_reduce_404, 5, 218, :_reduce_405, 5, 224, :_reduce_406, 1, 270, :_reduce_407, 1, 270, :_reduce_none, 6, 147, :_reduce_409, 0, 147, :_reduce_410, 1, 271, :_reduce_411, 1, 271, :_reduce_none, 1, 271, :_reduce_none, 2, 272, :_reduce_414, 1, 272, :_reduce_none, 2, 149, :_reduce_416, 1, 149, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 210, :_reduce_none, 1, 211, :_reduce_421, 1, 274, :_reduce_422, 2, 274, :_reduce_423, 3, 275, :_reduce_424, 1, 275, :_reduce_425, 1, 275, :_reduce_426, 3, 212, :_reduce_427, 4, 213, :_reduce_428, 3, 214, :_reduce_429, 0, 279, :_reduce_430, 3, 279, :_reduce_431, 1, 280, :_reduce_432, 2, 280, :_reduce_433, 3, 215, :_reduce_434, 0, 282, :_reduce_435, 3, 282, :_reduce_436, 0, 276, :_reduce_437, 2, 276, :_reduce_438, 0, 277, :_reduce_439, 2, 277, :_reduce_440, 0, 278, :_reduce_441, 2, 278, :_reduce_442, 1, 281, :_reduce_443, 2, 281, :_reduce_444, 0, 284, :_reduce_445, 4, 281, :_reduce_446, 1, 283, :_reduce_447, 1, 283, :_reduce_448, 1, 283, :_reduce_449, 1, 283, :_reduce_none, 1, 192, :_reduce_451, 3, 193, :_reduce_452, 1, 273, :_reduce_453, 1, 273, :_reduce_454, 2, 273, :_reduce_455, 2, 273, :_reduce_456, 1, 185, :_reduce_457, 1, 185, :_reduce_458, 1, 185, :_reduce_459, 1, 185, :_reduce_460, 1, 185, :_reduce_461, 1, 185, :_reduce_462, 1, 185, :_reduce_463, 1, 185, :_reduce_464, 1, 185, :_reduce_465, 1, 185, :_reduce_466, 1, 185, :_reduce_467, 1, 185, :_reduce_468, 1, 216, :_reduce_469, 1, 157, :_reduce_470, 1, 161, :_reduce_471, 1, 161, :_reduce_472, 1, 226, :_reduce_473, 3, 226, :_reduce_474, 2, 226, :_reduce_475, 3, 228, :_reduce_476, 2, 228, :_reduce_477, 6, 262, :_reduce_478, 8, 262, :_reduce_479, 4, 262, :_reduce_480, 6, 262, :_reduce_481, 4, 262, :_reduce_482, 6, 262, :_reduce_483, 2, 262, :_reduce_484, 4, 262, :_reduce_485, 6, 262, :_reduce_486, 2, 262, :_reduce_487, 4, 262, :_reduce_488, 2, 262, :_reduce_489, 4, 262, :_reduce_490, 1, 262, :_reduce_491, 0, 262, :_reduce_492, 1, 258, :_reduce_493, 1, 258, :_reduce_494, 1, 258, :_reduce_495, 1, 258, :_reduce_496, 1, 245, :_reduce_none, 1, 245, :_reduce_498, 3, 245, :_reduce_499, 2, 245, :_reduce_500, 1, 286, :_reduce_none, 3, 286, :_reduce_502, 1, 249, :_reduce_503, 3, 249, :_reduce_504, 3, 287, :_reduce_505, 3, 288, :_reduce_506, 1, 250, :_reduce_507, 3, 250, :_reduce_508, 1, 285, :_reduce_509, 3, 285, :_reduce_510, 1, 289, :_reduce_none, 1, 289, :_reduce_none, 2, 251, :_reduce_513, 1, 251, :_reduce_514, 1, 290, :_reduce_none, 1, 290, :_reduce_none, 2, 253, :_reduce_517, 2, 252, :_reduce_518, 0, 252, :_reduce_519, 1, 229, :_reduce_none, 3, 229, :_reduce_521, 0, 217, :_reduce_522, 2, 217, :_reduce_none, 1, 200, :_reduce_524, 3, 200, :_reduce_525, 3, 291, :_reduce_526, 2, 291, :_reduce_527, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 176, :_reduce_none, 1, 171, :_reduce_none, 1, 171, :_reduce_none, 1, 171, :_reduce_none, 1, 171, :_reduce_none, 1, 267, :_reduce_none, 1, 267, :_reduce_none, 1, 267, :_reduce_none, 1, 230, :_reduce_none, 1, 230, :_reduce_none, 0, 141, :_reduce_none, 1, 141, :_reduce_none, 0, 166, :_reduce_none, 1, 166, :_reduce_none, 2, 180, :_reduce_544, 2, 160, :_reduce_545, 0, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 199, :_reduce_none, 1, 227, :_reduce_549, 1, 227, :_reduce_none, 1, 143, :_reduce_none, 2, 143, :_reduce_none, 0, 197, :_reduce_553 ] racc_reduce_n = 554 racc_shift_n = 969 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, :tUPLUS => 63, :tUMINUS => 64, :tUNARY_NUM => 65, :tPOW => 66, :tCMP => 67, :tEQ => 68, :tEQQ => 69, :tNEQ => 70, :tGEQ => 71, :tLEQ => 72, :tANDOP => 73, :tOROP => 74, :tMATCH => 75, :tNMATCH => 76, :tDOT => 77, :tDOT2 => 78, :tDOT3 => 79, :tAREF => 80, :tASET => 81, :tLSHFT => 82, :tRSHFT => 83, :tCOLON2 => 84, :tCOLON3 => 85, :tOP_ASGN => 86, :tASSOC => 87, :tLPAREN => 88, :tLPAREN2 => 89, :tRPAREN => 90, :tLPAREN_ARG => 91, :tLBRACK => 92, :tLBRACK2 => 93, :tRBRACK => 94, :tLBRACE => 95, :tLBRACE_ARG => 96, :tSTAR => 97, :tSTAR2 => 98, :tAMPER => 99, :tAMPER2 => 100, :tTILDE => 101, :tPERCENT => 102, :tDIVIDE => 103, :tPLUS => 104, :tMINUS => 105, :tLT => 106, :tGT => 107, :tPIPE => 108, :tBANG => 109, :tCARET => 110, :tLCURLY => 111, :tRCURLY => 112, :tBACK_REF2 => 113, :tSYMBEG => 114, :tSTRING_BEG => 115, :tXSTRING_BEG => 116, :tREGEXP_BEG => 117, :tREGEXP_OPT => 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, :tCHARACTER => 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", "tUPLUS", "tUMINUS", "tUNARY_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", "tREGEXP_OPT", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tCHARACTER", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "top_stmts", "opt_terms", "top_stmt", "terms", "stmt", "bodystmt", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "lhs", "command_call", "mlhs", "var_lhs", "primary_value", "opt_call_args", "rbracket", "backref", "mrhs", "arg_value", "expr", "@1", "opt_nl", "arg", "command", "block_command", "block_call", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "@2", "operation", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@3", "primary", "aref_args", "none", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "call_args2", "open_args", "@4", "@5", "@6", "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", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "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", "@20", "f_args", "do_block", "@21", "@22", "@23", "operation3", "@24", "@25", "cases", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "qword_list", "string_dvar", "@26", "f_optarg", "f_arg_item", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted # reduce 1 omitted def _reduce_2(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_3(val, _values, result) result = [] result end def _reduce_4(val, _values, result) result = [ val[0] ] result end def _reduce_5(val, _values, result) result = val[0] << val[2] result end def _reduce_6(val, _values, result) result = [ val[1] ] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = @builder.preexe(val[0], val[1], val[2], val[3]) result end def _reduce_9(val, _values, result) rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) result end def _reduce_10(val, _values, result) result = @builder.compstmt(val[0]) result end def _reduce_11(val, _values, result) result = [] result end def _reduce_12(val, _values, result) result = [ val[0] ] result end def _reduce_13(val, _values, result) result = val[0] << val[2] result end def _reduce_14(val, _values, result) result = [ val[1] ] result end def _reduce_15(val, _values, result) @lexer.state = :expr_fname result end def _reduce_16(val, _values, result) result = @builder.alias(val[0], val[1], val[3]) result end def _reduce_17(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) result end def _reduce_18(val, _values, result) result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) result end def _reduce_19(val, _values, result) diagnostic :error, :nth_ref_alias, nil, val[2] result end def _reduce_20(val, _values, result) result = @builder.undef_method(val[0], val[1]) result end def _reduce_21(val, _values, result) result = @builder.condition_mod(val[0], nil, val[1], val[2]) result end def _reduce_22(val, _values, result) result = @builder.condition_mod(nil, val[0], val[1], val[2]) result end def _reduce_23(val, _values, result) result = @builder.loop_mod(:while, val[0], val[1], val[2]) result end def _reduce_24(val, _values, result) result = @builder.loop_mod(:until, val[0], val[1], val[2]) result end def _reduce_25(val, _values, result) rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) result end def _reduce_26(val, _values, result) result = @builder.postexe(val[0], val[1], val[2], val[3]) result end def _reduce_27(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_28(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_29(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_30(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_31(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_32(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_33(val, _values, result) diagnostic :error, :const_reassignment, nil, val[3] result end def _reduce_34(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_35(val, _values, result) @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_36(val, _values, result) result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end def _reduce_37(val, _values, result) result = @builder.multi_assign(val[0], val[1], val[2]) result end def _reduce_38(val, _values, result) result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) result end # reduce 39 omitted # reduce 40 omitted def _reduce_41(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_42(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_43(val, _values, result) result = @builder.not_op(val[0], nil, val[2], nil) result end def _reduce_44(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end # reduce 45 omitted # reduce 46 omitted # reduce 47 omitted # reduce 48 omitted # reduce 49 omitted def _reduce_50(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], *val[3]) result end def _reduce_51(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], *val[3]) result end def _reduce_52(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_53(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_54(val, _values, result) result = @builder.call_method(nil, nil, val[0], *val[1]) result end def _reduce_55(val, _values, result) method_call = @builder.call_method(nil, nil, val[0], *val[1]) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_56(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], *val[3]) result end def _reduce_57(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], *val[3]) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_58(val, _values, result) result = @builder.call_method(val[0], val[1], val[2], *val[3]) result end def _reduce_59(val, _values, result) method_call = @builder.call_method(val[0], val[1], val[2], *val[3]) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) result end def _reduce_60(val, _values, result) result = @builder.keyword_cmd(:super, val[0], *val[1]) result end def _reduce_61(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], *val[1]) result end def _reduce_62(val, _values, result) result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) result end def _reduce_63(val, _values, result) result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) result end def _reduce_64(val, _values, result) result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) result end def _reduce_65(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_66(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_67(val, _values, result) result = @builder.multi_lhs(nil, val[0], nil) result end def _reduce_68(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end # reduce 69 omitted def _reduce_70(val, _values, result) result = val[0]. push(val[1]) result end def _reduce_71(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])) result end def _reduce_72(val, _values, result) result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) result end def _reduce_73(val, _values, result) result = val[0]. push(@builder.splat(val[1])) result end def _reduce_74(val, _values, result) result = val[0]. push(@builder.splat(val[1])). concat(val[3]) result end def _reduce_75(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_76(val, _values, result) result = [ @builder.splat(val[0], val[1]), *val[3] ] result end def _reduce_77(val, _values, result) result = [ @builder.splat(val[0]) ] result end def _reduce_78(val, _values, result) result = [ @builder.splat(val[0]), *val[2] ] result end # reduce 79 omitted def _reduce_80(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_81(val, _values, result) result = [ val[0] ] result end def _reduce_82(val, _values, result) result = val[0] << val[1] result end def _reduce_83(val, _values, result) result = [ val[0] ] result end def _reduce_84(val, _values, result) result = val[0] << val[2] result end def _reduce_85(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_86(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_87(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_88(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_89(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_90(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_91(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_92(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_93(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_94(val, _values, result) result = @builder.index_asgn(val[0], val[1], val[2], val[3]) result end def _reduce_95(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_96(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_97(val, _values, result) result = @builder.attr_asgn(val[0], val[1], val[2]) result end def _reduce_98(val, _values, result) result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) result end def _reduce_99(val, _values, result) result = @builder.assignable( @builder.const_global(val[0], val[1])) result end def _reduce_100(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_101(val, _values, result) diagnostic :error, :module_name_const, nil, val[0] result end # reduce 102 omitted def _reduce_103(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_104(val, _values, result) result = @builder.const(val[0]) result end def _reduce_105(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end # reduce 106 omitted # reduce 107 omitted # reduce 108 omitted # reduce 109 omitted # reduce 110 omitted def _reduce_111(val, _values, result) result = @builder.symbol(val[0]) result end # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted def _reduce_115(val, _values, result) result = [ val[0] ] result end def _reduce_116(val, _values, result) @lexer.state = :expr_fname result end def _reduce_117(val, _values, result) result = val[0] << val[3] result end # 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 # 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 def _reduce_188(val, _values, result) result = @builder.assign(val[0], val[1], val[2]) result end def _reduce_189(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) result end def _reduce_190(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_191(val, _values, result) rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) result end def _reduce_192(val, _values, result) result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) result end def _reduce_193(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_194(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_195(val, _values, result) result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) result end def _reduce_196(val, _values, result) diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] result end def _reduce_197(val, _values, result) diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] result end def _reduce_198(val, _values, result) result = @builder.op_assign(val[0], val[1], val[2]) result end def _reduce_199(val, _values, result) result = @builder.range_inclusive(val[0], val[1], val[2]) result end def _reduce_200(val, _values, result) result = @builder.range_exclusive(val[0], val[1], val[2]) result end def _reduce_201(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_202(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_203(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_204(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_205(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_206(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_207(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) result end def _reduce_208(val, _values, result) result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) result end def _reduce_209(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_210(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_211(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_212(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_213(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_214(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_215(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_216(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_217(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_218(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_219(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_220(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_221(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_222(val, _values, result) result = @builder.match_op(val[0], val[1], val[2]) result end def _reduce_223(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_224(val, _values, result) result = @builder.not_op(val[0], nil, val[1], nil) result end def _reduce_225(val, _values, result) result = @builder.unary_op(val[0], val[1]) result end def _reduce_226(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_227(val, _values, result) result = @builder.binary_op(val[0], val[1], val[2]) result end def _reduce_228(val, _values, result) result = @builder.logical_op(:and, val[0], val[1], val[2]) result end def _reduce_229(val, _values, result) result = @builder.logical_op(:or, val[0], val[1], val[2]) result end def _reduce_230(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) result end def _reduce_231(val, _values, result) result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) result end # reduce 232 omitted # reduce 233 omitted # reduce 234 omitted # reduce 235 omitted def _reduce_236(val, _values, result) result = val[0] << @builder.associate(nil, val[2], nil) result end def _reduce_237(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result end def _reduce_238(val, _values, result) result = val result end def _reduce_239(val, _values, result) result = [ nil, [], nil ] result end # reduce 240 omitted def _reduce_241(val, _values, result) result = [] result end # reduce 242 omitted def _reduce_243(val, _values, result) result = [ val[0] ] result end def _reduce_244(val, _values, result) result = val[0].concat(val[1]) result end def _reduce_245(val, _values, result) result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) result end def _reduce_246(val, _values, result) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) result end def _reduce_247(val, _values, result) val[2][-1] = @builder.objc_varargs(val[2][-1], val[4]) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[5]) result end def _reduce_248(val, _values, result) result = [ val[0] ] result end def _reduce_249(val, _values, result) result = [ val[0], *val[2].concat(val[3]) ] result end def _reduce_250(val, _values, result) result = [ val[0], val[2] ] result end def _reduce_251(val, _values, result) result = [ @builder.associate(nil, val[0], nil), *val[1] ] result end def _reduce_252(val, _values, result) result = [ val[0], @builder.associate(nil, val[2], nil), *val[3] ] result end def _reduce_253(val, _values, result) result = [ val[0], *val[2]. push(@builder.associate(nil, val[4], nil)). concat(val[5]) ] result end def _reduce_254(val, _values, result) result = [ val[0] ] result end def _reduce_255(val, _values, result) result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) result end def _reduce_256(val, _values, result) @lexer.cmdarg = val[0] result = val[1] result end def _reduce_257(val, _values, result) result = [ nil, val[0], nil ] result end def _reduce_258(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_259(val, _values, result) result = [ val[0], [], val[2] ] result end def _reduce_260(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_261(val, _values, result) result = [ val[0], val[1], val[3] ] result end def _reduce_262(val, _values, result) result = @builder.block_pass(val[0], val[1]) result end def _reduce_263(val, _values, result) result = [ val[1] ] result end def _reduce_264(val, _values, result) result = [] result end def _reduce_265(val, _values, result) result = [] result end def _reduce_266(val, _values, result) result = [ val[0] ] result end def _reduce_267(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end def _reduce_268(val, _values, result) result = val[0] << val[2] result end def _reduce_269(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_270(val, _values, result) result = val[0] << val[2] result end def _reduce_271(val, _values, result) result = val[0] << @builder.splat(val[2], val[3]) result end def _reduce_272(val, _values, result) result = [ @builder.splat(val[0], val[1]) ] result end # 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 = @builder.call_method(nil, nil, val[0]) result end def _reduce_282(val, _values, result) result = @builder.begin_keyword(val[0], val[1], val[2]) result end def _reduce_283(val, _values, result) @lexer.state = :expr_endarg result end def _reduce_284(val, _values, result) result = @builder.begin(val[0], val[1], val[3]) result end def _reduce_285(val, _values, result) result = @builder.begin(val[0], val[1], val[2]) result end def _reduce_286(val, _values, result) result = @builder.const_fetch(val[0], val[1], val[2]) result end def _reduce_287(val, _values, result) result = @builder.const_global(val[0], val[1]) result end def _reduce_288(val, _values, result) result = @builder.array(val[0], val[1], val[2]) result end def _reduce_289(val, _values, result) result = @builder.associate(val[0], val[1], val[2]) result end def _reduce_290(val, _values, result) result = @builder.keyword_cmd(:return, val[0]) result end def _reduce_291(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) result end def _reduce_292(val, _values, result) result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) result end def _reduce_293(val, _values, result) result = @builder.keyword_cmd(:yield, val[0]) result end def _reduce_294(val, _values, result) result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) result end def _reduce_295(val, _values, result) result = @builder.not_op(val[0], val[1], val[2], val[3]) result end def _reduce_296(val, _values, result) result = @builder.not_op(val[0], val[1], nil, val[2]) result end def _reduce_297(val, _values, result) method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) result end # reduce 298 omitted def _reduce_299(val, _values, result) begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) result end def _reduce_300(val, _values, result) lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) result end def _reduce_301(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) result end def _reduce_302(val, _values, result) else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) result end def _reduce_303(val, _values, result) @lexer.cond.push(true) result end def _reduce_304(val, _values, result) @lexer.cond.pop result end def _reduce_305(val, _values, result) result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) 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 = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) result end def _reduce_309(val, _values, result) *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) result end def _reduce_310(val, _values, result) *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) 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 = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) result end def _reduce_314(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:class) result end def _reduce_315(val, _values, result) unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_316(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) result end def _reduce_317(val, _values, result) result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_318(val, _values, result) @static_env.extend_static @lexer.push_cmdarg result end def _reduce_319(val, _values, result) unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend result end def _reduce_320(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:def) result end def _reduce_321(val, _values, result) result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_322(val, _values, result) @lexer.state = :expr_fname result end def _reduce_323(val, _values, result) @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) result end def _reduce_324(val, _values, result) result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop result end def _reduce_325(val, _values, result) result = @builder.keyword_cmd(:break, val[0]) result end def _reduce_326(val, _values, result) result = @builder.keyword_cmd(:next, val[0]) result end def _reduce_327(val, _values, result) result = @builder.keyword_cmd(:redo, val[0]) result end def _reduce_328(val, _values, result) result = @builder.keyword_cmd(:retry, val[0]) result end # reduce 329 omitted # reduce 330 omitted # reduce 331 omitted def _reduce_332(val, _values, result) result = val[1] result end # reduce 333 omitted # reduce 334 omitted # reduce 335 omitted def _reduce_336(val, _values, result) else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] result end # reduce 337 omitted def _reduce_338(val, _values, result) result = val result end # reduce 339 omitted # reduce 340 omitted # reduce 341 omitted def _reduce_342(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_343(val, _values, result) result = [ val[0] ] result end def _reduce_344(val, _values, result) result = val[0] << val[2] result end # reduce 345 omitted def _reduce_346(val, _values, result) result = val[0]. push(@builder.objc_restarg(val[2], val[3])) result end def _reduce_347(val, _values, result) result = val[0]. push(@builder.objc_restarg(val[2], val[3])). concat(val[5]) result end def _reduce_348(val, _values, result) result = val[0]. push(@builder.objc_restarg(val[2])) result end def _reduce_349(val, _values, result) result = val[0]. push(@builder.objc_restarg(val[2])). concat(val[4]) result end def _reduce_350(val, _values, result) result = [ @builder.objc_restarg(val[0], val[1]) ] result end def _reduce_351(val, _values, result) result = [ @builder.objc_restarg(val[0], val[1]), *val[3] ] result end def _reduce_352(val, _values, result) result = [ @builder.objc_restarg(val[0]) ] result end def _reduce_353(val, _values, result) result = [ @builder.objc_restarg(val[0]), *val[2] ] result end def _reduce_354(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_355(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_356(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_357(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_358(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end # reduce 359 omitted def _reduce_360(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_361(val, _values, result) if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end result end def _reduce_362(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_363(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_364(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_365(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_366(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_367(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_368(val, _values, result) result = [ val[0] ] result end def _reduce_369(val, _values, result) result = @builder.args(nil, [], nil) result end def _reduce_370(val, _values, result) @lexer.state = :expr_value result end def _reduce_371(val, _values, result) result = @builder.args(val[0], val[1], val[2]) result end def _reduce_372(val, _values, result) result = @builder.args(val[0], [], val[0]) result end def _reduce_373(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_374(val, _values, result) result = [] result end def _reduce_375(val, _values, result) result = val[1] result end def _reduce_376(val, _values, result) result = [ val[0] ] result end def _reduce_377(val, _values, result) result = val[0] << val[2] result end def _reduce_378(val, _values, result) @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) result end # reduce 379 omitted def _reduce_380(val, _values, result) @static_env.extend_dynamic result end def _reduce_381(val, _values, result) result = [ val[1], val[2] ] @static_env.unextend result end def _reduce_382(val, _values, result) result = @builder.args(val[0], val[1].concat(val[2]), val[3]) result end def _reduce_383(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_384(val, _values, result) @context.push(:lambda) result end def _reduce_385(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_386(val, _values, result) @context.push(:lambda) result end def _reduce_387(val, _values, result) result = [ val[0], val[2], val[3] ] @context.pop result end def _reduce_388(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_389(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_390(val, _values, result) begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) result end def _reduce_391(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_392(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_393(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) result end def _reduce_394(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_395(val, _values, result) lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) result end def _reduce_396(val, _values, result) result = @builder.call_method(val[0], val[1], val[2]) result end def _reduce_397(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_398(val, _values, result) lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) result end def _reduce_399(val, _values, result) lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) result end def _reduce_400(val, _values, result) result = @builder.keyword_cmd(:zsuper, val[0]) result end def _reduce_401(val, _values, result) result = @builder.index(val[0], val[1], val[2], val[3]) result end def _reduce_402(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_403(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_404(val, _values, result) @static_env.extend_dynamic @context.push(:block) result end def _reduce_405(val, _values, result) result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop result end def _reduce_406(val, _values, result) result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] result end def _reduce_407(val, _values, result) result = [ val[0] ] result end # reduce 408 omitted def _reduce_409(val, _values, result) assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] result end def _reduce_410(val, _values, result) result = [] result end def _reduce_411(val, _values, result) result = [ val[0] ] result end # reduce 412 omitted # reduce 413 omitted def _reduce_414(val, _values, result) result = [ val[0], val[1] ] result end # reduce 415 omitted def _reduce_416(val, _values, result) result = [ val[0], val[1] ] result end # reduce 417 omitted # reduce 418 omitted # reduce 419 omitted # reduce 420 omitted def _reduce_421(val, _values, result) result = @builder.string_compose(nil, val[0], nil) result end def _reduce_422(val, _values, result) result = [ val[0] ] result end def _reduce_423(val, _values, result) result = val[0] << val[1] result end def _reduce_424(val, _values, result) result = @builder.string_compose(val[0], val[1], val[2]) result end def _reduce_425(val, _values, result) result = @builder.string(val[0]) result end def _reduce_426(val, _values, result) result = @builder.character(val[0]) result end def _reduce_427(val, _values, result) result = @builder.xstring_compose(val[0], val[1], val[2]) result end def _reduce_428(val, _values, result) opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) result end def _reduce_429(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_430(val, _values, result) result = [] result end def _reduce_431(val, _values, result) result = val[0] << @builder.word(val[1]) result end def _reduce_432(val, _values, result) result = [ val[0] ] result end def _reduce_433(val, _values, result) result = val[0] << val[1] result end def _reduce_434(val, _values, result) result = @builder.words_compose(val[0], val[1], val[2]) result end def _reduce_435(val, _values, result) result = [] result end def _reduce_436(val, _values, result) result = val[0] << @builder.string_internal(val[1]) result end def _reduce_437(val, _values, result) result = [] result end def _reduce_438(val, _values, result) result = val[0] << val[1] result end def _reduce_439(val, _values, result) result = [] result end def _reduce_440(val, _values, result) result = val[0] << val[1] result end def _reduce_441(val, _values, result) result = [] result end def _reduce_442(val, _values, result) result = val[0] << val[1] result end def _reduce_443(val, _values, result) result = @builder.string_internal(val[0]) result end def _reduce_444(val, _values, result) result = val[1] result end def _reduce_445(val, _values, result) @lexer.cond.push(false) @lexer.cmdarg.push(false) result end def _reduce_446(val, _values, result) @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) result end def _reduce_447(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_448(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_449(val, _values, result) result = @builder.cvar(val[0]) result end # reduce 450 omitted def _reduce_451(val, _values, result) result = @builder.symbol(val[0]) result end def _reduce_452(val, _values, result) result = @builder.symbol_compose(val[0], val[1], val[2]) result end def _reduce_453(val, _values, result) result = @builder.integer(val[0]) result end def _reduce_454(val, _values, result) result = @builder.float(val[0]) result end def _reduce_455(val, _values, result) num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_456(val, _values, result) num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end result end def _reduce_457(val, _values, result) result = @builder.ident(val[0]) result end def _reduce_458(val, _values, result) result = @builder.ivar(val[0]) result end def _reduce_459(val, _values, result) result = @builder.gvar(val[0]) result end def _reduce_460(val, _values, result) result = @builder.const(val[0]) result end def _reduce_461(val, _values, result) result = @builder.cvar(val[0]) result end def _reduce_462(val, _values, result) result = @builder.nil(val[0]) result end def _reduce_463(val, _values, result) result = @builder.self(val[0]) result end def _reduce_464(val, _values, result) result = @builder.true(val[0]) result end def _reduce_465(val, _values, result) result = @builder.false(val[0]) result end def _reduce_466(val, _values, result) result = @builder.__FILE__(val[0]) result end def _reduce_467(val, _values, result) result = @builder.__LINE__(val[0]) result end def _reduce_468(val, _values, result) result = @builder.__ENCODING__(val[0]) result end def _reduce_469(val, _values, result) result = @builder.accessible(val[0]) result end def _reduce_470(val, _values, result) result = @builder.assignable(val[0]) result end def _reduce_471(val, _values, result) result = @builder.nth_ref(val[0]) result end def _reduce_472(val, _values, result) result = @builder.back_ref(val[0]) result end def _reduce_473(val, _values, result) result = nil result end def _reduce_474(val, _values, result) result = [ val[0], val[1] ] result end def _reduce_475(val, _values, result) yyerrok result = nil result end def _reduce_476(val, _values, result) result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value result end def _reduce_477(val, _values, result) result = @builder.args(nil, val[0], nil) result end def _reduce_478(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_479(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) result end def _reduce_480(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_481(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_482(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_483(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_484(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_485(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_486(val, _values, result) result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) result end def _reduce_487(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_488(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_489(val, _values, result) result = val[0]. concat(val[1]) result end def _reduce_490(val, _values, result) result = val[0]. concat(val[2]). concat(val[3]) result end def _reduce_491(val, _values, result) result = [ val[0] ] result end def _reduce_492(val, _values, result) result = [] result end def _reduce_493(val, _values, result) diagnostic :error, :argument_const, nil, val[0] result end def _reduce_494(val, _values, result) diagnostic :error, :argument_ivar, nil, val[0] result end def _reduce_495(val, _values, result) diagnostic :error, :argument_gvar, nil, val[0] result end def _reduce_496(val, _values, result) diagnostic :error, :argument_cvar, nil, val[0] result end # reduce 497 omitted def _reduce_498(val, _values, result) @static_env.declare val[0][0] result = @builder.arg(val[0]) result end def _reduce_499(val, _values, result) @static_env.declare val[2][0] result = @builder.objc_kwarg(val[0], val[1], val[2]) result end def _reduce_500(val, _values, result) @static_env.declare val[1][0] result = @builder.objc_kwarg(val[0], nil, val[1]) result end # reduce 501 omitted def _reduce_502(val, _values, result) result = @builder.multi_lhs(val[0], val[1], val[2]) result end def _reduce_503(val, _values, result) result = [ val[0] ] result end def _reduce_504(val, _values, result) result = val[0] << val[2] result end def _reduce_505(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_506(val, _values, result) @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) result end def _reduce_507(val, _values, result) result = [ val[0] ] result end def _reduce_508(val, _values, result) result = val[0] << val[2] result end def _reduce_509(val, _values, result) result = [ val[0] ] result end def _reduce_510(val, _values, result) result = val[0] << val[2] result end # reduce 511 omitted # reduce 512 omitted def _reduce_513(val, _values, result) @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] result end def _reduce_514(val, _values, result) result = [ @builder.restarg(val[0]) ] result end # reduce 515 omitted # reduce 516 omitted def _reduce_517(val, _values, result) @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) result end def _reduce_518(val, _values, result) result = [ val[1] ] result end def _reduce_519(val, _values, result) result = [] result end # reduce 520 omitted def _reduce_521(val, _values, result) result = val[1] result end def _reduce_522(val, _values, result) result = [] result end # reduce 523 omitted def _reduce_524(val, _values, result) result = [ val[0] ] result end def _reduce_525(val, _values, result) result = val[0] << val[2] result end def _reduce_526(val, _values, result) result = @builder.pair(val[0], val[1], val[2]) result end def _reduce_527(val, _values, result) result = @builder.pair_keyword(val[0], val[1]) result end # reduce 528 omitted # reduce 529 omitted # reduce 530 omitted # reduce 531 omitted # reduce 532 omitted # reduce 533 omitted # reduce 534 omitted # reduce 535 omitted # reduce 536 omitted # reduce 537 omitted # reduce 538 omitted # reduce 539 omitted # reduce 540 omitted # reduce 541 omitted # reduce 542 omitted # reduce 543 omitted def _reduce_544(val, _values, result) result = val[1] result end def _reduce_545(val, _values, result) result = val[1] result end # reduce 546 omitted # reduce 547 omitted # reduce 548 omitted def _reduce_549(val, _values, result) yyerrok result end # reduce 550 omitted # reduce 551 omitted # reduce 552 omitted def _reduce_553(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class MacRuby end # module Parser parser-2.7.0.2/lib/parser/ruby21.y0000644000004100000410000024310713617025313016574 0ustar www-datawww-dataclass Parser::Ruby21 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 tUPLUS tUMINUS tUNARY_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 tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER tRATIONAL tIMAGINARY prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { result = @builder.preexe(val[0], val[1], val[2], val[3]) } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt_or_begin { result = [ val[0] ] } | stmts terms stmt_or_begin { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt_or_begin: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { diagnostic :error, :begin_in_method, nil, val[0] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | command_asgn | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_call { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_call { @builder.op_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL mrhs_arg { result = @builder.multi_assign(val[0], val[1], val[2]) } | expr command_asgn: lhs tEQL command_call { result = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL command_asgn { result = @builder.assign(val[0], val[1], val[2]) } expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } cmd_brace_block: tLBRACE_ARG { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } fcall: operation command: fcall command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], nil, val[1], nil) } | fcall command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], nil, val[1], nil) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tDOT operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tDOT operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], nil, val[1], nil) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], nil, val[1], nil) } | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 | tDSTAR | 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 = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) } | var_lhs tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { const = @builder.const_op_assignable( @builder.const_fetch(val[0], val[1], val[2])) result = @builder.op_assign(const, val[3], val[4]) } | tCOLON3 tCONSTANT tOP_ASGN arg { const = @builder.const_op_assignable( @builder.const_global(val[0], val[1])) result = @builder.op_assign(const, val[2], val[3]) } | backref tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM simple_numeric tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( val[1], val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args | args tCOMMA | args tCOMMA assocs tCOMMA { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs tCOMMA { result = [ @builder.associate(nil, val[0], nil) ] } call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | block_arg { result = [ val[0] ] } command_args: { result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) } call_args { @lexer.cmdarg = val[0] result = val[1] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs_arg: mrhs { result = @builder.array(nil, val[0], nil) } | arg_value mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } bodystmt kEND { @lexer.cmdarg = val[1] result = @builder.begin_keyword(val[0], val[2], val[3]) } | tLPAREN_ARG { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } expr { @lexer.state = :expr_endarg } opt_nl tRPAREN { @lexer.cmdarg = val[1] result = @builder.begin(val[0], val[2], val[5]) } | tLPAREN_ARG { @lexer.state = :expr_endarg } opt_nl tRPAREN { result = @builder.begin(val[0], nil, val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | fcall brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.push_cmdarg @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.push_cmdarg } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { result = val[0]. push(@builder.restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { result = [ @builder.restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { result = [ @builder.restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.restarg(val[0]), *val[2] ] } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_block_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_block_args_tail: tCOMMA block_args_tail { result = val[1] } | # nothing { result = [] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_block_args_tail { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_block_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | block_args_tail opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: opt_nl { result = [] } | opt_nl tSEMI bv_decls opt_nl { result = val[2] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist { result = @lexer.cmdarg.dup @lexer.cmdarg.clear } lambda_body { @lexer.cmdarg = val[2] @lexer.cmdarg.lexpop result = [ val[1], val[3] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call dot_or_colon operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call dot_or_colon operation2 opt_paren_args brace_block { lparen_t, args, rparen_t = val[3] method_call = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | block_call dot_or_colon operation2 command_args do_block { method_call = @builder.call_method(val[0], val[1], val[2], nil, val[3], nil) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } method_call: fcall paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value tDOT paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } | kDO { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = @builder.string_compose(val[0], val[1], val[2]) } | tSTRING { result = @builder.string(val[0]) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = @builder.xstring_compose(val[0], val[1], val[2]) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } symbols: tSYMBOLS_BEG symbol_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } symbol_list: # nothing { result = [] } | symbol_list word tSPACE { result = val[0] << @builder.word(val[1]) } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END { result = @builder.symbols_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } qsym_list: # nothing { result = [] } | qsym_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.symbol_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cond.push(false) @lexer.cmdarg.push(false) } compstmt tSTRING_DEND { @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: simple_numeric { result = val[0] } | tUNARY_NUM simple_numeric =tLOWEST { if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], val[1]) else result = @builder.unary_num(val[0], val[1]) end } simple_numeric: tINTEGER { result = @builder.integer(val[0]) } | tFLOAT { result = @builder.float(val[0]) } | tRATIONAL { result = @builder.rational(val[0]) } | tIMAGINARY { result = @builder.complex(val[0]) } user_variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } keyword_variable: kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: user_variable { result = @builder.accessible(val[0]) } | keyword_variable { result = @builder.accessible(val[0]) } var_lhs: user_variable { result = @builder.assignable(val[0]) } | keyword_variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: term { result = nil } | tLT { @lexer.state = :expr_value } expr_value term { result = [ val[0], val[2] ] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | { result = @lexer.in_kwarg @lexer.in_kwarg = true } f_args term { @lexer.in_kwarg = val[0] result = @builder.args(nil, val[1], nil) } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = val[0].concat(val[2]).concat(val[3]) } | f_kwarg opt_f_block_arg { result = val[0].concat(val[1]) } | f_kwrest opt_f_block_arg { result = val[0].concat(val[1]) } | f_block_arg { result = [ val[0] ] } opt_args_tail: tCOMMA args_tail { result = val[1] } | # nothing { result = [] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_args_tail { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_args_tail { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_args_tail { result = val[0]. concat(val[2]). concat(val[3]) } | args_tail { result = val[0] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] result = val[0] } f_arg_item: f_norm_arg { result = @builder.arg(val[0]) } | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_label: tLABEL { check_kwarg_name(val[0]) @static_env.declare val[0][0] result = val[0] } f_kw: f_label arg_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kw: f_label primary_value { result = @builder.kwoptarg(val[0], val[1]) } | f_label { result = @builder.kwarg(val[0]) } f_block_kwarg: f_block_kw { result = [ val[0] ] } | f_block_kwarg tCOMMA f_block_kw { result = val[0] << val[2] } f_kwarg: f_kw { result = [ val[0] ] } | f_kwarg tCOMMA f_kw { result = val[0] << val[2] } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.kwrestarg(val[0], val[1]) ] } | kwrest_mark { result = [ @builder.kwrestarg(val[0]) ] } f_opt: f_norm_arg tEQL arg_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: f_norm_arg tEQL primary_value { result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } | tDSTAR arg_value { result = @builder.kwsplat(val[0], val[1]) } 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 { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 21 end def default_encoding Encoding::UTF_8 end parser-2.7.0.2/lib/parser/macruby.y0000644000004100000410000023177513617025313017122 0ustar www-datawww-dataclass Parser::MacRuby 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 tUPLUS tUMINUS tUNARY_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 tREGEXP_OPT tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER prechigh right tBANG tTILDE tUPLUS right tPOW right tUNARY_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: top_compstmt top_compstmt: top_stmts opt_terms { result = @builder.compstmt(val[0]) } top_stmts: # nothing { result = [] } | top_stmt { result = [ val[0] ] } | top_stmts terms top_stmt { result = val[0] << val[2] } | error top_stmt { result = [ val[1] ] } top_stmt: stmt | klBEGIN tLCURLY top_compstmt tRCURLY { result = @builder.preexe(val[0], val[1], val[2], val[3]) } bodystmt: compstmt opt_rescue opt_else opt_ensure { rescue_bodies = val[1] else_t, else_ = val[2] ensure_t, ensure_ = val[3] if rescue_bodies.empty? && !else_t.nil? diagnostic :warning, :useless_else, nil, else_t end result = @builder.begin_body(val[0], rescue_bodies, else_t, else_, ensure_t, ensure_) } compstmt: stmts opt_terms { result = @builder.compstmt(val[0]) } stmts: # nothing { result = [] } | stmt { result = [ val[0] ] } | stmts terms stmt { result = val[0] << val[2] } | error stmt { result = [ val[1] ] } stmt: kALIAS fitem { @lexer.state = :expr_fname } fitem { result = @builder.alias(val[0], val[1], val[3]) } | kALIAS tGVAR tGVAR { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.gvar(val[2])) } | kALIAS tGVAR tBACK_REF { result = @builder.alias(val[0], @builder.gvar(val[1]), @builder.back_ref(val[2])) } | kALIAS tGVAR tNTH_REF { diagnostic :error, :nth_ref_alias, nil, val[2] } | kUNDEF undef_list { result = @builder.undef_method(val[0], val[1]) } | stmt kIF_MOD expr_value { result = @builder.condition_mod(val[0], nil, val[1], val[2]) } | stmt kUNLESS_MOD expr_value { result = @builder.condition_mod(nil, val[0], val[1], val[2]) } | stmt kWHILE_MOD expr_value { result = @builder.loop_mod(:while, val[0], val[1], val[2]) } | stmt kUNTIL_MOD expr_value { result = @builder.loop_mod(:until, val[0], val[1], val[2]) } | stmt kRESCUE_MOD stmt { rescue_body = @builder.rescue_body(val[1], nil, nil, nil, nil, val[2]) result = @builder.begin_body(val[0], [ rescue_body ]) } | klEND tLCURLY compstmt tRCURLY { result = @builder.postexe(val[0], val[1], val[2], val[3]) } | lhs tEQL command_call { result = @builder.assign(val[0], val[1], val[2]) } | mlhs tEQL command_call { result = @builder.multi_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN command_call { result = @builder.op_assign(val[0], val[1], val[2]) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { diagnostic :error, :const_reassignment, nil, val[3] } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | backref tOP_ASGN command_call { @builder.op_assign(val[0], val[1], val[2]) } | lhs tEQL mrhs { result = @builder.assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | mlhs tEQL arg_value { result = @builder.multi_assign(val[0], val[1], val[2]) } | mlhs tEQL mrhs { result = @builder.multi_assign(val[0], val[1], @builder.array(nil, val[2], nil)) } | expr expr: command_call | expr kAND expr { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | expr kOR expr { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kNOT opt_nl expr { result = @builder.not_op(val[0], nil, val[2], nil) } | tBANG command_call { result = @builder.not_op(val[0], nil, val[1], nil) } | arg expr_value: expr command_call: command | block_command block_command: block_call | block_call tDOT operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], *val[3]) } | block_call tCOLON2 operation2 command_args { result = @builder.call_method(val[0], val[1], val[2], *val[3]) } cmd_brace_block: tLBRACE_ARG { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } command: operation command_args =tLOWEST { result = @builder.call_method(nil, nil, val[0], *val[1]) } | operation command_args cmd_brace_block { method_call = @builder.call_method(nil, nil, val[0], *val[1]) begin_t, args, body, end_t = val[2] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tDOT operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], *val[3]) } | primary_value tDOT operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], *val[3]) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = @builder.call_method(val[0], val[1], val[2], *val[3]) } | primary_value tCOLON2 operation2 command_args cmd_brace_block { method_call = @builder.call_method(val[0], val[1], val[2], *val[3]) begin_t, args, body, end_t = val[4] result = @builder.block(method_call, begin_t, args, body, end_t) } | kSUPER command_args { result = @builder.keyword_cmd(:super, val[0], *val[1]) } | kYIELD command_args { result = @builder.keyword_cmd(:yield, val[0], *val[1]) } | kRETURN call_args { result = @builder.keyword_cmd(:return, val[0], nil, val[1], nil) } | kBREAK call_args { result = @builder.keyword_cmd(:break, val[0], nil, val[1], nil) } | kNEXT call_args { result = @builder.keyword_cmd(:next, val[0], nil, val[1], nil) } mlhs: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_inner: mlhs_basic { result = @builder.multi_lhs(nil, val[0], nil) } | tLPAREN mlhs_inner rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } mlhs_basic: mlhs_head | mlhs_head mlhs_item { result = val[0]. push(val[1]) } | mlhs_head tSTAR mlhs_node { result = val[0]. push(@builder.splat(val[1], val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1], val[2])). concat(val[4]) } | mlhs_head tSTAR { result = val[0]. push(@builder.splat(val[1])) } | mlhs_head tSTAR tCOMMA mlhs_post { result = val[0]. push(@builder.splat(val[1])). concat(val[3]) } | tSTAR mlhs_node { result = [ @builder.splat(val[0], val[1]) ] } | tSTAR mlhs_node tCOMMA mlhs_post { result = [ @builder.splat(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.splat(val[0]) ] } | tSTAR tCOMMA mlhs_post { result = [ @builder.splat(val[0]), *val[2] ] } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = @builder.begin(val[0], val[1], val[2]) } mlhs_head: mlhs_item tCOMMA { result = [ val[0] ] } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1] } mlhs_post: mlhs_item { result = [ val[0] ] } | mlhs_post tCOMMA mlhs_item { result = val[0] << val[2] } mlhs_node: variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } lhs: variable { result = @builder.assignable(val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index_asgn(val[0], val[1], val[2], val[3]) } | primary_value tDOT tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tIDENTIFIER { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tDOT tCONSTANT { result = @builder.attr_asgn(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.assignable( @builder.const_fetch(val[0], val[1], val[2])) } | tCOLON3 tCONSTANT { result = @builder.assignable( @builder.const_global(val[0], val[1])) } | backref { result = @builder.assignable(val[0]) } cname: tIDENTIFIER { diagnostic :error, :module_name_const, nil, val[0] } | tCONSTANT cpath: tCOLON3 cname { result = @builder.const_global(val[0], val[1]) } | cname { result = @builder.const(val[0]) } | primary_value tCOLON2 cname { result = @builder.const_fetch(val[0], val[1], val[2]) } fname: tIDENTIFIER | tCONSTANT | tFID | op | reswords fsym: fname { result = @builder.symbol(val[0]) } | symbol fitem: fsym | dsym undef_list: fitem { result = [ val[0] ] } | undef_list tCOMMA { @lexer.state = :expr_fname } fitem { result = 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 = @builder.assign(val[0], val[1], val[2]) } | lhs tEQL arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.assign(val[0], val[1], rescue_) } | var_lhs tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { rescue_body = @builder.rescue_body(val[3], nil, nil, nil, nil, val[4]) rescue_ = @builder.begin_body(val[2], [ rescue_body ]) result = @builder.op_assign(val[0], val[1], rescue_) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { result = @builder.op_assign( @builder.index( val[0], val[1], val[2], val[3]), val[4], val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = @builder.op_assign( @builder.call_method( val[0], val[1], val[2]), val[3], val[4]) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] } | tCOLON3 tCONSTANT tOP_ASGN arg { diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] } | backref tOP_ASGN arg { result = @builder.op_assign(val[0], val[1], val[2]) } | arg tDOT2 arg { result = @builder.range_inclusive(val[0], val[1], val[2]) } | arg tDOT3 arg { result = @builder.range_exclusive(val[0], val[1], val[2]) } | arg tPLUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMINUS arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tSTAR2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tDIVIDE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPERCENT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tPOW arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tUNARY_NUM tINTEGER tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.integer(val[1]), val[2], val[3])) } | tUNARY_NUM tFLOAT tPOW arg { result = @builder.unary_op(val[0], @builder.binary_op( @builder.float(val[1]), val[2], val[3])) } | tUPLUS arg { result = @builder.unary_op(val[0], val[1]) } | tUMINUS arg { result = @builder.unary_op(val[0], val[1]) } | arg tPIPE arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCARET arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tAMPER2 arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tCMP arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tGEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tLEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tEQQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tNEQ arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tMATCH arg { result = @builder.match_op(val[0], val[1], val[2]) } | arg tNMATCH arg { result = @builder.binary_op(val[0], val[1], val[2]) } | tBANG arg { result = @builder.not_op(val[0], nil, val[1], nil) } | tTILDE arg { result = @builder.unary_op(val[0], val[1]) } | arg tLSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tRSHFT arg { result = @builder.binary_op(val[0], val[1], val[2]) } | arg tANDOP arg { result = @builder.logical_op(:and, val[0], val[1], val[2]) } | arg tOROP arg { result = @builder.logical_op(:or, val[0], val[1], val[2]) } | kDEFINED opt_nl arg { result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) } | arg tEH arg opt_nl tCOLON arg { result = @builder.ternary(val[0], val[1], val[2], val[4], val[5]) } | primary arg_value: arg aref_args: none | args trailer | args tCOMMA assocs trailer { result = val[0] << @builder.associate(nil, val[2], nil) } | assocs trailer { result = [ @builder.associate(nil, val[0], nil) ] } paren_args: tLPAREN2 opt_call_args rparen { result = val } opt_paren_args: # nothing { result = [ nil, [], nil ] } | paren_args opt_call_args: # nothing { result = [] } | call_args call_args: command { result = [ val[0] ] } | args opt_block_arg { result = val[0].concat(val[1]) } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil) ] result.concat(val[1]) } | args tCOMMA assocs opt_block_arg { assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[3]) } | args tCOMMA assocs tCOMMA args opt_block_arg { val[2][-1] = @builder.objc_varargs(val[2][-1], val[4]) assocs = @builder.associate(nil, val[2], nil) result = val[0] << assocs result.concat(val[5]) } | block_arg { result = [ val[0] ] } call_args2: arg_value tCOMMA args opt_block_arg { result = [ val[0], *val[2].concat(val[3]) ] } | arg_value tCOMMA block_arg { result = [ val[0], val[2] ] } | assocs opt_block_arg { result = [ @builder.associate(nil, val[0], nil), *val[1] ] } | arg_value tCOMMA assocs opt_block_arg { result = [ val[0], @builder.associate(nil, val[2], nil), *val[3] ] } | arg_value tCOMMA args tCOMMA assocs opt_block_arg { result = [ val[0], *val[2]. push(@builder.associate(nil, val[4], nil)). concat(val[5]) ] } | block_arg { result = [ val[0] ] } command_args: { result = @lexer.cmdarg.dup @lexer.cmdarg.push(true) } open_args { @lexer.cmdarg = val[0] result = val[1] } open_args: call_args { result = [ nil, val[0], nil ] } | tLPAREN_ARG { @lexer.state = :expr_endarg } rparen { result = [ val[0], [], val[2] ] } | tLPAREN_ARG call_args2 { @lexer.state = :expr_endarg } rparen { result = [ val[0], val[1], val[3] ] } block_arg: tAMPER arg_value { result = @builder.block_pass(val[0], val[1]) } opt_block_arg: tCOMMA block_arg { result = [ val[1] ] } | tCOMMA { result = [] } | # nothing { result = [] } args: arg_value { result = [ val[0] ] } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } | args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = val[0] << @builder.splat(val[2], val[3]) } | tSTAR arg_value { result = [ @builder.splat(val[0], val[1]) ] } primary: literal | strings | xstring | regexp | words | qwords | var_ref | backref | tFID { result = @builder.call_method(nil, nil, val[0]) } | kBEGIN bodystmt kEND { result = @builder.begin_keyword(val[0], val[1], val[2]) } | tLPAREN_ARG expr { @lexer.state = :expr_endarg } rparen { result = @builder.begin(val[0], val[1], val[3]) } | tLPAREN compstmt tRPAREN { result = @builder.begin(val[0], val[1], val[2]) } | primary_value tCOLON2 tCONSTANT { result = @builder.const_fetch(val[0], val[1], val[2]) } | tCOLON3 tCONSTANT { result = @builder.const_global(val[0], val[1]) } | tLBRACK aref_args tRBRACK { result = @builder.array(val[0], val[1], val[2]) } | tLBRACE assoc_list tRCURLY { result = @builder.associate(val[0], val[1], val[2]) } | kRETURN { result = @builder.keyword_cmd(:return, val[0]) } | kYIELD tLPAREN2 call_args rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) } | kYIELD tLPAREN2 rparen { result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) } | kYIELD { result = @builder.keyword_cmd(:yield, val[0]) } | kDEFINED opt_nl tLPAREN2 expr rparen { result = @builder.keyword_cmd(:defined?, val[0], val[2], [ val[3] ], val[4]) } | kNOT tLPAREN2 expr rparen { result = @builder.not_op(val[0], val[1], val[2], val[3]) } | kNOT tLPAREN2 rparen { result = @builder.not_op(val[0], val[1], nil, val[2]) } | operation brace_block { method_call = @builder.call_method(nil, nil, val[0]) begin_t, args, body, end_t = val[1] result = @builder.block(method_call, begin_t, args, body, end_t) } | method_call | method_call brace_block { begin_t, args, body, end_t = val[1] result = @builder.block(val[0], begin_t, args, body, end_t) } | tLAMBDA lambda { lambda_call = @builder.call_lambda(val[0]) args, (begin_t, body, end_t) = val[1] result = @builder.block(lambda_call, begin_t, args, body, end_t) } | kIF expr_value then compstmt if_tail kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, val[5]) } | kUNLESS expr_value then compstmt opt_else kEND { else_t, else_ = val[4] result = @builder.condition(val[0], val[1], val[2], else_, else_t, val[3], val[5]) } | kWHILE { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:while, val[0], val[2], val[3], val[5], val[6]) } | kUNTIL { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.loop(:until, val[0], val[2], val[3], val[5], val[6]) } | kCASE expr_value opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[3] result = @builder.case(val[0], val[1], when_bodies, else_t, else_body, val[4]) } | kCASE opt_terms case_body kEND { *when_bodies, (else_t, else_body) = *val[2] result = @builder.case(val[0], nil, when_bodies, else_t, else_body, val[3]) } | kFOR for_var kIN { @lexer.cond.push(true) } expr_value do { @lexer.cond.pop } compstmt kEND { result = @builder.for(val[0], val[1], val[2], val[4], val[5], val[7], val[8]) } | kCLASS cpath superclass { @static_env.extend_static @lexer.push_cmdarg @context.push(:class) } bodystmt kEND { unless @context.class_definition_allowed? diagnostic :error, :class_in_def, nil, val[0] end lt_t, superclass = val[2] result = @builder.def_class(val[0], val[1], lt_t, superclass, val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kCLASS tLSHFT expr term { @static_env.extend_static @lexer.push_cmdarg @context.push(:sclass) } bodystmt kEND { result = @builder.def_sclass(val[0], val[1], val[2], val[5], val[6]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kMODULE cpath { @static_env.extend_static @lexer.push_cmdarg } bodystmt kEND { unless @context.module_definition_allowed? diagnostic :error, :module_in_def, nil, val[0] end result = @builder.def_module(val[0], val[1], val[3], val[4]) @lexer.pop_cmdarg @static_env.unextend } | kDEF fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:def) } f_arglist bodystmt kEND { result = @builder.def_method(val[0], val[1], val[3], val[4], val[5]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kDEF singleton dot_or_colon { @lexer.state = :expr_fname } fname { @static_env.extend_static @lexer.push_cmdarg @context.push(:defs) } f_arglist bodystmt kEND { result = @builder.def_singleton(val[0], val[1], val[2], val[4], val[6], val[7], val[8]) @lexer.pop_cmdarg @static_env.unextend @context.pop } | kBREAK { result = @builder.keyword_cmd(:break, val[0]) } | kNEXT { result = @builder.keyword_cmd(:next, val[0]) } | kREDO { result = @builder.keyword_cmd(:redo, val[0]) } | kRETRY { result = @builder.keyword_cmd(:retry, val[0]) } primary_value: primary then: term | kTHEN | term kTHEN { result = val[1] } do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { else_t, else_ = val[4] result = [ val[0], @builder.condition(val[0], val[1], val[2], val[3], else_t, else_, nil), ] } opt_else: none | kELSE compstmt { result = val } for_var: lhs | mlhs f_marg: f_norm_arg | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_marg_list: f_marg { result = [ val[0] ] } | f_marg_list tCOMMA f_marg { result = val[0] << val[2] } f_margs: f_marg_list | f_marg_list tCOMMA tSTAR f_norm_arg { result = val[0]. push(@builder.objc_restarg(val[2], val[3])) } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { result = val[0]. push(@builder.objc_restarg(val[2], val[3])). concat(val[5]) } | f_marg_list tCOMMA tSTAR { result = val[0]. push(@builder.objc_restarg(val[2])) } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { result = val[0]. push(@builder.objc_restarg(val[2])). concat(val[4]) } | tSTAR f_norm_arg { result = [ @builder.objc_restarg(val[0], val[1]) ] } | tSTAR f_norm_arg tCOMMA f_marg_list { result = [ @builder.objc_restarg(val[0], val[1]), *val[3] ] } | tSTAR { result = [ @builder.objc_restarg(val[0]) ] } | tSTAR tCOMMA f_marg_list { result = [ @builder.objc_restarg(val[0]), *val[2] ] } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_block_optarg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_f_block_arg { if val[1].empty? && val[0].size == 1 result = [@builder.procarg0(val[0][0])] else result = val[0].concat(val[1]) end } | f_block_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_block_optarg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_block_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_arg { result = [ val[0] ] } opt_block_param: # nothing { result = @builder.args(nil, [], nil) } | block_param_def { @lexer.state = :expr_value } block_param_def: tPIPE opt_bv_decl tPIPE { result = @builder.args(val[0], val[1], val[2]) } | tOROP { result = @builder.args(val[0], [], val[0]) } | tPIPE block_param opt_bv_decl tPIPE { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } opt_bv_decl: # nothing { result = [] } | tSEMI bv_decls { result = val[1] } bv_decls: bvar { result = [ val[0] ] } | bv_decls tCOMMA bvar { result = val[0] << val[2] } bvar: tIDENTIFIER { @static_env.declare val[0][0] result = @builder.shadowarg(val[0]) } | f_bad_arg lambda: { @static_env.extend_dynamic } f_larglist lambda_body { result = [ val[1], val[2] ] @static_env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = @builder.args(val[0], val[1].concat(val[2]), val[3]) } | f_args { result = @builder.args(nil, val[0], nil) } lambda_body: tLAMBEG { @context.push(:lambda) } compstmt tRCURLY { result = [ val[0], val[2], val[3] ] @context.pop } | kDO_LAMBDA { @context.push(:lambda) } compstmt kEND { result = [ val[0], val[2], val[3] ] @context.pop } do_block: kDO_BLOCK { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } block_call: command do_block { begin_t, block_args, body, end_t = val[1] result = @builder.block(val[0], begin_t, block_args, body, end_t) } | block_call tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | block_call tCOLON2 operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } method_call: operation paren_args { lparen_t, args, rparen_t = val[1] result = @builder.call_method(nil, nil, val[0], lparen_t, args, rparen_t) } | primary_value tDOT operation2 opt_paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation2 paren_args { lparen_t, args, rparen_t = val[3] result = @builder.call_method(val[0], val[1], val[2], lparen_t, args, rparen_t) } | primary_value tCOLON2 operation3 { result = @builder.call_method(val[0], val[1], val[2]) } | primary_value tDOT paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | primary_value tCOLON2 paren_args { lparen_t, args, rparen_t = val[2] result = @builder.call_method(val[0], val[1], nil, lparen_t, args, rparen_t) } | kSUPER paren_args { lparen_t, args, rparen_t = val[1] result = @builder.keyword_cmd(:super, val[0], lparen_t, args, rparen_t) } | kSUPER { result = @builder.keyword_cmd(:zsuper, val[0]) } | primary_value tLBRACK2 opt_call_args rbracket { result = @builder.index(val[0], val[1], val[2], val[3]) } brace_block: tLCURLY { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt tRCURLY { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } | kDO { @static_env.extend_dynamic @context.push(:block) } opt_block_param compstmt kEND { result = [ val[0], val[2], val[3], val[4] ] @static_env.unextend @context.pop } case_body: kWHEN args then compstmt cases { result = [ @builder.when(val[0], val[1], val[2], val[3]), *val[4] ] } cases: opt_else { result = [ val[0] ] } | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { assoc_t, exc_var = val[2] if val[1] exc_list = @builder.array(nil, val[1], nil) end result = [ @builder.rescue_body(val[0], exc_list, assoc_t, exc_var, val[3], val[4]), *val[5] ] } | { result = [] } exc_list: arg_value { result = [ val[0] ] } | mrhs | none exc_var: tASSOC lhs { result = [ val[0], val[1] ] } | none opt_ensure: kENSURE compstmt { result = [ val[0], val[1] ] } | none literal: numeric | symbol | dsym strings: string { result = @builder.string_compose(nil, val[0], nil) } string: string1 { result = [ val[0] ] } | string string1 { result = val[0] << val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = @builder.string_compose(val[0], val[1], val[2]) } | tSTRING { result = @builder.string(val[0]) } | tCHARACTER { result = @builder.character(val[0]) } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = @builder.xstring_compose(val[0], val[1], val[2]) } regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT { opts = @builder.regexp_options(val[3]) result = @builder.regexp_compose(val[0], val[1], val[2], opts) } words: tWORDS_BEG word_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } word_list: # nothing { result = [] } | word_list word tSPACE { result = val[0] << @builder.word(val[1]) } word: string_content { result = [ val[0] ] } | word string_content { result = val[0] << val[1] } qwords: tQWORDS_BEG qword_list tSTRING_END { result = @builder.words_compose(val[0], val[1], val[2]) } qword_list: # nothing { result = [] } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << @builder.string_internal(val[1]) } string_contents: # nothing { result = [] } | string_contents string_content { result = val[0] << val[1] } xstring_contents: # nothing { result = [] } | xstring_contents string_content { result = val[0] << val[1] } regexp_contents: # nothing { result = [] } | regexp_contents string_content { result = val[0] << val[1] } string_content: tSTRING_CONTENT { result = @builder.string_internal(val[0]) } | tSTRING_DVAR string_dvar { result = val[1] } | tSTRING_DBEG { @lexer.cond.push(false) @lexer.cmdarg.push(false) } compstmt tRCURLY { @lexer.cond.lexpop @lexer.cmdarg.lexpop result = @builder.begin(val[0], val[2], val[3]) } string_dvar: tGVAR { result = @builder.gvar(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | backref symbol: tSYMBOL { result = @builder.symbol(val[0]) } dsym: tSYMBEG xstring_contents tSTRING_END { result = @builder.symbol_compose(val[0], val[1], val[2]) } numeric: tINTEGER { result = @builder.integer(val[0]) } | tFLOAT { result = @builder.float(val[0]) } | tUNARY_NUM tINTEGER =tLOWEST { num = @builder.integer(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } | tUNARY_NUM tFLOAT =tLOWEST { num = @builder.float(val[1]) if @builder.respond_to? :negate # AST builder interface compatibility result = @builder.negate(val[0], num) else result = @builder.unary_num(val[0], num) end } variable: tIDENTIFIER { result = @builder.ident(val[0]) } | tIVAR { result = @builder.ivar(val[0]) } | tGVAR { result = @builder.gvar(val[0]) } | tCONSTANT { result = @builder.const(val[0]) } | tCVAR { result = @builder.cvar(val[0]) } | kNIL { result = @builder.nil(val[0]) } | kSELF { result = @builder.self(val[0]) } | kTRUE { result = @builder.true(val[0]) } | kFALSE { result = @builder.false(val[0]) } | k__FILE__ { result = @builder.__FILE__(val[0]) } | k__LINE__ { result = @builder.__LINE__(val[0]) } | k__ENCODING__ { result = @builder.__ENCODING__(val[0]) } var_ref: variable { result = @builder.accessible(val[0]) } var_lhs: variable { result = @builder.assignable(val[0]) } backref: tNTH_REF { result = @builder.nth_ref(val[0]) } | tBACK_REF { result = @builder.back_ref(val[0]) } superclass: term { result = nil } | tLT expr_value term { result = [ val[0], val[1] ] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args rparen { result = @builder.args(val[0], val[1], val[2]) @lexer.state = :expr_value } | f_args term { result = @builder.args(nil, val[0], nil) } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[6]). concat(val[7]) } | f_arg tCOMMA f_optarg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[4]). concat(val[5]) } | f_optarg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_optarg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_rest_arg opt_f_block_arg { result = val[0]. concat(val[1]) } | f_rest_arg tCOMMA f_arg opt_f_block_arg { result = val[0]. concat(val[2]). concat(val[3]) } | f_block_arg { result = [ val[0] ] } | # nothing { result = [] } f_bad_arg: tCONSTANT { diagnostic :error, :argument_const, nil, val[0] } | tIVAR { diagnostic :error, :argument_ivar, nil, val[0] } | tGVAR { diagnostic :error, :argument_gvar, nil, val[0] } | tCVAR { diagnostic :error, :argument_cvar, nil, val[0] } f_norm_arg: f_bad_arg | tIDENTIFIER { @static_env.declare val[0][0] result = @builder.arg(val[0]) } | tIDENTIFIER tASSOC tIDENTIFIER { @static_env.declare val[2][0] result = @builder.objc_kwarg(val[0], val[1], val[2]) } | tLABEL tIDENTIFIER { @static_env.declare val[1][0] result = @builder.objc_kwarg(val[0], nil, val[1]) } f_arg_item: f_norm_arg | tLPAREN f_margs rparen { result = @builder.multi_lhs(val[0], val[1], val[2]) } f_arg: f_arg_item { result = [ val[0] ] } | f_arg tCOMMA f_arg_item { result = val[0] << val[2] } f_opt: tIDENTIFIER tEQL arg_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_block_opt: tIDENTIFIER tEQL primary_value { @static_env.declare val[0][0] result = @builder.optarg(val[0], val[1], val[2]) } f_block_optarg: f_block_opt { result = [ val[0] ] } | f_block_optarg tCOMMA f_block_opt { result = val[0] << val[2] } f_optarg: f_opt { result = [ val[0] ] } | f_optarg tCOMMA f_opt { result = val[0] << val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = [ @builder.restarg(val[0], val[1]) ] } | restarg_mark { result = [ @builder.restarg(val[0]) ] } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { @static_env.declare val[1][0] result = @builder.blockarg(val[0], val[1]) } opt_f_block_arg: tCOMMA f_block_arg { result = [ val[1] ] } | # nothing { result = [] } singleton: var_ref | tLPAREN2 expr rparen { result = val[1] } assoc_list: # nothing { result = [] } | assocs trailer assocs: assoc { result = [ val[0] ] } | assocs tCOMMA assoc { result = val[0] << val[2] } assoc: arg_value tASSOC arg_value { result = @builder.pair(val[0], val[1], val[2]) } | tLABEL arg_value { result = @builder.pair_keyword(val[0], val[1]) } 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 { result = val[1] } rbracket: opt_nl tRBRACK { result = val[1] } trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI none: # nothing { result = nil } end ---- header require 'parser' ---- inner def version 19 # closest released match: v1_9_0_2 end def default_encoding Encoding::BINARY end parser-2.7.0.2/lib/parser/syntax_error.rb0000644000004100000410000000067313617025313020341 0ustar www-datawww-data# frozen_string_literal: true module Parser ## # {Parser::SyntaxError} is raised whenever parser detects a syntax error, # similar to the standard SyntaxError class. # # @api public # # @!attribute [r] diagnostic # @return [Parser::Diagnostic] # class SyntaxError < StandardError attr_reader :diagnostic def initialize(diagnostic) @diagnostic = diagnostic super(diagnostic.message) end end end parser-2.7.0.2/lib/parser/meta.rb0000644000004100000410000000272513617025313016530 0ustar www-datawww-data# frozen_string_literal: true module Parser # Parser metadata module Meta # All node types that parser can produce. Not all parser versions # will be able to produce every possible node. NODE_TYPES = %w( true false nil int float str dstr sym dsym xstr regopt regexp array splat pair kwsplat hash irange erange self lvar ivar cvar gvar const defined? lvasgn ivasgn cvasgn gvasgn casgn mlhs masgn op_asgn and_asgn ensure rescue arg_expr or_asgn back_ref nth_ref match_with_lvasgn match_current_line module class sclass def defs undef alias args cbase arg optarg restarg blockarg block_pass kwarg kwoptarg kwrestarg kwnilarg send csend super zsuper yield block and not or if when case while until while_post until_post for break next redo return resbody kwbegin begin retry preexe postexe iflipflop eflipflop shadowarg complex rational __FILE__ __LINE__ __ENCODING__ ident root lambda indexasgn index procarg0 restarg_expr blockarg_expr objc_kwarg objc_restarg objc_varargs numargs numblock forward_args forwarded_args case_match in_match in_pattern match_var pin match_alt match_as match_rest array_pattern match_with_trailing_comma array_pattern_with_tail hash_pattern const_pattern if_guard unless_guard match_nil_pattern ).map(&:to_sym).to_set.freeze end # Meta end # Parser parser-2.7.0.2/lib/gauntlet_parser.rb0000644000004100000410000000506713617025313017507 0ustar www-datawww-data# frozen_string_literal: true require 'gauntlet' require 'parser/all' require 'shellwords' class ParserGauntlet < Gauntlet RUBY20 = 'ruby' RUBY19 = 'ruby1.9.1' RUBY18 = '/opt/rubies/ruby-1.8.7-p370/bin/ruby' def try(parser, ruby, file, show_ok: false) try_ruby = lambda do |e| Process.spawn(%{#{ruby} -c #{Shellwords.escape file}}, :err => '/dev/null', :out => '/dev/null') _, status = Process.wait2 if status.success? # Bug in Parser. puts "Parser bug." @result[file] = { parser.to_s => "#{e.class}: #{e.to_s}" } else # No, this file is not Ruby. yield if block_given? end end begin parser.parse_file(file) rescue Parser::SyntaxError => e if e.diagnostic.location.resize(2).is?('<%') puts "ERb." return end try_ruby.call(e) rescue ArgumentError, RegexpError, Encoding::UndefinedConversionError => e puts "#{file}: #{e.class}: #{e.to_s}" try_ruby.call(e) rescue Interrupt raise rescue Exception => e puts "Parser bug: #{file} #{e.class}: #{e.to_s}" @result[file] = { parser.to_s => "#{e.class}: #{e.to_s}" } else puts "Ok." if show_ok end end def parse(name) puts "GEM: #{name}" @result = {} if ENV.include?('FAST') total_size = Dir["**/*.rb"].map(&File.method(:size)).reduce(:+) if total_size > 300_000 puts "Skip." return end end Dir["**/*.rb"].each do |file| next if File.directory? file try(Parser::Ruby20, RUBY20, file) do puts "Trying 1.9:" try(Parser::Ruby19, RUBY19, file, show_ok: true) do puts "Trying 1.8:" try(Parser::Ruby18, RUBY18, file, show_ok: true) do puts "Invalid syntax." end end end end @result end def run(name) data[name] = parse(name) self.dirty = true end def should_skip?(name) data[name] == {} end def load_yaml(*) data = super @was_errors = data.count { |_name, errs| errs != {} } data end def shutdown super errors = data.count { |_name, errs| errs != {} } total = data.count percent = "%.5f" % [100 - errors.to_f / total * 100] puts "!!! was: #{@was_errors} now: #{errors} total: #{total} frac: #{percent}%" end end filter = ARGV.shift filter = Regexp.new filter if filter gauntlet = ParserGauntlet.new if ENV.include? 'UPDATE' gauntlet.source_index gauntlet.update_gem_tarballs end gauntlet.run_the_gauntlet filter parser-2.7.0.2/lib/parser.rb0000644000004100000410000000413713617025313015601 0ustar www-datawww-data# frozen_string_literal: true if RUBY_VERSION =~ /^1\.[89]\./ require 'parser/version' raise LoadError, <<-UNSUPPORTED_VERSION_MSG parser v#{Parser::VERSION} cannot run on Ruby #{RUBY_VERSION}. Please upgrade to Ruby 2.0.0 or higher, or use an older version of the parser gem. UNSUPPORTED_VERSION_MSG end require 'set' require 'racc/parser' require 'ast' ## # @api public # module Parser require 'parser/version' require 'parser/messages' require 'parser/deprecation' module AST require 'parser/ast/node' require 'parser/ast/processor' require 'parser/meta' end module Source require 'parser/source/buffer' require 'parser/source/range' require 'parser/source/comment' require 'parser/source/comment/associator' require 'parser/source/rewriter' require 'parser/source/rewriter/action' require 'parser/source/tree_rewriter' require 'parser/source/tree_rewriter/action' require 'parser/source/map' require 'parser/source/map/operator' require 'parser/source/map/collection' require 'parser/source/map/constant' require 'parser/source/map/variable' require 'parser/source/map/keyword' require 'parser/source/map/definition' require 'parser/source/map/send' require 'parser/source/map/index' require 'parser/source/map/condition' require 'parser/source/map/ternary' require 'parser/source/map/for' require 'parser/source/map/rescue_body' require 'parser/source/map/heredoc' require 'parser/source/map/objc_kwarg' end require 'parser/syntax_error' require 'parser/clobbering_error' require 'parser/diagnostic' require 'parser/diagnostic/engine' require 'parser/static_environment' require 'parser/lexer' require 'parser/lexer/literal' require 'parser/lexer/stack_state' require 'parser/lexer/dedenter' module Builders require 'parser/builders/default' end require 'parser/context' require 'parser/max_numparam_stack' require 'parser/current_arg_stack' require 'parser/variables_stack' require 'parser/base' require 'parser/rewriter' require 'parser/tree_rewriter' end parser-2.7.0.2/CONTRIBUTING.md0000644000004100000410000000176513617025313015447 0ustar www-datawww-dataContributing to Parser ---------------------- Parser employs a script to extract information from VCS (git) log and form a Changelog file. Thus, each commit which affects the public API in any way must be marked with one of the following sigils, or characters at the beginning of line: * `-` for bugfixes. For example: `- lexer.rl: fixed lexing of "alias $foo $bar".` * `+` for features. For example: `+ Implemented Parser::Rewriter, a module for non-intrusive rewriting of source code.` * `*` for miscellaneous changes. For example: `* Converted measurement units from metric to imperial.` Versioning ---------- Parser is versioned as follows: * The version starts with the most recent Ruby version that Parser supports (which should be also the most recent released Ruby version). * After that, a `.x` is appended, where `x` is incremented for every change. No breaking changes to API will be ever made, except for changes that correct behavior which did not match documentation or Ruby MRI behavior. parser-2.7.0.2/.yardopts0000644000004100000410000000075613617025313015063 0ustar www-datawww-data./lib/parser/**/*.rb ./lib/parser.rb -m markdown -M kramdown -o ./yardoc -r ./README.md --asset ./doc/css/common.css:css/common.css --verbose --api public --exclude lib/parser/lexer.rb --exclude lib/parser/ruby18.rb --exclude lib/parser/ruby19.rb --exclude lib/parser/ruby20.rb --exclude lib/parser/ruby21.rb --exclude lib/parser/ruby22.rb --exclude lib/parser/ruby23.rb --exclude lib/parser/ruby24.rb --exclude lib/parser/macruby.rb --exclude lib/parser/rubymotion.rb - ./doc/*.md LICENSE.txt parser-2.7.0.2/doc/0000755000004100000410000000000013617025313013752 5ustar www-datawww-dataparser-2.7.0.2/doc/css/0000755000004100000410000000000013617025313014542 5ustar www-datawww-dataparser-2.7.0.2/doc/css/common.css0000644000004100000410000000211113617025313016537 0ustar www-datawww-databody { font-size: 14px; line-height: 1.6; margin: 0 auto; max-width: 960px; } p code { background: #f2f2f2; padding-left: 3px; padding-right: 3px; } pre.code { font-size: 13px; line-height: 1.4; } /** * YARD uses generic table styles, using a special class means those tables * don't get messed up. */ .table { border: 1px solid #ccc; border-right: none; border-collapse: separate; border-spacing: 0; text-align: left; } .table.full { width: 100%; } .table .field_name { min-width: 160px; } .table thead tr th.no_sort:first-child { width: 25px; } .table thead tr th, .table tbody tr td { border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; min-width: 20px; padding: 8px 5px; text-align: left; vertical-align: top; } .table tbody tr:last-child td { border-bottom: none; } .table tr:nth-child(odd) td { background: #f9f9f9; } parser-2.7.0.2/doc/css/.gitkeep0000644000004100000410000000000013617025313016161 0ustar www-datawww-dataparser-2.7.0.2/doc/AST_FORMAT.md0000644000004100000410000007310013617025313015774 0ustar www-datawww-dataAST and Source Location ======================= ## Literals ### Singletons Format: ~~~ (true) "true" ~~~~ expression (false) "false" ~~~~~ expression (nil) "nil" ~~~ expression ~~~ ### Integer Format: ~~~ (int 123) "123" ~~~ expression (int -123) "-123" ^ operator ~~~ expression (int 1) "__LINE__" ~~~~~~~~ expression ~~~ ### Float Format: ~~~ (float 1.0) "1.0" ~~~ expression (float -1.0) "-1.0" ^ operator ~~~~ expression ~~~ ### Complex Format: ~~~ (complex (0+1i)) "1i" ~~ expression (complex (0+(1/1)*i)) "1ri" ~~~ expression ~~~ ### Rational Format: ~~~ (rational (2/1)) "2.0r" ~~~~ expression ~~~ ### String #### Plain Format: ~~~ (str "foo") "'foo'" ^ begin ^ end ~~~~~ expresion (string "foo.rb") "__FILE__" ~~~~~~~~ expression ~~~ #### With interpolation Format: ~~~ (dstr (str "foo") (begin (lvar bar)) (str "baz")) '"foo#{bar}baz"' ^ begin ^ end ~~~~~~~~~~~~~~ expression ^^ begin (begin) ^ end (begin) ^^^^^^ expression (begin) ~~~ #### Here document Format: ~~~ (str "foo\nbar\n") '< 2" ~~ operator ~~~~~~ expression ~~~ ##### With label (1.9) Format: ~~~ (pair (sym :answer) (int 42)) "answer: 42" ^ operator (pair) ~~~~~~ expression (sym) ~~~~~~~~~~ expression (pair) ~~~ #### Plain Format: ~~~ (hash (pair (int 1) (int 2)) (pair (int 3) (int 4))) "{1 => 2, 3 => 4}" ^ begin ^ end ~~~~~~~~~~~~~~~~ expression ~~~ #### Keyword splat (2.0) Can also be used in argument lists: `foo(bar, **baz)` Format: ~~~ (kwsplat (lvar :foo)) "**foo" ~~ operator ~~~~~ expression ~~~ #### With interpolation (2.0) Format: ~~~ (hash (pair (sym :foo) (int 2)) (kwsplat (lvar :bar))) "{ foo: 2, **bar }" ^ begin ^ end ~~~~~~~~~~~~~~~~~ expression ~~~ ### Range #### Inclusive Format: ~~~ (irange (int 1) (int 2)) "1..2" ~~ operator ~~~~ expression ~~~ #### Exclusive Format: ~~~ (erange (int 1) (int 2)) "1...2" ~~~ operator ~~~~~ expression ~~~ ### Endless (2.6) Format: ~~~ (irange (int 1) nil) "1.." ~~ operator ~~~ expression (erange (int 1) nil) "1..." ~~~ operator ~~~~ expression ~~~ ### Beginless (2.7) Format: ~~~ (irange nil (int 1)) "..1" ~~ operator ~~~ expression (erange nil (int 1)) "...1" ~~~ operator ~~~~ expression ~~~ ## Access ### Self Format: ~~~ (self) "self" ~~~~ expression ~~~ ### Local variable Format: ~~~ (lvar :foo) "foo" ~~~ expression ~~~ ### Instance variable Format: ~~~ (ivar :@foo) "@foo" ~~~~ expression ~~~ ### Class variable Format: ~~~ (cvar :@@foo) "@@foo" ~~~~~ expression ~~~ ### Global variable #### Regular global variable Format: ~~~ (gvar :$foo) "$foo" ~~~~ expression ~~~ #### Regular expression capture groups Format: ~~~ (nth-ref 1) "$1" ~~ expression ~~~ #### Regular expression back-references Format: ~~~ (back-ref :$&) "$&" ~~ expression (back-ref :$`) "$`" (back-ref :$') "$'" (back-ref :$+) "$+" ~~~ ### Constant #### Top-level constant Format: ~~~ (const (cbase) :Foo) "::Foo" ~~~ name ~~ double_colon ~~~~~ expression ~~~ #### Scoped constant Format: ~~~ (const (lvar :a) :Foo) "a::Foo" ~~~ name ~~ double_colon ~~~~~~ expression ~~~ #### Unscoped constant Format: ~~~ (const nil :Foo) "Foo" ~~~ name ~~~ expression ~~~ ### defined? Format: ~~~ (defined? (lvar :a)) "defined? a" ~~~~~~~~ keyword ~~~~~~~~~~ expression "defined?(a)" ~~~~~~~~ keyword ^ begin ^ end ~~~~~~~~~~~ expression ~~~ ## Assignment ### To local variable Format: ~~~ (lvasgn :foo (lvar :bar)) "foo = bar" ^ operator ~~~~~~~~~ expression ~~~ ### To instance variable Format: ~~~ (ivasgn :@foo (lvar :bar)) "@foo = bar" ^ operator ~~~~~~~~~~ expression ~~~ ### To class variable Format: ~~~ (cvasgn :@@foo (lvar :bar)) "@@foo = bar" ^ operator ~~~~~~~~~~~ expression ~~~ ### To global variable Format: ~~~ (gvasgn :$foo (lvar :bar)) "$foo = bar" ^ operator ~~~~~~~~~~ expression ~~~ ### To constant #### Top-level constant Format: ~~~ (casgn (cbase) :Foo (int 1)) "::Foo = 1" ~~~ name ~ operator ~~~~~~~ expression ~~~ #### Scoped constant Format: ~~~ (casgn (lvar :a) :Foo (int 1)) "a::Foo = 1" ~~~ name ~ operator ~~~~~~~~ expression ~~~ #### Unscoped constant Format: ~~~ (casgn nil :Foo (int 1)) "Foo = 1" ~~~ name ~ operator ~~~~~~~ expression ~~~ ### To attribute Format: ~~~ (send (self) :foo= (int 1)) "self.foo = 1" ^ dot ~~~ selector ^ operator ~~~~~~~~~~~~ expression ~~~ ### To attribute, using "safe navigation operator" Format: ~~~ (csend (self) :foo= (int 1)) "self&.foo = 1" ^^ dot ~~~ selector ^ operator ~~~~~~~~~~~~~ expression ~~~ ### Multiple assignment #### Multiple left hand side Format: ~~~ (mlhs (lvasgn :a) (lvasgn :b)) "a, b" ~~~~ expression "(a, b)" ^ begin ^ end ~~~~~~ expression ~~~ #### Assignment Rule of thumb: every node inside `(mlhs)` is "incomplete"; to make it "complete", one could imagine that a corresponding node from the mrhs is "appended" to the node in question. This applies both to side-effect free assignments (`lvasgn`, etc) and side-effectful assignments (`send`). Format: ~~~ (masgn (mlhs (lvasgn :foo) (lvasgn :bar)) (array (int 1) (int 2))) "foo, bar = 1, 2" ^ operator ~~~~~~~~~~~~~~~ expression (masgn (mlhs (ivasgn :@a) (cvasgn :@@b)) (array (splat (lvar :c)))) "@a, @@b = *c" (masgn (mlhs (mlhs (lvasgn :a) (lvasgn :b)) (lvasgn :c)) (lvar :d)) "a, (b, c) = d" (masgn (mlhs (send (self) :a=) (send (self) :[]= (int 1))) (lvar :a)) "self.a, self[1] = a" ~~~ ### Binary operator-assignment Binary operator-assignment features the same "incomplete assignments" and "incomplete calls" as [multiple assignment](#assignment-1). #### Variable binary operator-assignment Format: ~~~ (op-asgn (lvasgn :a) :+ (int 1)) "a += 1" ~~ operator ~~~~~~ expression (op-asgn (ivasgn :a) :+ (int 1)) "@a += 1" ~~~ #### Method binary operator-assignment Format: ~~~ (op-asgn (send (ivar :@a) :b) :+ (int 1)) "@a.b += 1" ~ selector (send) ~~~~ expression (send) ~~ operator (op-asgn) ~~~~~~~~~ expression (op-asgn) (op-asgn (send (ivar :@a) :[] (int 0) (int 1))) :+ (int 1)) "@a[0, 1] += 1" ~~~~~~ selector (send) ~~~~~~~~ expression (send) ~~ operator (op-asgn) ~~~~~~~~~~~~~ expression (op-asgn) ~~~ ### Logical operator-assignment Logical operator-assignment features the same "incomplete assignments" and "incomplete calls" as [multiple assignment](#assignment-1). #### Variable logical operator-assignment Format: ~~~ (or-asgn (ivasgn :@a) (int 1)) "@a ||= 1" ~~~ operator ~~~~~~~~ expression (and-asgn (lvasgn :a) (int 1)) "a &&= 1" ~~~ operator ~~~~~~~ expression ~~~ #### Method logical operator-assignment Format: ~~~ (or-asgn (send (ivar :@foo) :bar) (int 1)) "@foo.bar ||= 1" ~~~ selector (send) ~~~~~~~~ expr (send) ~~~ operator (or-asgn) ~~~~~~~~~~~~~~ expression (or-asgn) (and-asgn (send (lvar :@foo) :bar) (int 1)) "foo.bar &&= 1" ~~~ selector (send) ~~~~~~~ expr (send) ~~~ operator (and-asgn) ~~~~~~~~~~~~~ expression (and-asgn) (or-asgn (send (ivar :@foo) :[] (int 1) (int 2)) (int 1)) "@foo[1, 2] ||= 1" ~~~~~~ selector (send) ~~~~~~~~~~ expr (send) ~~~ operator (or-asgn) ~~~~~~~~~~~~~~~~ expression (or-asgn) ~~~ ## Class and module definition ### Module Format: ~~~ (module (const nil :Foo) (nil)) "module Foo; end" ~~~~~~ keyword ~~~ end ~~~ ### Class Format: ~~~ (class (const nil :Foo) (const nil :Bar) (nil)) "class Foo < Bar; end" ~~~~~ keyword ~~~ end ~ operator ~~~~~~~~~~~~~~~~~~~~ expression (class (const nil :Foo) nil (nil)) "class Foo; end" ~~~~~ keyword ~~~ end ~~~~~~~~~~~~~~ expression ~~~ ### Singleton class Format: ~~~ (sclass (lvar :a) (nil)) "class << a; end" ~~~~~ keyword ~~ operator ~~~ end ~~~~~~~~~~~~~~~ expression ~~~ ## Method (un)definition ### Instance methods Format: ~~~ (def :foo (args) nil) "def foo; end" ~~~ keyword ~~~ name ~~~ end ~~~~~~~~~~~~ expression ~~~ ### Singleton methods Format: ~~~ (defs (self) :foo (args) nil) "def self.foo; end" ~~~ keyword ~~~ name ~~~ end ~~~~~~~~~~~~~~~~~ expression ~~~ ### Undefinition Format: ~~~ (undef (sym :foo) (sym :bar) (dsym (str "foo") (int 1))) "undef foo :bar :"foo#{1}"" ~~~~~ keyword ~~~~~~~~~~~~~~~~~~~~~~~~~ expression ~~~ ## Aliasing ### Method aliasing Format: ~~~ (alias (sym :foo) (dsym (str "foo") (int 1))) "alias foo :"foo#{1}"" ~~~~~ keyword ~~~~~~~~~~~~~~~~~~~~ expression ~~~ ### Global variable aliasing Format: ~~~ (alias (gvar :$foo) (gvar :$bar)) "alias $foo $bar" ~~~~~ keyword ~~~~~~~~~~~~~~~ expression (alias (gvar :$foo) (back-ref :$&)) "alias $foo $&" ~~~~~ keyword ~~~~~~~~~~~~~~~ expression ~~~ ## Formal arguments Format: ~~~ (args (arg :foo)) "(foo)" ~~~~~ expression ~~~ ### Required argument Format: ~~~ (arg :foo) "foo" ~~~ expression ~~~ name ~~~ ### Optional argument Format: ~~~ (optarg :foo (int 1)) "foo = 1" ~~~~~~~ expression ^ operator ~~~ name ~~~ ### Named splat argument Format: ~~~ (restarg :foo) "*foo" ~~~~ expression ~~~ name ~~~ Begin of the `expression` points to `*`. ### Unnamed splat argument Format: ~~~ (restarg) "*" ^ expression ~~~ ### Block argument Format: ~~~ (blockarg :foo) "&foo" ~~~ name ~~~~ expression ~~~ Begin of the `expression` points to `&`. ### Auto-expanding proc argument (1.9) In Ruby 1.9 and later, when a proc-like closure (i.e. a closure created by capturing a block or with the `proc` method, but not with the `->{}` syntax or the `lambda` method) has exactly one argument, and it is called with more than one argument, the behavior is as if the array of all arguments was instead passed as the sole argument. This behavior can be prevented by adding a comma after the sole argument (e.g. `|foo,|`). Format: ~~~ (procarg0 (arg :foo)) "|foo|" ~~~ expression (procarg0 (arg :foo) (arg :bar)) "|(foo, bar)|" ~ begin ~ end ~~~~~~~~~~ expression ~~~ ### Expression arguments Ruby 1.8 allows to use arbitrary expressions as block arguments, such as `@var` or `foo.bar`. Such expressions should be treated as if they were on the lhs of a multiple assignment. Format: ~~~ (args (arg_expr (ivasgn :@bar))) "|@bar|" (args (arg_expr (send (send nil :foo) :a=))) "|foo.a|" (args (restarg_expr (ivasgn :@bar))) "|*@bar|" (args (blockarg_expr (ivasgn :@bar))) "|&@bar|" ~~~ ### Block shadow arguments Format: ~~~ (args (shadowarg :foo) (shadowarg :bar)) "|; foo, bar|" ~~~ ### Decomposition Format: ~~~ (def :f (args (arg :a) (mlhs (arg :foo) (restarg :bar)))) "def f(a, (foo, *bar)); end" ^ begin ^ end ~~~~~~~~~~~ expression ~~~ ### Required keyword argument Format: ~~~ (kwarg :foo) "foo:" ~~~~ expression ~~~~ name ~~~ ### Optional keyword argument Format: ~~~ (kwoptarg :foo (int 1)) "foo: 1" ~~~~~~ expression ~~~~ name ~~~ ### Named keyword splat argument Format: ~~~ (kwrestarg :foo) "**foo" ~~~~~ expression ~~~ name ~~~ ### Unnamed keyword splat argument Format: ~~~ (kwrestarg) "**" ~~ expression ~~~ ### Keyword nil argument Format: ~~~ (kwnilarg) "**nil" ~~~ name ~~~~~ expression ~~~ ### Objective-C arguments MacRuby includes a few more syntactic "arguments" whose name becomes the part of the Objective-C method name, despite looking like Ruby 2.0 keyword arguments, and are thus treated differently. #### Objective-C label-like keyword argument Format: ~~~ (objc-kwarg :a :b) "a: b" ~ keyword ~ operator ~ argument ~~~~ expression ~~~ #### Objective-C pair-like keyword argument Format: ~~~ (objc-kwarg :a :b) "a => b" ~ keyword ~~ operator ~ argument ~~~~~~ expression ~~~ #### Objective-C keyword splat argument Format: ~~~ (objc-restarg (objc-kwarg :foo)) "(*a: b)" ~ objc-kwarg.keyword ~ objc-kwarg.operator ~ objc-kwarg.argument ~ operator ~~~~~ expression ~~~ Note that these splat arguments will only be parsed inside parentheses, e.g. in the following code: ~~~ def f((*a: b)); end ~~~ However, the following code results in a parse error: ~~~ def f(*a: b); end ~~~ ## Numbered parameters ### Block with numbered parameters Ruby 2.7 introduced a feature called "numbered parameters". Numbered and ordinal parameters are mutually exclusive, so if the block has only numbered parameters it also has a different AST node. Note that the second child represents a total number of numbered parameters. Format: ~~~ s(:numblock, s(:send, nil, :proc), 3, s(:send, s(:lvar, :_1), :+, s(:lvar, :_3))) "proc { _1 + _3 }" ~ begin ~ end ~~~~~~~~~~~~~~~~ expression ~~~ ## Forward arguments ### Method definition accepting forwarding arguments Ruby 2.7 introduced a feature called "arguments forwarding". When a method takes any arguments for forwarding them in the future the whole `args` node gets replaced with `forward-args` node. Format: ~~~ (def :foo (forward-args) nil) "def foo(...); end" ~ end ~ begin ~~~~~ expression ~~~ ### Method call taking arguments of the currently forwarding method Format: ~~~ (send nil :foo (forwarded-args)) "foo(...)" ~~~ expression ~~~ ## Send ### To self Format: ~~~ (send nil :foo (lvar :bar)) "foo(bar)" ~~~ selector ^ begin ^ end ~~~~~~~~ expression ~~~ ### To receiver Format: ~~~ (send (lvar :foo) :bar (int 1)) "foo.bar(1)" ^ dot ~~~ selector ^ begin ^ end ~~~~~~~~~~ expression (send (lvar :foo) :+ (int 1)) "foo + 1" ^ selector ~~~~~~~ expression (send (lvar :foo) :-@) "-foo" ^ selector ~~~~ expression (send (lvar :foo) :a= (int 1)) "foo.a = 1" ~ selector ^ operator ~~~~~~~~~ expression ~~~ ### To superclass Format of super with arguments: ~~~ (super (lvar :a)) "super a" ~~~~~ keyword ~~~~~~~ expression (super) "super()" ^ begin ^ end ~~~~~ keyword ~~~~~~~ expression ~~~ Format of super without arguments (**z**ero-arity): ~~~ (zsuper) "super" ~~~~~ keyword ~~~~~ expression ~~~ ### To block argument Format: ~~~ (yield (lvar :foo)) "yield(foo)" ~~~~~ keyword ^ begin ^ end ~~~~~~~~~~ expression ~~~ ### Indexing Format: ~~~ (index (lvar :foo) (int 1)) "foo[1]" ^ begin ^ end ~~~~~~ expression (indexasgn (lvar :bar) (int 1) (int 2) (lvar :baz)) "bar[1, 2] = baz" ^ begin ^ end ^ operator ~~~~~~~~~~~~~~~ expression ~~~ ### Passing a literal block ~~~ (block (send nil :foo) (args (arg :bar)) (begin ...)) "foo do |bar|; end" ~~ begin ~~~ end ~~~~~~~~~~~~~ expression ~~~ ### Passing expression as block Used when passing expression as block `foo(&bar)` ~~~ (send nil :foo (int 1) (block-pass (lvar :foo))) "foo(1, &foo)" ^ operator ~~~~ expression ~~~ ### "Stabby lambda" ~~~ (block (lambda) (args) nil) "-> {}" ~~ lambda.expression ~~~ ### "Safe navigation operator" ~~~ (csend (send nil :foo) :bar) "foo&.bar" ~~ dot ~~~ ### Objective-C variadic send MacRuby allows to pass a variadic amount of arguments via the last keyword "argument". Semantically, these, together with the pair value of the last pair in the hash implicitly passed as the last argument, form an array, which replaces the pair value. Despite that, the node is called `objc-varargs` to distinguish it from a literal array passed as a value. ~~~ (send nil :foo (int 1) (hash (pair (sym :bar) (objc-varargs (int 1) (int 2) (nil))))) "foo(1, bar: 2, 3, nil)" ~~~~~~~~~ expression (array) ~~~ ## Control flow ### Logical operators #### Binary (and or && ||) Format: ~~~ (and (lvar :foo) (lvar :bar)) "foo and bar" ~~~ operator ~~~~~~~~~~~ expression ~~~ ~~~ (or (lvar :foo) (lvar :bar)) "foo or bar" ~~ operator ~~~~~~~~~~ expression ~~~ #### Unary (! not) (1.8) Format: ~~~ (not (lvar :foo)) "!foo" ^ operator "not foo" ~~~ operator ~~~ ### Branching #### Without else Format: ~~~ (if (lvar :cond) (lvar :iftrue) nil) "if cond then iftrue; end" ~~ keyword ~~~~ begin ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~ expression "if cond; iftrue; end" ~~ keyword ~~~ end ~~~~~~~~~~~~~~~~~~~~ expression "iftrue if cond" ~~ keyword ~~~~~~~~~~~~~~ expression (if (lvar :cond) nil (lvar :iftrue)) "unless cond then iftrue; end" ~~~~~~ keyword ~~~~ begin ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression "unless cond; iftrue; end" ~~~~~~ keyword ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~ expression "iftrue unless cond" ~~~~~~ keyword ~~~~~~~~~~~~~~~~~~ expression ~~~ #### With else Format: ~~~ (if (lvar :cond) (lvar :iftrue) (lvar :iffalse)) "if cond then iftrue; else; iffalse; end" ~~ keyword ~~~~ begin ~~~~ else ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression "if cond; iftrue; else; iffalse; end" ~~ keyword ~~~~ else ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (if (lvar :cond) (lvar :iffalse) (lvar :iftrue)) "unless cond then iftrue; else; iffalse; end" ~~~~~~ keyword ~~~~ begin ~~~~ else ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression "unless cond; iftrue; else; iffalse; end" ~~~~~~ keyword ~~~~ else ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression ~~~ #### With elsif Format: ~~~ (if (lvar :cond1) (int 1) (if (lvar :cond2 (int 2) (int 3)))) "if cond1; 1; elsif cond2; 2; else 3; end" ~~ keyword (left) ~~~~~ else (left) ~~~ end (left) ~~~~~ keyword (right) ~~~~ else (right) ~~~ end (right) ~~~ #### Ternary Format: ~~~ (if (lvar :cond) (lvar :iftrue) (lvar :iffalse)) "cond ? iftrue : iffalse" ^ question ^ colon ~~~~~~~~~~~~~~~~~~~~~~~ expression ~~~ ### Case matching #### When clause Format: ~~~ (when (regexp "foo" (regopt)) (begin (lvar :bar))) "when /foo/ then bar" ~~~~ keyword ~~~~ begin ~~~~~~~~~~~~~~~~~~~ expression (when (int 1) (int 2) (send nil :meth)) "when 1, 2; meth" (when (int 1) (splat (lvar :foo)) (send nil :meth)) "when 1, *foo; meth" (when (splat (lvar :foo)) (send nil :meth)) "when *foo; meth" ~~~ #### Case-expression clause ##### Without else Format: ~~~ (case (lvar :foo) (when (str "bar") (lvar :bar)) nil) "case foo; when "bar"; bar; end" ~~~~ keyword ~~~ end ~~~ ##### With else Format: ~~~ (case (lvar :foo) (when (str "bar") (lvar :bar)) (lvar :baz)) "case foo; when "bar"; bar; else baz; end" ~~~~ keyword ~~~~ else ~~~ end ~~~ #### Case-conditions clause ##### Without else Format: ~~~ (case nil (when (lvar :bar) (lvar :bar)) nil) "case; when bar; bar; end" ~~~~ keyword ~~~ end ~~~ ##### With else Format: ~~~ (case nil (when (lvar :bar) (lvar :bar)) (lvar :baz)) "case; when bar; bar; else baz; end" ~~~~ keyword ~~~~ else ~~~ end (case nil (lvar :baz)) "case; else baz; end" ~~~~ keyword ~~~~ else ~~~ end ~~~ ### Looping #### With precondition Format: ~~~ (while (lvar :condition) (send nil :foo)) "while condition do foo; end" ~~~~~ keyword ~~ begin ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression "while condition; foo; end" ~~~~~ keyword ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~ expression "foo while condition" ~~~~~ keyword ~~~~~~~~~~~~~~~~~~~ expression (until (lvar :condition) (send nil :foo)) "until condition do foo; end" ~~~~~ keyword ~~ begin ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (until (lvar :condition) (send nil :foo)) "until condition; foo; end" ~~~~~ keyword ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~ expression "foo until condition" ~~~~~ keyword ~~~~~~~~~~~~~~~~~~~ expression ~~~ #### With postcondition Format: ~~~ (while-post (lvar :condition) (kwbegin (send nil :foo))) "begin; foo; end while condition" ~~~~~ begin (begin) ~~~ end (begin) ~~~~~ keyword (while-post) (until-post (lvar :condition) (kwbegin (send nil :foo))) "begin; foo; end until condition" ~~~~~ begin (begin) ~~~ end (begin) ~~~~~ keyword (until-post) ~~~ #### For-in Format: ~~~ (for (lvasgn :a) (lvar :array) (send nil :p (lvar :a))) "for a in array do p a; end" ~~~ keyword ~~ in ~~ begin ~~~ end "for a in array; p a; end" ~~~ keyword ~~ in ~~~ end (for (mlhs (lvasgn :a) (lvasgn :b)) (lvar :array) (send nil :p (lvar :a) (lvar :b))) "for a, b in array; p a, b; end" ~~~ #### Break Format: ~~~ (break (int 1)) "break 1" ~~~~~ keyword ~~~~~~~ expression ~~~ #### Next Format: ~~~ (next (int 1)) "next 1" ~~~~ keyword ~~~~~~ expression ~~~ #### Redo Format: ~~~ (redo) "redo" ~~~~ keyword ~~~~ expression ~~~ ### Return Format: ~~~ (return (lvar :foo)) "return(foo)" ~~~~~~ keyword ~~~~~~~~~~~ expression ~~~ ### Exception handling #### Rescue body Format: ~~~ (resbody (array (const nil :Exception) (const nil :A)) (lvasgn :bar) (int 1)) "rescue Exception, A => bar; 1" ~~~~~~ keyword ~~ assoc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression "rescue Exception, A => bar then 1" ~~~~~~ keyword ~~ assoc ~~~~ begin (resbody (array (const nil :Exception)) (ivasgn :bar) (int 1)) "rescue Exception => @bar; 1" ~~~~~~ keyword ~~ assoc (resbody nil (lvasgn :bar) (int 1)) "rescue => bar; 1" ~~~~~~ keyword ~~ assoc (resbody nil nil (int 1)) "rescue; 1" ~~~~~~ keyword ~~~ #### Rescue statement ##### Without else Format: ~~~ (begin (rescue (send nil :foo) (resbody ...) (resbody ...) nil)) "begin; foo; rescue Exception; rescue; end" ~~~~~ begin ~~~ end ~~~~~~~~~~~~~~~~~ expression (rescue.resbody/1) ~~~~~~~ expression (rescue.resbody/2) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (rescue) ~~~ ##### With else Format: ~~~ (begin (rescue (send nil :foo) (resbody ...) (resbody ...) (true))) "begin; foo; rescue Exception; rescue; else true end" ~~~~~ begin ~~~~ else (rescue) ~~~ end ~~~ #### Ensure statement Format: ~~~ (begin (ensure (send nil :foo) (send nil :bar)) "begin; foo; ensure; bar; end" ~~~~~ begin ~~~~~~ keyword (ensure) ~~~ end ~~~ #### Rescue with ensure Format: ~~~ (begin (ensure (rescue (send nil :foo) (resbody ...) (int 1)) (send nil :bar)) "begin; foo; rescue; nil; else; 1; ensure; bar; end" ~~~~~ begin ~~~~ else (ensure.rescue) ~~~~~~~~~~~~~~~~~~~~~ expression (rescue) ~~~~~~ keyword (ensure) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression (ensure) ~~~ end ~~~ #### Retry Format: ~~~ (retry) "retry" ~~~~~ keyword ~~~~~ expression ~~~ ### BEGIN and END Format: ~~~ (preexe (send nil :puts (str "foo"))) "BEGIN { puts "foo" }" ~~~~~ keyword ^ begin ^ end ~~~~~~~~~~~~~~~~~~~~ expression (postexe (send nil :puts (str "bar"))) "END { puts "bar" }" ~~~ keyword ^ begin ^ end ~~~~~~~~~~~~~~~~~~ expression ~~~ ## Miscellanea ### Flip-flops Format: ~~~ (iflipflop (lvar :a) (lvar :b)) "if a..b; end" ~~ operator ~~~~ expression (eflipflop (lvar :a) (lvar :b)) "if a...b; end" ~~~ operator ~~~~~ expression ~~~ ### Implicit matches Format: ~~~ (match-current-line (regexp (str "a") (regopt))) "if /a/; end" ~~~ expression ~~~ ### Local variable injecting matches Format: ~~~ (match-with-lvasgn (regexp (str "(?bar)") (regopt)) (lvar :baz)) "/(?bar)/ =~ baz" ~~ selector ~~~~~~~~~~~~~~~~~~~~~~ expression ~~~ ## Special constants ### File Format: ~~~ (__FILE__) "__FILE__" ~~~~~~~~ expression ~~~ ### Line Format: ~~~ (__LINE__) "__LINE__" ~~~~~~~~ expression ~~~ ### Encoding Format: ~~~ (__ENCODING__) "__ENCODING__" ~~~~~~~~~~~~ expression ~~~ ## Pattern matching ### Using `in` modifier Format: ~~~ (in-match (int 1) (match-var :a)) "1 in a" ~~ operator ~~~~~~ expression ~~~ ### Case with pattern matching #### Without else Format: ~~~ (case-match (str "str") (in-pattern (match-var :foo) (lvar :bar)) nil) "case "str"; in foo; bar; end" ~~~~ keyword ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression ~~~ #### With else Format: ~~~ (case-match, (str "str") (in-pattern (match-var :foo) (lvar :bar)) (lvar :baz)) "case "str"; in foo; bar; else; baz; end" ~~~~ keyword ~~~~ else ~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression ~~~ ### In clause Format: ~~~ (in-pattern (match-var :foo) (lvar :bar)) "in foo then bar" ~~ keyword ~~~~ begin ~~~~~~~~~~~~~~~ expression ~~~ ### If guard This guard runs after matching, so it's not an `if` modifier. Format: ~~~ (in-pattern (match-var :foo) (if-guard (lvar :bar)) nil) "in foo if bar" ~~ keyword ~~~~~~ expression ~~~ ### Unless guard This guard runs after matching, so it's not an `unless` modifier. Format: ~~~ (in-pattern (match-var :foo) (unless-guard (lvar :bar)) nil) "in foo unless bar" ~~~~~~ keyword ~~~~~~~~~~ expression ~~~ ### Match variable Format: ~~~ (match-var :foo) "in foo" ~~~ name ~~~ expression ~~~ ### Match rest #### With name Format: ~~~ (match-rest (match-var :foo)) "in *foo" ~ operator ~~~~ expression ~~~ #### Without name Format: ~~~ (match-rest) "in *" ~ operator ~ expression ~~~ ### Pin operator Format: ~~~ (pin (lvar :foo)) "in ^foo" ~ selector ~~~~ expression ~~~ ### Match alternative Format: ~~~ (match-alt (pin (lvar :foo)) (int 1)) "in ^foo | 1" ~ operator ~~~~~~~~ expression ~~~ ### Match with alias Format: ~~~ (match-as (int 1) (match-var :foo)) "in 1 => foo" ~~ operator ~~~~~~~~ expression ~~~ ### Match using array pattern #### Explicit Format: ~~~ (array-pattern (pin (lvar :foo)) (match-var :bar)) "in [^foo, bar]" ~ begin ~ end ~~~~~~~~~~~ expression ~~~ #### Explicit with tail Adding a trailing comma in the end works as `, *` Format: ~~~ (array-pattern-with-tail (pin (lvar :foo)) (match-var :bar)) "in [^foo, bar,]" ~ begin ~ end ~~~~~~~~~~~~ expression ~~~ #### Implicit Format: ~~~ (array-pattern (pin (lvar :foo)) (match-var :bar)) "in ^foo, bar" ~~~~~~~~~ expression ~~~ #### Implicit with tail Format: Adding a trailing comma in the end works as `, *`, so a single item match with comma gets interpreted as an array. ~~~ (array-pattern-with-tail (match-var :foo)) "in foo," ~~~ expression ~~~ ### Matching using hash pattern #### Explicit Format: ~~~ (hash-pattern (pair (sym :a) (int 10))) "in { a: 10 }" ~ begin ~ end ~~~~~~~~~ expression ~~~ #### Implicit Format: ~~~ (hash-pattern (pair (sym :a) (int 10))) "in a: 10" ~~~~~ expression ~~~ #### Assignment using hash pattern Format: ~~~ (hash-pattern (match-var :a)) "in a:" ~ name (match-var) ~~ expression (match-var) ~~~ #### Nil hash pattern Format: ~~~ (hash-pattern (match-nil-pattern)) "in **nil" ~~~~~ expression (match-nil-pattern) ~~~ name (match-nil-pattern) ~~~ ### Matching using const pattern #### With array pattern Format: ~~~ (const-pattern (const nil :X) (array-pattern (pin (lvar :foo)) (match-var :bar))) "in X[^foo bar]" ~ begin (const-pattern) ~ end (const-pattern) ~~~~~~~~~~~ expression (const-pattern) ~ name (const-pattern.const) ~ expression (const-pattern.const) ~~~ #### With hash pattern Format: ~~~ (const-pattern (const nil :X) (hash-pattern (match-var :foo) (match-var :bar))) "in X[foo:, bar:]" ~ begin (const-pattern) ~ end (const-pattern) ~~~~~~~~~~~~ expression (const-pattern) ~ name (const-pattern.const) ~ expression (const-pattern.const) ~~~ parser-2.7.0.2/doc/CUSTOMIZATION.md0000644000004100000410000000230313617025313016342 0ustar www-datawww-data# Customizing Parsers While the default setup of the parsers provided by this Gem should be suitable for most some developers might want to change parts of it. An example would be the use of a custom class for nodes instead of `Parser::AST::Node`. Customizing the AST is done by creating a custom builder class and passing it to the constructor method of a parser. The default setup comes down to the following: builder = Parser::Builders::Default.new parser = Parser::Ruby19.new(builder) When creating your own builder class it's best to subclass the default one so that you don't have to redefine every used method again: class MyBuilder < Parser::Builders::Default end builder = MyBuilder.new parser = Parser::Ruby19.new(builder) ## Custom Node Classes To use a custom node class you have to override the method `Parser::Builders::Default#n`: class MyBuilder < Parser::Builders::Default def n(type, children, location) return MyNodeClass.new(type, children, :location => location) end end Note that the used class (and corresponding instance) must be compatible with `Parser::AST::Node` so it's best to subclass it and override/add code where needed. parser-2.7.0.2/doc/INTERNALS.md0000644000004100000410000000166313617025313015641 0ustar www-datawww-dataEntry points ------------ Parser should be kept as slim as possible. This includes not loading any potentially large files when they are likely to be unused in practice. Parser has five main (classes of) `require` entry points: * `require 'parser'`. Main entry point, requires all classes which are used across the entire library. * `require 'parser/rubyXX'`. Version-specific entry point. Can raise a NotImplementedError if current Ruby runtime is unable to parse the requested Ruby version. * `require 'parser/all'`. Requires all available parsers for released versions of Ruby. Can raise NotImplementedError. * `require 'parser/runner'`. Requires all the stuff which is useful for command-line tools but not otherwise. * `require 'parser/runner/X'`. Runner-specific entry point. All non-main entry points internally `require 'parser'`. Additionally, all runner-specific entry points internally `requre 'parser/runner'`. parser-2.7.0.2/Gemfile0000644000004100000410000000036613617025313014505 0ustar www-datawww-data# frozen_string_literal: true source 'https://rubygems.org' # Specify your gem's dependencies in parser.gemspec gemspec # Workaround for bug in Bundler on JRuby # See https://github.com/bundler/bundler/issues/4157 gem 'ast', '>= 1.1', '< 3.0' parser-2.7.0.2/parser.gemspec0000644000004100000410000000362713617025313016056 0ustar www-datawww-data# encoding: utf-8 # frozen_string_literal: true require File.expand_path('../lib/parser/version', __FILE__) Gem::Specification.new do |spec| spec.name = 'parser' spec.version = Parser::VERSION spec.authors = ['whitequark'] spec.email = ['whitequark@whitequark.org'] spec.description = 'A Ruby parser written in pure Ruby.' spec.summary = spec.description spec.homepage = 'https://github.com/whitequark/parser' spec.license = 'MIT' spec.files = `git ls-files`.split + %w( lib/parser/lexer.rb lib/parser/ruby18.rb lib/parser/ruby19.rb lib/parser/ruby20.rb lib/parser/ruby21.rb lib/parser/ruby22.rb lib/parser/ruby23.rb lib/parser/ruby24.rb lib/parser/ruby25.rb lib/parser/ruby26.rb lib/parser/ruby27.rb lib/parser/macruby.rb lib/parser/rubymotion.rb ) spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^test/}) spec.require_paths = ['lib'] spec.required_ruby_version = '>= 2.0.0' spec.add_dependency 'ast', '~> 2.4.0' spec.add_development_dependency 'bundler', '>= 1.15', '< 3.0.0' spec.add_development_dependency 'rake', '~> 10.0' spec.add_development_dependency 'racc', '= 1.4.15' spec.add_development_dependency 'cliver', '~> 0.3.2' spec.add_development_dependency 'yard' spec.add_development_dependency 'kramdown' spec.add_development_dependency 'minitest', '~> 5.10' spec.add_development_dependency 'simplecov', '~> 0.15.1' spec.add_development_dependency 'gauntlet' end parser-2.7.0.2/LICENSE.txt0000644000004100000410000000224513617025313015033 0ustar www-datawww-dataCopyright (c) 2013-2016 whitequark Parts of the source are derived from ruby_parser: Copyright (c) Ryan Davis, seattle.rb MIT License 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. parser-2.7.0.2/ci/0000755000004100000410000000000013617025313013600 5ustar www-datawww-dataparser-2.7.0.2/ci/run_rubocop_specs0000755000004100000410000000037313617025313017263 0ustar www-datawww-data#!/usr/bin/env bash set -eux bundle install rake generate git clone https://github.com/rubocop-hq/rubocop.git --depth=1 cd rubocop export BUNDLE_GEMFILE=Gemfile echo "gem 'parser', path: '../'" > Gemfile.local bundle install bundle exec rake spec